28
28
*/
29
29
class DefaultLauncherSession implements LauncherSession {
30
30
31
+ private final LauncherInterceptor interceptor ;
31
32
private final LauncherSessionListener listener ;
32
- private final DelegatingCloseableLauncher <CloseableLauncher > launcher ;
33
-
34
- DefaultLauncherSession (List <LauncherInterceptor > interceptors , Supplier <Launcher > launcherSupplier ,
35
- Supplier <LauncherSessionListener > listenerSupplier ) {
36
- LauncherInterceptor interceptor = LauncherInterceptor .composite (interceptors );
37
- this .listener = interceptor .intercept (listenerSupplier ::get );
38
- Launcher launcher = interceptor .intercept (launcherSupplier ::get );
39
- CloseableLauncher closeableLauncher = new InterceptingClosableLauncher (launcher , interceptor );
40
- this .launcher = new DelegatingCloseableLauncher <>(closeableLauncher , delegate -> {
41
- delegate .close ();
42
- return ClosedLauncher .INSTANCE ;
43
- });
33
+ private final DelegatingLauncher launcher ;
34
+
35
+ DefaultLauncherSession (List <LauncherInterceptor > interceptors , Supplier <LauncherSessionListener > listenerSupplier ,
36
+ Supplier <Launcher > launcherSupplier ) {
37
+ interceptor = LauncherInterceptor .composite (interceptors );
38
+ Launcher launcher ;
39
+ if (interceptor == LauncherInterceptor .NOOP ) {
40
+ this .listener = listenerSupplier .get ();
41
+ launcher = launcherSupplier .get ();
42
+ }
43
+ else {
44
+ this .listener = interceptor .intercept (listenerSupplier ::get );
45
+ launcher = new InterceptingLauncher (interceptor .intercept (launcherSupplier ::get ), interceptor );
46
+ }
47
+ this .launcher = new DelegatingLauncher (launcher );
44
48
listener .launcherSessionOpened (this );
45
49
}
46
50
@@ -55,13 +59,14 @@ LauncherSessionListener getListener() {
55
59
56
60
@ Override
57
61
public void close () {
58
- if (! launcher .isClosed () ) {
59
- launcher .close () ;
62
+ if (launcher .delegate != ClosedLauncher . INSTANCE ) {
63
+ launcher .delegate = ClosedLauncher . INSTANCE ;
60
64
listener .launcherSessionClosed (this );
65
+ interceptor .close ();
61
66
}
62
67
}
63
68
64
- private static class ClosedLauncher implements CloseableLauncher {
69
+ private static class ClosedLauncher implements Launcher {
65
70
66
71
static final ClosedLauncher INSTANCE = new ClosedLauncher ();
67
72
@@ -92,10 +97,5 @@ public void execute(LauncherDiscoveryRequest launcherDiscoveryRequest, TestExecu
92
97
public void execute (TestPlan testPlan , TestExecutionListener ... listeners ) {
93
98
throw new PreconditionViolationException ("Launcher session has already been closed" );
94
99
}
95
-
96
- @ Override
97
- public void close () {
98
- // do nothing
99
- }
100
100
}
101
101
}
0 commit comments