Skip to content

Commit eca848e

Browse files
committed
WIP TEST: Switch to runtime initialization instead of rerun
They both have the same result starting with 23.1. Runtime initialization is public API while rerun is not, and will soon be deprecated and at some point removed in future releases. See oracle/graal#5013 (comment) and oracle/graal#8323
1 parent b063c22 commit eca848e

File tree

1 file changed

+26
-10
lines changed

1 file changed

+26
-10
lines changed

core/deployment/src/main/java/io/quarkus/deployment/steps/NativeImageFeatureStep.java

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -176,29 +176,45 @@ public void write(String s, byte[] bytes) {
176176
// hack in reinitialization of process info classes
177177
if (!runtimeReinitializedClassBuildItems.isEmpty()) {
178178
MethodCreator runtimeReinitializedClasses = file
179-
.getMethodCreator("runtimeReinitializedClasses", void.class)
179+
.getMethodCreator("runtimeReinitializedClasses", Class[].class)
180180
.setModifiers(Modifier.PRIVATE | Modifier.STATIC);
181181

182182
ResultHandle thisClass = runtimeReinitializedClasses.loadClassFromTCCL(GRAAL_FEATURE);
183183
ResultHandle cl = runtimeReinitializedClasses.invokeVirtualMethod(
184184
ofMethod(Class.class, "getClassLoader", ClassLoader.class),
185185
thisClass);
186-
ResultHandle quarkus = runtimeReinitializedClasses.load("Quarkus");
187-
ResultHandle imageSingleton = runtimeReinitializedClasses.invokeStaticMethod(IMAGE_SINGLETONS_LOOKUP,
188-
runtimeReinitializedClasses.loadClassFromTCCL(RUNTIME_CLASS_INITIALIZATION_SUPPORT));
189-
for (RuntimeReinitializedClassBuildItem runtimeReinitializedClass : runtimeReinitializedClassBuildItems) {
186+
// ResultHandle quarkus = runtimeReinitializedClasses.load("Quarkus");
187+
// ResultHandle imageSingleton = runtimeReinitializedClasses.invokeStaticMethod(IMAGE_SINGLETONS_LOOKUP,
188+
// runtimeReinitializedClasses.loadClassFromTCCL(RUNTIME_CLASS_INITIALIZATION_SUPPORT));
189+
// for (RuntimeReinitializedClassBuildItem runtimeReinitializedClass : runtimeReinitializedClassBuildItems) {
190+
// TryBlock tc = runtimeReinitializedClasses.tryBlock();
191+
// ResultHandle clazz = tc.invokeStaticMethod(
192+
// ofMethod(Class.class, "forName", Class.class, String.class, boolean.class, ClassLoader.class),
193+
// tc.load(runtimeReinitializedClass.getClassName()), tc.load(false), cl);
194+
// tc.invokeInterfaceMethod(RERUN_INITIALIZATION, imageSingleton, clazz, quarkus);
195+
//
196+
// CatchBlockCreator cc = tc.addCatch(Throwable.class);
197+
// cc.invokeVirtualMethod(ofMethod(Throwable.class, "printStackTrace", void.class), cc.getCaughtException());
198+
// }
199+
// runtimeReinitializedClasses.returnVoid();
200+
201+
// overallCatch.invokeStaticMethod(runtimeReinitializedClasses.getMethodDescriptor());
202+
203+
ResultHandle classesArray = runtimeReinitializedClasses.newArray(Class.class,
204+
runtimeReinitializedClasses.load(runtimeInitializedClassBuildItems.size()));
205+
for (int i = 0; i < runtimeReinitializedClassBuildItems.size(); i++) {
190206
TryBlock tc = runtimeReinitializedClasses.tryBlock();
191207
ResultHandle clazz = tc.invokeStaticMethod(
192208
ofMethod(Class.class, "forName", Class.class, String.class, boolean.class, ClassLoader.class),
193-
tc.load(runtimeReinitializedClass.getClassName()), tc.load(false), cl);
194-
tc.invokeInterfaceMethod(RERUN_INITIALIZATION, imageSingleton, clazz, quarkus);
195-
209+
tc.load(runtimeReinitializedClassBuildItems.get(i).getClassName()), tc.load(false), cl);
210+
tc.writeArrayValue(classesArray, i, clazz);
196211
CatchBlockCreator cc = tc.addCatch(Throwable.class);
197212
cc.invokeVirtualMethod(ofMethod(Throwable.class, "printStackTrace", void.class), cc.getCaughtException());
198213
}
199-
runtimeReinitializedClasses.returnVoid();
214+
runtimeReinitializedClasses.returnValue(classesArray);
200215

201-
overallCatch.invokeStaticMethod(runtimeReinitializedClasses.getMethodDescriptor());
216+
ResultHandle classes = overallCatch.invokeStaticMethod(runtimeReinitializedClasses.getMethodDescriptor());
217+
overallCatch.invokeStaticMethod(INITIALIZE_CLASSES_AT_RUN_TIME, classes);
202218
}
203219

204220
// Ensure registration of fields being accessed through unsafe is done last to ensure that the class

0 commit comments

Comments
 (0)