package org.junit.internal.requests; import org.junit.internal.builders.AllDefaultPossibilitiesBuilder; import org.junit.runner.Request; import org.junit.runner.Runner; public class ClassRequest extends Request { private final Object runnerLock = new Object(); /* * We have to use the f prefix, because IntelliJ's JUnit4IdeaTestRunner uses * reflection to access this field. See * https://github.com/junit-team/junit/issues/960 */ private final Class<?> fTestClass; private final boolean canUseSuiteMethod; private volatile Runner runner; public ClassRequest(Class<?> testClass, boolean canUseSuiteMethod) { this.fTestClass = testClass; this.canUseSuiteMethod = canUseSuiteMethod; } public ClassRequest(Class<?> testClass) { this(testClass, true); } @Override public Runner getRunner() { if (runner == null) { synchronized (runnerLock) { if (runner == null) { runner = new AllDefaultPossibilitiesBuilder(canUseSuiteMethod).safeRunnerForClass(fTestClass); } } } return runner; } }