Move Classpath.java from src/test/... to src/main/... since it will be used by the documentation generation in the future.

--
PiperOrigin-RevId: 148081562
MOS_MIGRATED_REVID=148081562
diff --git a/src/test/java/com/google/devtools/build/lib/testutil/Classpath.java b/src/main/java/com/google/devtools/build/lib/util/Classpath.java
similarity index 83%
rename from src/test/java/com/google/devtools/build/lib/testutil/Classpath.java
rename to src/main/java/com/google/devtools/build/lib/util/Classpath.java
index 059ef6f..5c26e65 100644
--- a/src/test/java/com/google/devtools/build/lib/testutil/Classpath.java
+++ b/src/main/java/com/google/devtools/build/lib/util/Classpath.java
@@ -11,9 +11,8 @@
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
-package com.google.devtools.build.lib.testutil;
+package com.google.devtools.build.lib.util;
 
-import com.google.devtools.build.lib.util.Preconditions;
 import java.io.File;
 import java.io.IOException;
 import java.net.URI;
@@ -35,13 +34,20 @@
  * A helper class to find all classes on the current classpath. This is used to automatically create
  * JUnit 3 and 4 test suites.
  */
-final class Classpath {
+public final class Classpath {
   private static final String CLASS_EXTENSION = ".class";
 
   /**
-   * Finds all classes that live in or below the given package.
+   * Base exception for any classpath related errors.
    */
-  static Set<Class<?>> findClasses(String packageName) {
+  public static final class ClassPathException extends Exception {
+    public ClassPathException(String format, Object... args) {
+      super(String.format(format, args));
+    }
+  }
+
+  /** Finds all classes that live in or below the given package. */
+  public static Set<Class<?>> findClasses(String packageName) throws ClassPathException {
     Set<Class<?>> result = new LinkedHashSet<>();
     String pathPrefix = (packageName + '.').replace('.', '/');
     for (String entryName : getClassPath()) {
@@ -59,11 +65,12 @@
             result.add(clazz);
           }
         } catch (IOException e) {
-          throw new AssertionError("Can't read classpath entry "
-              + entryName + ": " + e.getMessage());
+          throw new ClassPathException(
+              "Can't read classpath entry %s: %s", entryName, e.getMessage());
         } catch (ClassNotFoundException e) {
-          throw new AssertionError("Class not found even though it is on the classpath "
-              + entryName + ": " + e.getMessage());
+          throw new ClassPathException(
+              "Class not found even though it is on the classpath %s: %s",
+              entryName, e.getMessage());
         }
       }
     }
@@ -127,23 +134,21 @@
   }
 
   private static void getClassPathsFromClasspathJar(File classpathJar, Set<String> classPaths)
-      throws IOException {
+      throws IOException, ClassPathException {
     Manifest manifest = new JarFile(classpathJar).getManifest();
     Attributes attributes = manifest.getMainAttributes();
     for (String classPath : attributes.getValue("Class-Path").split(" ")) {
       try {
         classPaths.add(Paths.get(new URI(classPath)).toAbsolutePath().toString());
       } catch (URISyntaxException e) {
-        throw new AssertionError(
-            "Error parsing classpath uri " + classPath + ": " + e.getMessage());
+        throw new ClassPathException(
+            "Error parsing classpath uri %s: %s", classPath, e.getMessage());
       }
     }
   }
 
-  /**
-   * Gets the classpath from current classloader.
-   */
-  private static Set<String> getClassPath() {
+  /** Gets the classpath from current classloader. */
+  private static Set<String> getClassPath() throws ClassPathException {
     ClassLoader classloader = Classpath.class.getClassLoader();
     if (!(classloader instanceof URLClassLoader)) {
       throw new IllegalStateException("Unable to find classes to test, since Test Suite class is "
@@ -163,8 +168,8 @@
           try {
             getClassPathsFromClasspathJar(classPathEntry, completeClassPaths);
           } catch (IOException e) {
-            throw new AssertionError(
-                "Can't read classpath entry " + entryName + ": " + e.getMessage());
+            throw new ClassPathException(
+                "Can't read classpath entry %s: %s", entryName, e.getMessage());
           }
         }
       }
diff --git a/src/test/java/com/google/devtools/build/lib/testutil/TestSuiteBuilder.java b/src/test/java/com/google/devtools/build/lib/testutil/TestSuiteBuilder.java
index 59a5d85..81a20dd 100644
--- a/src/test/java/com/google/devtools/build/lib/testutil/TestSuiteBuilder.java
+++ b/src/test/java/com/google/devtools/build/lib/testutil/TestSuiteBuilder.java
@@ -17,15 +17,14 @@
 import com.google.common.base.Predicates;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Sets;
-
-import junit.framework.TestCase;
-
-import org.junit.runner.RunWith;
-
+import com.google.devtools.build.lib.util.Classpath;
+import com.google.devtools.build.lib.util.Classpath.ClassPathException;
 import java.lang.reflect.Modifier;
 import java.util.Comparator;
 import java.util.LinkedHashSet;
 import java.util.Set;
+import junit.framework.TestCase;
+import org.junit.runner.RunWith;
 
 /**
  * A collector for test classes, for both JUnit 3 and 4. To be used in combination with {@link
@@ -73,10 +72,14 @@
 
   private Set<Class<?>> getClassesRecursive(String pkgName) {
     Set<Class<?>> result = new LinkedHashSet<>();
-    for (Class<?> clazz : Classpath.findClasses(pkgName)) {
-      if (isTestClass(clazz)) {
-        result.add(clazz);
+    try {
+      for (Class<?> clazz : Classpath.findClasses(pkgName)) {
+        if (isTestClass(clazz)) {
+          result.add(clazz);
+        }
       }
+    } catch (ClassPathException e) {
+      throw new AssertionError("Cannot retrive classes: " + e.getMessage());
     }
     return result;
   }