< 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 >