langtools/src/share/classes/com/sun/tools/jdeps/PlatformClassPath.java
changeset 16550 f20e2521f3df
parent 15030 2d8dec41f029
child 16560 c6c7f0c26568
equal deleted inserted replaced
16549:1bdeedb5446c 16550:f20e2521f3df
    35 
    35 
    36 /**
    36 /**
    37  * ClassPath for Java SE and JDK
    37  * ClassPath for Java SE and JDK
    38  */
    38  */
    39 class PlatformClassPath {
    39 class PlatformClassPath {
    40     /*
       
    41      * Profiles for Java SE
       
    42      *
       
    43      * This is a temporary workaround until a common API is defined for langtools
       
    44      * to determine which profile a given classname belongs to.  The list of
       
    45      * packages and profile names are hardcoded in jdk.properties and
       
    46      * split packages are not supported.
       
    47      */
       
    48     static class Profile {
       
    49         final String name;
       
    50         final Set<String> packages;
       
    51 
       
    52         Profile(String name) {
       
    53             this.name = name;
       
    54             this.packages = new HashSet<String>();
       
    55         }
       
    56     }
       
    57 
       
    58     private final static String JAVAFX = "javafx";
       
    59     private final static Map<String,Profile> map = getProfilePackages();
       
    60     static String getProfileName(String packageName) {
       
    61         Profile profile = map.get(packageName);
       
    62         if (packageName.startsWith(JAVAFX + ".")) {
       
    63             profile = map.get(JAVAFX);
       
    64         }
       
    65         return profile != null ? profile.name : "";
       
    66     }
       
    67 
       
    68     private final static List<Archive> javaHomeArchives = init();
    40     private final static List<Archive> javaHomeArchives = init();
    69     static List<Archive> getArchives() {
    41     static List<Archive> getArchives() {
    70         return javaHomeArchives;
    42         return javaHomeArchives;
    71     }
    43     }
    72 
    44 
    98                 throw new RuntimeException("\"" + javaHome + "\" not a JDK home");
    70                 throw new RuntimeException("\"" + javaHome + "\" not a JDK home");
    99             }
    71             }
   100         } catch (IOException e) {
    72         } catch (IOException e) {
   101             throw new RuntimeException(e);
    73             throw new RuntimeException(e);
   102         }
    74         }
   103 
       
   104         // add a JavaFX profile if there is jfxrt.jar
       
   105         for (Archive archive : result) {
       
   106             if (archive.getFileName().equals("jfxrt.jar")) {
       
   107                 map.put(JAVAFX, new Profile("jfxrt.jar"));
       
   108             }
       
   109         }
       
   110         return result;
    75         return result;
   111     }
    76     }
   112 
    77 
   113     private static List<Archive> addJarFiles(File f) throws IOException {
    78     private static List<Archive> addJarFiles(File f) throws IOException {
   114         final List<Archive> result = new ArrayList<Archive>();
    79         final List<Archive> result = new ArrayList<Archive>();
   138                 return FileVisitResult.CONTINUE;
   103                 return FileVisitResult.CONTINUE;
   139             }
   104             }
   140         });
   105         });
   141         return result;
   106         return result;
   142     }
   107     }
   143 
       
   144     private static Map<String,Profile> getProfilePackages() {
       
   145         Map<String,Profile> map = new HashMap<String,Profile>();
       
   146 
       
   147         // read the properties as a ResourceBundle as the build compiles
       
   148         // the properties file into Java class.  Another alternative is
       
   149         // to load it as Properties and fix the build to exclude this file.
       
   150         ResourceBundle profileBundle =
       
   151             ResourceBundle.getBundle("com.sun.tools.jdeps.resources.jdk");
       
   152 
       
   153         int i=1;
       
   154         String key;
       
   155         while (profileBundle.containsKey((key = "profile." + i + ".name"))) {
       
   156             Profile profile = new Profile(profileBundle.getString(key));
       
   157             String n = profileBundle.getString("profile." + i + ".packages");
       
   158             String[] pkgs = n.split("\\s+");
       
   159             for (String p : pkgs) {
       
   160                 if (p.isEmpty()) continue;
       
   161                 assert(map.containsKey(p) == false);
       
   162                 profile.packages.add(p);
       
   163                 map.put(p, profile);
       
   164             }
       
   165             i++;
       
   166         }
       
   167         return map;
       
   168     }
       
   169 }
   108 }