aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/junit/internal/requests/ClassRequest.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/junit/internal/requests/ClassRequest.java')
-rw-r--r--src/main/java/org/junit/internal/requests/ClassRequest.java41
1 files changed, 27 insertions, 14 deletions
diff --git a/src/main/java/org/junit/internal/requests/ClassRequest.java b/src/main/java/org/junit/internal/requests/ClassRequest.java
index 53bf520..3d6b100 100644
--- a/src/main/java/org/junit/internal/requests/ClassRequest.java
+++ b/src/main/java/org/junit/internal/requests/ClassRequest.java
@@ -1,26 +1,39 @@
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 Class<?> fTestClass;
+ private final Object runnerLock = new Object();
- private boolean fCanUseSuiteMethod;
+ /*
+ * 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) {
- fTestClass= testClass;
- fCanUseSuiteMethod= canUseSuiteMethod;
- }
+ public ClassRequest(Class<?> testClass, boolean canUseSuiteMethod) {
+ this.fTestClass = testClass;
+ this.canUseSuiteMethod = canUseSuiteMethod;
+ }
- public ClassRequest(Class<?> testClass) {
- this(testClass, true);
- }
+ public ClassRequest(Class<?> testClass) {
+ this(testClass, true);
+ }
- @Override
- public Runner getRunner() {
- return new AllDefaultPossibilitiesBuilder(fCanUseSuiteMethod).safeRunnerForClass(fTestClass);
- }
+ @Override
+ public Runner getRunner() {
+ if (runner == null) {
+ synchronized (runnerLock) {
+ if (runner == null) {
+ runner = new AllDefaultPossibilitiesBuilder(canUseSuiteMethod).safeRunnerForClass(fTestClass);
+ }
+ }
+ }
+ return runner;
+ }
} \ No newline at end of file