mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 06:45:07 +02:00
8338532: Speed up the ClassFile API MethodTypeDesc#ofDescriptor
Reviewed-by: redestad, liach
This commit is contained in:
parent
918cf11454
commit
3aeb6733f9
11 changed files with 201 additions and 110 deletions
|
@ -36,6 +36,7 @@ import static java.util.stream.Collectors.joining;
|
|||
import static jdk.internal.constant.ConstantUtils.MAX_ARRAY_TYPE_DESC_DIMENSIONS;
|
||||
import static jdk.internal.constant.ConstantUtils.arrayDepth;
|
||||
import static jdk.internal.constant.ConstantUtils.binaryToInternal;
|
||||
import static jdk.internal.constant.ConstantUtils.forPrimitiveType;
|
||||
import static jdk.internal.constant.ConstantUtils.internalToBinary;
|
||||
import static jdk.internal.constant.ConstantUtils.validateBinaryClassName;
|
||||
import static jdk.internal.constant.ConstantUtils.validateInternalClassName;
|
||||
|
@ -164,7 +165,7 @@ public sealed interface ClassDesc
|
|||
static ClassDesc ofDescriptor(String descriptor) {
|
||||
// implicit null-check
|
||||
return (descriptor.length() == 1)
|
||||
? Wrapper.forPrimitiveType(descriptor.charAt(0)).basicClassDescriptor()
|
||||
? forPrimitiveType(descriptor, 0)
|
||||
// will throw IAE on descriptor.length == 0 or if array dimensions too long
|
||||
: ReferenceClassDescImpl.of(descriptor);
|
||||
}
|
||||
|
|
|
@ -240,31 +240,31 @@ public final class ConstantDescs {
|
|||
CD_Object, CD_Object);
|
||||
|
||||
/** {@link ClassDesc} representing the primitive type {@code int} */
|
||||
public static final ClassDesc CD_int = new PrimitiveClassDescImpl("I");
|
||||
public static final ClassDesc CD_int = PrimitiveClassDescImpl.CD_int;
|
||||
|
||||
/** {@link ClassDesc} representing the primitive type {@code long} */
|
||||
public static final ClassDesc CD_long = new PrimitiveClassDescImpl("J");
|
||||
public static final ClassDesc CD_long = PrimitiveClassDescImpl.CD_long;
|
||||
|
||||
/** {@link ClassDesc} representing the primitive type {@code float} */
|
||||
public static final ClassDesc CD_float = new PrimitiveClassDescImpl("F");
|
||||
public static final ClassDesc CD_float = PrimitiveClassDescImpl.CD_float;
|
||||
|
||||
/** {@link ClassDesc} representing the primitive type {@code double} */
|
||||
public static final ClassDesc CD_double = new PrimitiveClassDescImpl("D");
|
||||
public static final ClassDesc CD_double = PrimitiveClassDescImpl.CD_double;
|
||||
|
||||
/** {@link ClassDesc} representing the primitive type {@code short} */
|
||||
public static final ClassDesc CD_short = new PrimitiveClassDescImpl("S");
|
||||
public static final ClassDesc CD_short = PrimitiveClassDescImpl.CD_short;
|
||||
|
||||
/** {@link ClassDesc} representing the primitive type {@code byte} */
|
||||
public static final ClassDesc CD_byte = new PrimitiveClassDescImpl("B");
|
||||
public static final ClassDesc CD_byte = PrimitiveClassDescImpl.CD_byte;
|
||||
|
||||
/** {@link ClassDesc} representing the primitive type {@code char} */
|
||||
public static final ClassDesc CD_char = new PrimitiveClassDescImpl("C");
|
||||
public static final ClassDesc CD_char = PrimitiveClassDescImpl.CD_char;
|
||||
|
||||
/** {@link ClassDesc} representing the primitive type {@code boolean} */
|
||||
public static final ClassDesc CD_boolean = new PrimitiveClassDescImpl("Z");
|
||||
public static final ClassDesc CD_boolean = PrimitiveClassDescImpl.CD_boolean;
|
||||
|
||||
/** {@link ClassDesc} representing the primitive type {@code void} */
|
||||
public static final ClassDesc CD_void = new PrimitiveClassDescImpl("V");
|
||||
public static final ClassDesc CD_void = PrimitiveClassDescImpl.CD_void;
|
||||
|
||||
/**
|
||||
* {@link MethodHandleDesc} representing {@link MethodHandles#classData(Lookup, String, Class) MethodHandles.classData}
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
package java.lang.invoke;
|
||||
|
||||
import sun.invoke.util.Wrapper;
|
||||
import jdk.internal.constant.ConstantUtils;
|
||||
|
||||
import static java.lang.invoke.MethodHandleNatives.mapLookupExceptionToError;
|
||||
import static java.util.Objects.requireNonNull;
|
||||
|
@ -112,7 +113,7 @@ public final class ConstantBootstraps {
|
|||
throw new IllegalArgumentException(String.format("not primitive: %s", name));
|
||||
}
|
||||
|
||||
return Wrapper.forPrimitiveType(name.charAt(0)).primitiveType();
|
||||
return ConstantUtils.forPrimitiveType(name, 0).resolveConstantDesc(lookup);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue