< prev index next >
src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/GenerateJLIClassesPlugin.java
Print this page
rev 47747 : 8184777: Factor out species generation logic from BoundMethodHandle
Reviewed-by: vlivanov
Contributed-by: john.r.rose@oracle.com, claes.redestad@oracle.com
@@ -240,12 +240,18 @@
}
dmhMethods = newDMHMethods;
lines.map(line -> line.split(" "))
.forEach(parts -> {
switch (parts[0]) {
- case "[BMH_RESOLVE]":
- speciesTypes.add(expandSignature(parts[1]));
+ case "[SPECIES_RESOLVE]":
+ // Allow for new types of species data classes being resolved here
+ if (parts.length == 3 && parts[1].startsWith("java.lang.invoke.BoundMethodHandle$Species_")) {
+ String species = parts[1].substring("java.lang.invoke.BoundMethodHandle$Species_".length());
+ if (!"L".equals(species)) {
+ speciesTypes.add(expandSignature(species));
+ }
+ }
break;
case "[LF_RESOLVE]":
String methodType = parts[3];
validateMethodType(methodType);
if (parts[1].contains("Invokers")) {
@@ -447,11 +453,11 @@
"/java.base/" + BASIC_FORMS_HOLDER + ".class";
private static final String INVOKERS_HOLDER_ENTRY =
"/java.base/" + INVOKERS_HOLDER + ".class";
// Convert LL -> LL, L3 -> LLL
- private static String expandSignature(String signature) {
+ public static String expandSignature(String signature) {
StringBuilder sb = new StringBuilder();
char last = 'X';
int count = 0;
for (int i = 0; i < signature.length(); i++) {
char c = signature.charAt(i);
< prev index next >