src/share/classes/com/sun/tools/jdeps/PlatformClassPath.java

Print this page

        

@@ -22,63 +22,62 @@
  * or visit www.oracle.com if you need additional information or have any
  * questions.
  */
 package com.sun.tools.jdeps;
 
-import java.io.File;
 import java.io.IOException;
 import java.nio.file.FileVisitResult;
 import java.nio.file.Files;
 import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.nio.file.SimpleFileVisitor;
 import java.nio.file.attribute.BasicFileAttributes;
 import java.util.*;
 
 /**
  * ClassPath for Java SE and JDK
  */
 class PlatformClassPath {
     private final static List<Archive> javaHomeArchives = init();
+
     static List<Archive> getArchives() {
         return javaHomeArchives;
     }
 
     static boolean contains(Archive archive) {
-        return javaHomeArchives.contains(archive);
+        // jfxrt.jar is in jre/lib/ext directory but it does not belong
+        // to any profile
+        return javaHomeArchives.contains(archive) && !archive.getFileName().equals("jfxrt.jar");
     }
 
     private static List<Archive> init() {
-        List<Archive> result = new ArrayList<Archive>();
-        String javaHome = System.getProperty("java.home");
-        File jre = new File(javaHome, "jre");
-        File lib = new File(javaHome, "lib");
-
+        List<Archive> result = new ArrayList<>();
+        Path home = Paths.get(System.getProperty("java.home"));
         try {
-            if (jre.exists() && jre.isDirectory()) {
-                result.addAll(addJarFiles(new File(jre, "lib")));
-                result.addAll(addJarFiles(lib));
-            } else if (lib.exists() && lib.isDirectory()) {
+            if (home.endsWith("jre")) {
+                // jar files in <javahome>/jre/lib
+                result.addAll(addJarFiles(home.resolve("lib")));
+            } else if (Files.exists(home.resolve("lib"))) {
                 // either a JRE or a jdk build image
-                File classes = new File(javaHome, "classes");
-                if (classes.exists() && classes.isDirectory()) {
+                Path classes = home.resolve("classes");
+                if (Files.isDirectory(classes)) {
                     // jdk build outputdir
                     result.add(new Archive(classes, ClassFileReader.newInstance(classes)));
                 }
                 // add other JAR files
-                result.addAll(addJarFiles(lib));
+                result.addAll(addJarFiles(home.resolve("lib")));
             } else {
-                throw new RuntimeException("\"" + javaHome + "\" not a JDK home");
+                throw new RuntimeException("\"" + home + "\" not a JDK home");
             }
+            return result;
         } catch (IOException e) {
-            throw new RuntimeException(e);
+            throw new Error(e);
         }
-        return result;
     }
 
-    private static List<Archive> addJarFiles(File f) throws IOException {
-        final List<Archive> result = new ArrayList<Archive>();
-        final Path root = f.toPath();
+    private static List<Archive> addJarFiles(final Path root) throws IOException {
+        final List<Archive> result = new ArrayList<>();
         final Path ext = root.resolve("ext");
         Files.walkFileTree(root, new SimpleFileVisitor<Path>() {
             @Override
             public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs)
                 throws IOException

@@ -89,17 +88,16 @@
                     // skip other cobundled JAR files
                     return FileVisitResult.SKIP_SUBTREE;
                 }
             }
             @Override
-            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
+            public FileVisitResult visitFile(Path p, BasicFileAttributes attrs)
                 throws IOException
             {
-                File f = file.toFile();
-                String fn = f.getName();
+                String fn = p.getFileName().toString();
                 if (fn.endsWith(".jar") && !fn.equals("alt-rt.jar")) {
-                    result.add(new Archive(f, ClassFileReader.newInstance(f)));
+                    result.add(new Archive(p, ClassFileReader.newInstance(p)));
                 }
                 return FileVisitResult.CONTINUE;
             }
         });
         return result;