View Javadoc
1   package org.junit.internal.requests;
2   
3   import org.junit.internal.builders.AllDefaultPossibilitiesBuilder;
4   import org.junit.runner.Request;
5   import org.junit.runner.Runner;
6   
7   public class ClassRequest extends Request {
8       private final Object runnerLock = new Object();
9   
10      /*
11       * We have to use the f prefix, because IntelliJ's JUnit4IdeaTestRunner uses
12       * reflection to access this field. See
13       * https://github.com/junit-team/junit/issues/960
14       */
15      private final Class<?> fTestClass;
16      private final boolean canUseSuiteMethod;
17      private volatile Runner runner;
18  
19      public ClassRequest(Class<?> testClass, boolean canUseSuiteMethod) {
20          this.fTestClass = testClass;
21          this.canUseSuiteMethod = canUseSuiteMethod;
22      }
23  
24      public ClassRequest(Class<?> testClass) {
25          this(testClass, true);
26      }
27  
28      @Override
29      public Runner getRunner() {
30          if (runner == null) {
31              synchronized (runnerLock) {
32                  if (runner == null) {
33                      runner = new AllDefaultPossibilitiesBuilder(canUseSuiteMethod).safeRunnerForClass(fTestClass);
34                  }
35              }
36          }
37          return runner;
38      }
39  }