< prev index next >
src/java.base/share/classes/jdk/internal/org/objectweb/asm/Type.java
Print this page
rev 55127 : 8223351: [lworld] Primary mirror and nullable mirror for inline type
Reviewed-by: tbd
*** 57,66 ****
--- 57,67 ----
* THE POSSIBILITY OF SUCH DAMAGE.
*/
package jdk.internal.org.objectweb.asm;
import java.lang.reflect.Constructor;
+ import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* A Java field or method type. This class can be used to make it easier to manipulate type and
* method descriptors.
*** 665,691 ****
throw new AssertionError();
}
stringBuilder.append(descriptor);
} else {
String name = currentClass.getName();
! // Workarounds nasgen build that depends on ASM but compiled with
! // the bootstrap JDK. Can't use Class::isValue and Class::asValueType
! int index = currentClass.getTypeName().lastIndexOf("/val");
! if (index > 0) {
! stringBuilder.append('Q');
! } else {
stringBuilder.append('L');
}
int nameLength = name.length();
for (int i = 0; i < nameLength; ++i) {
char car = name.charAt(i);
stringBuilder.append(car == '.' ? '/' : car);
}
stringBuilder.append(';');
}
}
// -----------------------------------------------------------------------------------------------
// Methods to get the sort, dimension, size, and opcodes corresponding to a Type or descriptor.
// -----------------------------------------------------------------------------------------------
/**
--- 666,718 ----
throw new AssertionError();
}
stringBuilder.append(descriptor);
} else {
String name = currentClass.getName();
! if (Helper.isNullableType(currentClass)) {
stringBuilder.append('L');
+ } else {
+ stringBuilder.append('Q');
+
}
int nameLength = name.length();
for (int i = 0; i < nameLength; ++i) {
char car = name.charAt(i);
stringBuilder.append(car == '.' ? '/' : car);
}
stringBuilder.append(';');
}
}
+ // Workarounds nasgen build that depends on ASM but compiled with
+ // the bootstrap JDK. Can't reference Class::isNullableType
+ static class Helper {
+ static final Method isNullableTypeMethod = isNullableTypeMethod();
+ static Method isNullableTypeMethod() {
+ try {
+ return Class.class.getMethod("isNullableType");
+ } catch (NoSuchMethodException e) {
+ return null;
+ }
+ }
+
+ static boolean isNullableType(Class<?> clazz) {
+ int mods = clazz.getModifiers();
+ if ((mods & 0x00000100) != 0) { // inline class
+ assert isNullableTypeMethod != null;
+ try {
+ return (boolean)isNullableTypeMethod.invoke(clazz);
+ } catch (InvocationTargetException e) {
+ throw new InternalError(e.getCause());
+ } catch (IllegalAccessException e) {
+ throw new InternalError(e);
+ }
+ }
+ return true;
+ }
+ }
+
// -----------------------------------------------------------------------------------------------
// Methods to get the sort, dimension, size, and opcodes corresponding to a Type or descriptor.
// -----------------------------------------------------------------------------------------------
/**
< prev index next >