src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/GenerateJLIClassesPlugin.java
changeset 47753 a2008587c13f
parent 47216 71c04702a3d5
child 48071 a5cadeee8763
equal deleted inserted replaced
47752:e0041b182e31 47753:a2008587c13f
   240         }
   240         }
   241         dmhMethods = newDMHMethods;
   241         dmhMethods = newDMHMethods;
   242         lines.map(line -> line.split(" "))
   242         lines.map(line -> line.split(" "))
   243              .forEach(parts -> {
   243              .forEach(parts -> {
   244                 switch (parts[0]) {
   244                 switch (parts[0]) {
   245                     case "[BMH_RESOLVE]":
   245                     case "[SPECIES_RESOLVE]":
   246                         speciesTypes.add(expandSignature(parts[1]));
   246                         // Allow for new types of species data classes being resolved here
       
   247                         if (parts.length == 3 && parts[1].startsWith("java.lang.invoke.BoundMethodHandle$Species_")) {
       
   248                             String species = parts[1].substring("java.lang.invoke.BoundMethodHandle$Species_".length());
       
   249                             if (!"L".equals(species)) {
       
   250                                 speciesTypes.add(expandSignature(species));
       
   251                             }
       
   252                         }
   247                         break;
   253                         break;
   248                     case "[LF_RESOLVE]":
   254                     case "[LF_RESOLVE]":
   249                         String methodType = parts[3];
   255                         String methodType = parts[3];
   250                         validateMethodType(methodType);
   256                         validateMethodType(methodType);
   251                         if (parts[1].contains("Invokers")) {
   257                         if (parts[1].contains("Invokers")) {
   447             "/java.base/" + BASIC_FORMS_HOLDER + ".class";
   453             "/java.base/" + BASIC_FORMS_HOLDER + ".class";
   448     private static final String INVOKERS_HOLDER_ENTRY =
   454     private static final String INVOKERS_HOLDER_ENTRY =
   449             "/java.base/" + INVOKERS_HOLDER + ".class";
   455             "/java.base/" + INVOKERS_HOLDER + ".class";
   450 
   456 
   451     // Convert LL -> LL, L3 -> LLL
   457     // Convert LL -> LL, L3 -> LLL
   452     private static String expandSignature(String signature) {
   458     public static String expandSignature(String signature) {
   453         StringBuilder sb = new StringBuilder();
   459         StringBuilder sb = new StringBuilder();
   454         char last = 'X';
   460         char last = 'X';
   455         int count = 0;
   461         int count = 0;
   456         for (int i = 0; i < signature.length(); i++) {
   462         for (int i = 0; i < signature.length(); i++) {
   457             char c = signature.charAt(i);
   463             char c = signature.charAt(i);