@@ -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