1
1
package org .junit .internal .requests ;
2
2
3
- import java .util .concurrent .locks .Lock ;
4
- import java .util .concurrent .locks .ReentrantLock ;
5
-
6
3
import org .junit .internal .builders .AllDefaultPossibilitiesBuilder ;
7
4
import org .junit .internal .builders .SuiteMethodBuilder ;
8
- import org .junit .runner .Request ;
9
5
import org .junit .runner .Runner ;
10
6
import org .junit .runners .model .RunnerBuilder ;
11
7
12
- public class ClassRequest extends Request {
13
- private final Lock runnerLock = new ReentrantLock ();
14
-
8
+ public class ClassRequest extends MemoizingRequest {
15
9
/*
16
10
* We have to use the f prefix, because IntelliJ's JUnit4IdeaTestRunner uses
17
11
* reflection to access this field. See
18
12
* https://github.com/junit-team/junit4/issues/960
19
13
*/
20
14
private final Class <?> fTestClass ;
21
15
private final boolean canUseSuiteMethod ;
22
- private volatile Runner runner ;
23
16
24
17
public ClassRequest (Class <?> testClass , boolean canUseSuiteMethod ) {
25
18
this .fTestClass = testClass ;
@@ -31,18 +24,8 @@ public ClassRequest(Class<?> testClass) {
31
24
}
32
25
33
26
@ Override
34
- public Runner getRunner () {
35
- if (runner == null ) {
36
- runnerLock .lock ();
37
- try {
38
- if (runner == null ) {
39
- runner = new CustomAllDefaultPossibilitiesBuilder ().safeRunnerForClass (fTestClass );
40
- }
41
- } finally {
42
- runnerLock .unlock ();
43
- }
44
- }
45
- return runner ;
27
+ protected Runner createRunner () {
28
+ return new CustomAllDefaultPossibilitiesBuilder ().safeRunnerForClass (fTestClass );
46
29
}
47
30
48
31
private class CustomAllDefaultPossibilitiesBuilder extends AllDefaultPossibilitiesBuilder {
0 commit comments