src/jdk.jdeps/share/classes/com/sun/tools/jdeprscan/Main.java
changeset 47702 cf8310446245
parent 47216 71c04702a3d5
child 48343 d4329843abf4
--- a/src/jdk.jdeps/share/classes/com/sun/tools/jdeprscan/Main.java	Mon Oct 30 21:23:10 2017 +0100
+++ b/src/jdk.jdeps/share/classes/com/sun/tools/jdeprscan/Main.java	Mon Nov 06 13:10:43 2017 +0100
@@ -38,6 +38,7 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.EnumSet;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -45,18 +46,22 @@
 import java.util.Set;
 import java.util.Queue;
 import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
 import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
 
 import javax.tools.Diagnostic;
 import javax.tools.DiagnosticListener;
 import javax.tools.JavaCompiler;
+import javax.tools.JavaFileManager;
 import javax.tools.JavaFileObject;
+import javax.tools.JavaFileObject.Kind;
 import javax.tools.StandardJavaFileManager;
 import javax.tools.StandardLocation;
 import javax.tools.ToolProvider;
 
 import com.sun.tools.javac.file.JavacFileManager;
+import com.sun.tools.javac.platform.JDKPlatformProvider;
 
 import com.sun.tools.jdeprscan.scan.Scan;
 
@@ -383,32 +388,24 @@
                      .map(TypeElement::toString)
                      .collect(toList()));
         } else {
-            // TODO: kind of a hack...
-            // Create a throwaway compilation task with options "--release N"
-            // which has the side effect of setting the file manager's
-            // PLATFORM_CLASS_PATH to the right value.
-            JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
-            StandardJavaFileManager fm =
-                compiler.getStandardFileManager(this, null, StandardCharsets.UTF_8);
-            JavaCompiler.CompilationTask task =
-                compiler.getTask(null, fm, this, List.of("--release", release), null, null);
-            List<Path> paths = new ArrayList<>();
-            for (Path p : fm.getLocationAsPaths(StandardLocation.PLATFORM_CLASS_PATH)) {
-                try (Stream<Path> str = Files.walk(p)) {
-                    str.forEachOrdered(paths::add);
-                }
+            JDKPlatformProvider pp = new JDKPlatformProvider();
+            if (StreamSupport.stream(pp.getSupportedPlatformNames().spliterator(),
+                                 false)
+                             .noneMatch(n -> n.equals(release))) {
+                return false;
+            }
+            JavaFileManager fm = pp.getPlatform(release, "").getFileManager();
+            List<String> classNames = new ArrayList<>();
+            for (JavaFileObject fo : fm.list(StandardLocation.PLATFORM_CLASS_PATH,
+                                             "",
+                                             EnumSet.of(Kind.CLASS),
+                                             true)) {
+                classNames.add(fm.inferBinaryName(StandardLocation.PLATFORM_CLASS_PATH, fo));
             }
 
             options.add("-Xlint:-options");
 
-            return doClassNames(
-                paths.stream()
-                     .filter(path -> path.toString().endsWith(".sig"))
-                     .map(path -> path.subpath(1, path.getNameCount()))
-                     .map(Path::toString)
-                     .map(s -> s.replaceAll("\\.sig$", ""))
-                     .map(s -> s.replace('/', '.'))
-                     .collect(toList()));
+            return doClassNames(classNames);
         }
     }