From a36a5e1a6fa8d99bff86531a5c17176f85c0e118 Mon Sep 17 00:00:00 2001 From: Foivos Zakkak Date: Tue, 27 Sep 2022 12:20:54 +0300 Subject: [PATCH] Refactor: Use `io.quarkus.gizmo.BytecodeCreator#loadClassFromTCCL` Use `loadClassFromTCCL` instead of manually getting the TCCL and loading classes in `NativeImageFeatureStep` --- .../steps/NativeImageFeatureStep.java | 30 ++----------------- 1 file changed, 3 insertions(+), 27 deletions(-) diff --git a/core/deployment/src/main/java/io/quarkus/deployment/steps/NativeImageFeatureStep.java b/core/deployment/src/main/java/io/quarkus/deployment/steps/NativeImageFeatureStep.java index 01786ec5bca512..98cbfc0c6ee526 100644 --- a/core/deployment/src/main/java/io/quarkus/deployment/steps/NativeImageFeatureStep.java +++ b/core/deployment/src/main/java/io/quarkus/deployment/steps/NativeImageFeatureStep.java @@ -89,8 +89,6 @@ public class NativeImageFeatureStep { private static final MethodDescriptor LOOKUP_METHOD = ofMethod( ReflectionUtil.class, "lookupMethod", Method.class, Class.class, String.class, Class[].class); - private static final MethodDescriptor FOR_NAME = ofMethod( - Class.class, "forName", Class.class, String.class, boolean.class, ClassLoader.class); private static final MethodDescriptor INVOKE = ofMethod( Method.class, "invoke", Object.class, Object.class, Object[].class); static final String RUNTIME_REFLECTION = RuntimeReflection.class.getName(); @@ -468,14 +466,7 @@ public void write(String s, byte[] bytes) { TryBlock tc = mv.tryBlock(); - ResultHandle currentThread = tc - .invokeStaticMethod(ofMethod(Thread.class, "currentThread", Thread.class)); - ResultHandle tccl = tc.invokeVirtualMethod( - ofMethod(Thread.class, "getContextClassLoader", ClassLoader.class), - currentThread); - ResultHandle clazz = tc.invokeStaticMethod( - ofMethod(Class.class, "forName", Class.class, String.class, boolean.class, ClassLoader.class), - tc.load(entry.getKey()), tc.load(false), tccl); + ResultHandle clazz = tc.loadClassFromTCCL(entry.getKey()); //we call these methods first, so if they are going to throw an exception it happens before anything has been registered ResultHandle constructors = tc .invokeVirtualMethod(ofMethod(Class.class, "getDeclaredConstructors", Constructor[].class), clazz); @@ -575,14 +566,7 @@ public void write(String s, byte[] bytes) { TryBlock tc = mv.tryBlock(); - ResultHandle currentThread = tc - .invokeStaticMethod(ofMethod(Thread.class, "currentThread", Thread.class)); - ResultHandle tccl = tc.invokeVirtualMethod( - ofMethod(Thread.class, "getContextClassLoader", ClassLoader.class), - currentThread); - ResultHandle clazz = tc.invokeStaticMethod( - ofMethod(Class.class, "forName", Class.class, String.class, boolean.class, ClassLoader.class), - tc.load(className), tc.load(false), tccl); + ResultHandle clazz = tc.loadClassFromTCCL(className); //we call these methods first, so if they are going to throw an exception it happens before anything has been registered ResultHandle constructors = tc .invokeVirtualMethod(ofMethod(Class.class, "getDeclaredConstructors", Constructor[].class), clazz); @@ -666,15 +650,7 @@ private MethodDescriptor createRegisterSerializationForClassMethod(ClassCreator TryBlock tc = addSerializationForClass.tryBlock(); - ResultHandle currentThread = tc - .invokeStaticMethod(ofMethod(Thread.class, "currentThread", Thread.class)); - ResultHandle tccl = tc.invokeVirtualMethod( - ofMethod(Thread.class, "getContextClassLoader", ClassLoader.class), - currentThread); - - ResultHandle runtimeSerializationClass = tc.invokeStaticMethod(FOR_NAME, - tc.load("org.graalvm.nativeimage.hosted.RuntimeSerialization"), - tc.load(false), tccl); + ResultHandle runtimeSerializationClass = tc.loadClassFromTCCL("org.graalvm.nativeimage.hosted.RuntimeSerialization"); ResultHandle registerArgTypes = tc.newArray(Class.class, tc.load(1)); tc.writeArrayValue(registerArgTypes, 0, tc.loadClassFromTCCL(Class[].class)); ResultHandle registerLookupMethod = tc.invokeStaticMethod(LOOKUP_METHOD, runtimeSerializationClass,