mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 15:24:43 +02:00
8338544: Dedicated Array class descriptor implementation
Reviewed-by: redestad, mchung, jvernee
This commit is contained in:
parent
158b93d19a
commit
25c2f48d45
20 changed files with 619 additions and 398 deletions
|
@ -25,6 +25,7 @@
|
|||
|
||||
package java.lang.invoke;
|
||||
|
||||
import jdk.internal.constant.ClassOrInterfaceDescImpl;
|
||||
import jdk.internal.misc.CDS;
|
||||
import jdk.internal.util.ClassFileDumper;
|
||||
import sun.invoke.util.VerifyAccess;
|
||||
|
@ -53,10 +54,8 @@ import java.lang.classfile.constantpool.ConstantPoolBuilder;
|
|||
import static java.lang.constant.ConstantDescs.*;
|
||||
import static java.lang.invoke.MethodHandleNatives.Constants.NESTMATE_CLASS;
|
||||
import static java.lang.invoke.MethodHandleNatives.Constants.STRONG_LOADER_LINK;
|
||||
import static java.lang.invoke.MethodType.methodType;
|
||||
import jdk.internal.constant.ConstantUtils;
|
||||
import jdk.internal.constant.MethodTypeDescImpl;
|
||||
import jdk.internal.constant.ReferenceClassDescImpl;
|
||||
import jdk.internal.vm.annotation.Stable;
|
||||
import sun.invoke.util.Wrapper;
|
||||
|
||||
|
@ -157,7 +156,7 @@ import sun.invoke.util.Wrapper;
|
|||
implMethodDesc = methodDesc(implInfo.getMethodType());
|
||||
constructorType = factoryType.changeReturnType(Void.TYPE);
|
||||
lambdaClassName = lambdaClassName(targetClass);
|
||||
lambdaClassEntry = pool.classEntry(ReferenceClassDescImpl.ofValidated(ConstantUtils.concat("L", lambdaClassName, ";")));
|
||||
lambdaClassEntry = pool.classEntry(ConstantUtils.internalNameToDesc(lambdaClassName));
|
||||
// If the target class invokes a protected method inherited from a
|
||||
// superclass in a different package, or does 'invokespecial', the
|
||||
// lambda class has no access to the resolved method, or does
|
||||
|
@ -407,9 +406,9 @@ import sun.invoke.util.Wrapper;
|
|||
|
||||
private static class SerializationSupport {
|
||||
// Serialization support
|
||||
private static final ClassDesc CD_SerializedLambda = ReferenceClassDescImpl.ofValidated("Ljava/lang/invoke/SerializedLambda;");
|
||||
private static final ClassDesc CD_ObjectOutputStream = ReferenceClassDescImpl.ofValidated("Ljava/io/ObjectOutputStream;");
|
||||
private static final ClassDesc CD_ObjectInputStream = ReferenceClassDescImpl.ofValidated("Ljava/io/ObjectInputStream;");
|
||||
private static final ClassDesc CD_SerializedLambda = ClassOrInterfaceDescImpl.ofValidated("Ljava/lang/invoke/SerializedLambda;");
|
||||
private static final ClassDesc CD_ObjectOutputStream = ClassOrInterfaceDescImpl.ofValidated("Ljava/io/ObjectOutputStream;");
|
||||
private static final ClassDesc CD_ObjectInputStream = ClassOrInterfaceDescImpl.ofValidated("Ljava/io/ObjectInputStream;");
|
||||
private static final MethodTypeDesc MTD_Object = MethodTypeDescImpl.ofValidated(CD_Object);
|
||||
private static final MethodTypeDesc MTD_void_ObjectOutputStream = MethodTypeDescImpl.ofValidated(CD_void, CD_ObjectOutputStream);
|
||||
private static final MethodTypeDesc MTD_void_ObjectInputStream = MethodTypeDescImpl.ofValidated(CD_void, CD_ObjectInputStream);
|
||||
|
@ -418,10 +417,10 @@ import sun.invoke.util.Wrapper;
|
|||
private static final String NAME_METHOD_READ_OBJECT = "readObject";
|
||||
private static final String NAME_METHOD_WRITE_OBJECT = "writeObject";
|
||||
|
||||
static final ClassDesc CD_NotSerializableException = ReferenceClassDescImpl.ofValidated("Ljava/io/NotSerializableException;");
|
||||
static final ClassDesc CD_NotSerializableException = ClassOrInterfaceDescImpl.ofValidated("Ljava/io/NotSerializableException;");
|
||||
static final MethodTypeDesc MTD_CTOR_NOT_SERIALIZABLE_EXCEPTION = MethodTypeDescImpl.ofValidated(CD_void, CD_String);
|
||||
static final MethodTypeDesc MTD_CTOR_SERIALIZED_LAMBDA = MethodTypeDescImpl.ofValidated(CD_void,
|
||||
CD_Class, CD_String, CD_String, CD_String, CD_int, CD_String, CD_String, CD_String, CD_String, ReferenceClassDescImpl.ofValidated("[Ljava/lang/Object;"));
|
||||
CD_Class, CD_String, CD_String, CD_String, CD_int, CD_String, CD_String, CD_String, CD_String, ConstantUtils.CD_Object_array);
|
||||
|
||||
}
|
||||
|
||||
|
@ -557,12 +556,12 @@ import sun.invoke.util.Wrapper;
|
|||
}
|
||||
|
||||
static ClassDesc implClassDesc(Class<?> cls) {
|
||||
return cls.isHidden() ? null : ReferenceClassDescImpl.ofValidated(cls.descriptorString());
|
||||
return cls.isHidden() ? null : ConstantUtils.referenceClassDesc(cls.descriptorString());
|
||||
}
|
||||
|
||||
static ClassDesc classDesc(Class<?> cls) {
|
||||
return cls.isPrimitive() ? Wrapper.forPrimitiveType(cls).basicClassDescriptor()
|
||||
: ReferenceClassDescImpl.ofValidated(cls.descriptorString());
|
||||
: ConstantUtils.referenceClassDesc(cls.descriptorString());
|
||||
}
|
||||
|
||||
static MethodTypeDesc methodDesc(MethodType mt) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue