8315810: Reimplement sun.reflect.ReflectionFactory::newConstructorForSerialization with method handles

Co-authored-by: Chen Liang <liach@openjdk.org>
Reviewed-by: rriggs
This commit is contained in:
Mandy Chung 2023-09-14 16:10:55 +00:00
parent eb1f67b160
commit 5cea53d372
10 changed files with 141 additions and 41 deletions

View file

@ -128,12 +128,11 @@ sealed class DirectMethodHandle extends MethodHandle {
}
static DirectMethodHandle make(MemberName member) {
if (member.isConstructor())
return makeAllocator(member);
return makeAllocator(member.getDeclaringClass(), member);
return make(member.getDeclaringClass(), member);
}
private static DirectMethodHandle makeAllocator(MemberName ctor) {
static DirectMethodHandle makeAllocator(Class<?> instanceClass, MemberName ctor) {
assert(ctor.isConstructor() && ctor.getName().equals("<init>"));
Class<?> instanceClass = ctor.getDeclaringClass();
ctor = ctor.asConstructor();
assert(ctor.isConstructor() && ctor.getReferenceKind() == REF_newInvokeSpecial) : ctor;
MethodType mtype = ctor.getMethodType().changeReturnType(instanceClass);