Move some sharable classes from c.g.testing.junit.runner.junit4 to
c.g.testing.junit.junit4.runner.internal or
c.g.testing.junit.junit4.runner.internal.junit4

--
MOS_MIGRATED_REVID=135003685
diff --git a/src/java_tools/junitrunner/java/com/google/testing/junit/junit4/BUILD b/src/java_tools/junitrunner/java/com/google/testing/junit/junit4/BUILD
index ba9ff13..ddbdd4a 100644
--- a/src/java_tools/junitrunner/java/com/google/testing/junit/junit4/BUILD
+++ b/src/java_tools/junitrunner/java/com/google/testing/junit/junit4/BUILD
@@ -16,6 +16,7 @@
     testonly = 0,  # TODO(bazel-team): make it testonly
     srcs = glob(["runner/*.java"]),
     deps = [
+        "//third_party:jsr330_inject",
         "//third_party:junit4",
     ],
 )
diff --git a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/internal/BUILD b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/internal/BUILD
index 7047b3b..7e3fa4d 100644
--- a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/internal/BUILD
+++ b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/internal/BUILD
@@ -1,11 +1,29 @@
 package(default_visibility = ["//src:__subpackages__"])
 
+# Internal code for the JUnit runner that does not depend on JUnit 4.
+# Code used by the JUnit runner that does depend on JUnit 4
+# lives in the ":junit4" rule.
 java_library(
     name = "internal",
     srcs = glob(["*.java"]),
     deps = [
         "//src/java_tools/junitrunner/java/com/google/testing/junit/runner/util",
         "//third_party:jsr330_inject",
+    ],
+)
+
+# Internal code for the JUnit runner that depends on JUnit 4.
+# Code used by the JUnit runner that doesn't depend on JUnit 4
+# lives in the "internal" rule.
+java_library(
+    name = "junit4",
+    srcs = glob(["junit4/*.java"]),
+    deps = [
+        ":internal",
+        "//src/java_tools/junitrunner/java/com/google/testing/junit/junit4:runner",
+        "//src/java_tools/junitrunner/java/com/google/testing/junit/runner/model",
+        "//src/java_tools/junitrunner/java/com/google/testing/junit/runner/util",
+        "//third_party:jsr330_inject",
         "//third_party:junit4",
     ],
 )
diff --git a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/Xml.java b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/internal/Xml.java
similarity index 92%
rename from src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/Xml.java
rename to src/java_tools/junitrunner/java/com/google/testing/junit/runner/internal/Xml.java
index 1cff1de..2734eb1 100644
--- a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/Xml.java
+++ b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/internal/Xml.java
@@ -12,13 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.google.testing.junit.runner.junit4;
+package com.google.testing.junit.runner.internal;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
-
 import javax.inject.Qualifier;
 
 /**
@@ -28,5 +27,5 @@
 @Retention(RetentionPolicy.RUNTIME)
 @Target({ElementType.PARAMETER, ElementType.METHOD})
 @Qualifier
-@interface Xml {
+public @interface Xml {
 }
diff --git a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/CancellableRequestFactory.java b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/internal/junit4/CancellableRequestFactory.java
similarity index 95%
rename from src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/CancellableRequestFactory.java
rename to src/java_tools/junitrunner/java/com/google/testing/junit/runner/internal/junit4/CancellableRequestFactory.java
index 7a4a380..74ee5de 100644
--- a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/CancellableRequestFactory.java
+++ b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/internal/junit4/CancellableRequestFactory.java
@@ -12,11 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.google.testing.junit.runner.junit4;
+package com.google.testing.junit.runner.internal.junit4;
 
 import com.google.testing.junit.junit4.runner.MemoizingRequest;
 import com.google.testing.junit.junit4.runner.RunNotifierWrapper;
-
 import javax.inject.Inject;
 import javax.inject.Singleton;
 import org.junit.runner.Description;
@@ -29,13 +28,13 @@
  * Creates requests that can be cancelled.
  */
 @Singleton
-class CancellableRequestFactory {
+public class CancellableRequestFactory {
   private boolean requestCreated;
   private volatile ThreadSafeRunNotifier currentNotifier;
   private volatile boolean cancelRequested = false;
 
   @Inject
-  CancellableRequestFactory() {}
+  public CancellableRequestFactory() {}
 
   /**
    * Creates a request that can be cancelled. Can only be called once.
diff --git a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4TestNameListener.java b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/internal/junit4/JUnit4TestNameListener.java
similarity index 93%
rename from src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4TestNameListener.java
rename to src/java_tools/junitrunner/java/com/google/testing/junit/runner/internal/junit4/JUnit4TestNameListener.java
index e1c2c54..b2a2e57 100644
--- a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4TestNameListener.java
+++ b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/internal/junit4/JUnit4TestNameListener.java
@@ -12,21 +12,19 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.google.testing.junit.runner.junit4;
+package com.google.testing.junit.runner.internal.junit4;
 
 import com.google.testing.junit.runner.util.TestNameProvider;
-
-import org.junit.runner.Description;
-import org.junit.runner.notification.RunListener;
-
 import javax.inject.Inject;
 import javax.inject.Singleton;
+import org.junit.runner.Description;
+import org.junit.runner.notification.RunListener;
 
 /**
  * A listener to get the name of a JUnit4 test.
  */
 @Singleton
-class JUnit4TestNameListener extends RunListener {
+public class JUnit4TestNameListener extends RunListener {
   private final ThreadLocal<Description> runningTest = new ThreadLocal<>();
   private final SettableCurrentRunningTest currentRunningTest;
 
diff --git a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4TestStackTraceListener.java b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/internal/junit4/JUnit4TestStackTraceListener.java
similarity index 93%
rename from src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4TestStackTraceListener.java
rename to src/java_tools/junitrunner/java/com/google/testing/junit/runner/internal/junit4/JUnit4TestStackTraceListener.java
index 8f62b1d..d1ef844 100644
--- a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4TestStackTraceListener.java
+++ b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/internal/junit4/JUnit4TestStackTraceListener.java
@@ -12,28 +12,24 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.google.testing.junit.runner.junit4;
+package com.google.testing.junit.runner.internal.junit4;
 
 import com.google.testing.junit.runner.internal.SignalHandlers;
 import com.google.testing.junit.runner.internal.StackTraces;
 import com.google.testing.junit.runner.internal.Stderr;
-
-import org.junit.runner.Description;
-import org.junit.runner.notification.RunListener;
-
-import sun.misc.Signal;
-import sun.misc.SignalHandler;
-
 import java.io.PrintStream;
-
 import javax.inject.Inject;
 import javax.inject.Singleton;
+import org.junit.runner.Description;
+import org.junit.runner.notification.RunListener;
+import sun.misc.Signal;
+import sun.misc.SignalHandler;
 
 /**
  * A listener than dumps all stack traces when the test receives a SIGTERM.
  */
 @Singleton
-class JUnit4TestStackTraceListener extends RunListener  {
+public class JUnit4TestStackTraceListener extends RunListener  {
   private final SignalHandlers signalHandlers;
   private final PrintStream errPrintStream;
 
diff --git a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4TestXmlListener.java b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/internal/junit4/JUnit4TestXmlListener.java
similarity index 95%
rename from src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4TestXmlListener.java
rename to src/java_tools/junitrunner/java/com/google/testing/junit/runner/internal/junit4/JUnit4TestXmlListener.java
index 5dfc76f..6d60725 100644
--- a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4TestXmlListener.java
+++ b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/internal/junit4/JUnit4TestXmlListener.java
@@ -12,10 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.google.testing.junit.runner.junit4;
+package com.google.testing.junit.runner.internal.junit4;
 
 import com.google.testing.junit.runner.internal.SignalHandlers;
 import com.google.testing.junit.runner.internal.Stderr;
+import com.google.testing.junit.runner.internal.Xml;
 import com.google.testing.junit.runner.model.TestSuiteModel;
 import com.google.testing.junit.runner.util.Supplier;
 import java.io.OutputStream;
@@ -34,7 +35,7 @@
  * A listener that writes the test output as XML.
  */
 @Singleton
-class JUnit4TestXmlListener extends RunListener  {
+public class JUnit4TestXmlListener extends RunListener  {
   private final Supplier<TestSuiteModel> modelSupplier;
   private final CancellableRequestFactory requestFactory;
   private final SignalHandlers signalHandlers;
diff --git a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/SettableCurrentRunningTest.java b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/internal/junit4/SettableCurrentRunningTest.java
similarity index 79%
rename from src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/SettableCurrentRunningTest.java
rename to src/java_tools/junitrunner/java/com/google/testing/junit/runner/internal/junit4/SettableCurrentRunningTest.java
index 785d414..28894ba 100644
--- a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/SettableCurrentRunningTest.java
+++ b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/internal/junit4/SettableCurrentRunningTest.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.google.testing.junit.runner.junit4;
+package com.google.testing.junit.runner.internal.junit4;
 
 import com.google.testing.junit.runner.util.CurrentRunningTest;
 import com.google.testing.junit.runner.util.TestNameProvider;
@@ -20,6 +20,6 @@
 /**
  * A {@link CurrentRunningTest} variant that allows to set the testNameProvider via a method call.
  */
-abstract class SettableCurrentRunningTest extends CurrentRunningTest {
-  abstract void setGlobalTestNameProvider(TestNameProvider provider);
+public abstract class SettableCurrentRunningTest extends CurrentRunningTest {
+  protected abstract void setGlobalTestNameProvider(TestNameProvider provider);
 }
diff --git a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/BUILD b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/BUILD
index b8887fc..bd9f787 100644
--- a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/BUILD
+++ b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/BUILD
@@ -1,18 +1,18 @@
 DEFAULT_VISIBILITY = [
-    "//java/com/google/testing/junit/runner:__subpackages__",
-    "//javatests/com/google/testing/junit/runner:__subpackages__",
     "//third_party/bazel/src/java_tools/junitrunner/java/com/google/testing/junit/runner:__subpackages__",
     "//third_party/bazel/src/java_tools/junitrunner/javatests/com/google/testing/junit/runner:__subpackages__",
 ]
 
 package(default_visibility = ["//src:__subpackages__"])
 
+# JUnit4 test runner core code.
 java_library(
     name = "junit4",
     srcs = glob(["*.java"]),
     deps = [
         "//src/java_tools/junitrunner/java/com/google/testing/junit/junit4:runner",
         "//src/java_tools/junitrunner/java/com/google/testing/junit/runner/internal",
+        "//src/java_tools/junitrunner/java/com/google/testing/junit/runner/internal:junit4",
         "//src/java_tools/junitrunner/java/com/google/testing/junit/runner/model",
         "//src/java_tools/junitrunner/java/com/google/testing/junit/runner/sharding",
         "//src/java_tools/junitrunner/java/com/google/testing/junit/runner/sharding/api",
diff --git a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/CancellableRequestFactoryFactory.java b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/CancellableRequestFactoryFactory.java
index 8fbd21a..ca90cc1 100644
--- a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/CancellableRequestFactoryFactory.java
+++ b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/CancellableRequestFactoryFactory.java
@@ -14,6 +14,7 @@
 
 package com.google.testing.junit.runner.junit4;
 
+import com.google.testing.junit.runner.internal.junit4.CancellableRequestFactory;
 import com.google.testing.junit.runner.util.Factory;
 
 /**
diff --git a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/CurrentRunningTestFactory.java b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/CurrentRunningTestFactory.java
index 5043b88..a50a7a5 100644
--- a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/CurrentRunningTestFactory.java
+++ b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/CurrentRunningTestFactory.java
@@ -14,6 +14,7 @@
 
 package com.google.testing.junit.runner.junit4;
 
+import com.google.testing.junit.runner.internal.junit4.SettableCurrentRunningTest;
 import com.google.testing.junit.runner.util.Factory;
 
 /**
diff --git a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4Runner.java b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4Runner.java
index 0dfd042..87a2a48 100644
--- a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4Runner.java
+++ b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4Runner.java
@@ -17,6 +17,7 @@
 import com.google.testing.junit.junit4.runner.RegExTestCaseFilter;
 import com.google.testing.junit.junit4.runner.SuiteTrimmingFilter;
 import com.google.testing.junit.runner.internal.Stdout;
+import com.google.testing.junit.runner.internal.junit4.CancellableRequestFactory;
 import com.google.testing.junit.runner.model.TestSuiteModel;
 import com.google.testing.junit.runner.util.GoogleTestSecurityManager;
 import com.google.testing.junit.runner.util.Supplier;
diff --git a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4RunnerFactory.java b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4RunnerFactory.java
index d7db896..cfb86c8 100644
--- a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4RunnerFactory.java
+++ b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4RunnerFactory.java
@@ -14,6 +14,7 @@
 
 package com.google.testing.junit.runner.junit4;
 
+import com.google.testing.junit.runner.internal.junit4.CancellableRequestFactory;
 import com.google.testing.junit.runner.model.TestSuiteModel;
 import com.google.testing.junit.runner.util.Factory;
 import com.google.testing.junit.runner.util.Supplier;
diff --git a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4RunnerModule.java b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4RunnerModule.java
index 1e2972b..fa7a046 100644
--- a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4RunnerModule.java
+++ b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4RunnerModule.java
@@ -15,6 +15,11 @@
 package com.google.testing.junit.runner.junit4;
 
 import com.google.testing.junit.runner.internal.SignalHandlers;
+import com.google.testing.junit.runner.internal.Xml;
+import com.google.testing.junit.runner.internal.junit4.JUnit4TestNameListener;
+import com.google.testing.junit.runner.internal.junit4.JUnit4TestStackTraceListener;
+import com.google.testing.junit.runner.internal.junit4.JUnit4TestXmlListener;
+import com.google.testing.junit.runner.internal.junit4.SettableCurrentRunningTest;
 import com.google.testing.junit.runner.util.TestNameProvider;
 import com.google.testing.junit.runner.util.Ticker;
 import java.io.FileNotFoundException;
@@ -98,7 +103,7 @@
   SettableCurrentRunningTest provideCurrentRunningTest() {
     return new SettableCurrentRunningTest() {
       @Override
-      void setGlobalTestNameProvider(TestNameProvider provider) {
+      protected void setGlobalTestNameProvider(TestNameProvider provider) {
         testNameProvider = provider;
       }
     };
diff --git a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4TestNameListenerFactory.java b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4TestNameListenerFactory.java
index 0c05619..b12a924 100644
--- a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4TestNameListenerFactory.java
+++ b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4TestNameListenerFactory.java
@@ -14,6 +14,8 @@
 
 package com.google.testing.junit.runner.junit4;
 
+import com.google.testing.junit.runner.internal.junit4.JUnit4TestNameListener;
+import com.google.testing.junit.runner.internal.junit4.SettableCurrentRunningTest;
 import com.google.testing.junit.runner.util.Factory;
 import com.google.testing.junit.runner.util.Supplier;
 
diff --git a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4TestStackTraceListenerFactory.java b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4TestStackTraceListenerFactory.java
index bad3e82..865cd68 100644
--- a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4TestStackTraceListenerFactory.java
+++ b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4TestStackTraceListenerFactory.java
@@ -15,6 +15,7 @@
 package com.google.testing.junit.runner.junit4;
 
 import com.google.testing.junit.runner.internal.SignalHandlers;
+import com.google.testing.junit.runner.internal.junit4.JUnit4TestStackTraceListener;
 import com.google.testing.junit.runner.util.Factory;
 import com.google.testing.junit.runner.util.Supplier;
 import java.io.PrintStream;
diff --git a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4TestXmlListenerFactory.java b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4TestXmlListenerFactory.java
index 7ceb2bb..2ba9dd4 100644
--- a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4TestXmlListenerFactory.java
+++ b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4TestXmlListenerFactory.java
@@ -15,6 +15,8 @@
 package com.google.testing.junit.runner.junit4;
 
 import com.google.testing.junit.runner.internal.SignalHandlers;
+import com.google.testing.junit.runner.internal.junit4.CancellableRequestFactory;
+import com.google.testing.junit.runner.internal.junit4.JUnit4TestXmlListener;
 import com.google.testing.junit.runner.model.TestSuiteModel;
 import com.google.testing.junit.runner.util.Factory;
 import com.google.testing.junit.runner.util.Supplier;
diff --git a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/NameListenerFactory.java b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/NameListenerFactory.java
index 2ae4d76..a65b96c 100644
--- a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/NameListenerFactory.java
+++ b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/NameListenerFactory.java
@@ -14,6 +14,7 @@
 
 package com.google.testing.junit.runner.junit4;
 
+import com.google.testing.junit.runner.internal.junit4.JUnit4TestNameListener;
 import com.google.testing.junit.runner.util.Factory;
 import com.google.testing.junit.runner.util.Supplier;
 import org.junit.runner.notification.RunListener;
diff --git a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/StackTraceListenerFactory.java b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/StackTraceListenerFactory.java
index 34fa2a6..b3e2c14 100644
--- a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/StackTraceListenerFactory.java
+++ b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/StackTraceListenerFactory.java
@@ -14,6 +14,7 @@
 
 package com.google.testing.junit.runner.junit4;
 
+import com.google.testing.junit.runner.internal.junit4.JUnit4TestStackTraceListener;
 import com.google.testing.junit.runner.util.Factory;
 import com.google.testing.junit.runner.util.Supplier;
 import org.junit.runner.notification.RunListener;
diff --git a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/XmlListenerFactory.java b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/XmlListenerFactory.java
index 1dc6103..c912996 100644
--- a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/XmlListenerFactory.java
+++ b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/XmlListenerFactory.java
@@ -14,6 +14,7 @@
 
 package com.google.testing.junit.runner.junit4;
 
+import com.google.testing.junit.runner.internal.junit4.JUnit4TestXmlListener;
 import com.google.testing.junit.runner.util.Factory;
 import com.google.testing.junit.runner.util.Supplier;
 import org.junit.runner.notification.RunListener;