61
61
import java .util .HashSet ;
62
62
import java .util .LinkedHashSet ;
63
63
import java .util .List ;
64
- import java .util .NoSuchElementException ;
65
64
import java .util .Objects ;
66
65
import java .util .Optional ;
67
66
import java .util .Set ;
@@ -138,6 +137,10 @@ public final class NativeImageClassLoaderSupport {
138
137
139
138
private final Set <Class <?>> classesToIncludeUnconditionally = Collections .newSetFromMap (new ConcurrentHashMap <>());
140
139
140
+ private final Method implAddReadsAllUnnamed = ReflectionUtil .lookupMethod (Module .class , "implAddReadsAllUnnamed" );
141
+ private final Method implAddEnableNativeAccess = ReflectionUtil .lookupMethod (Module .class , "implAddEnableNativeAccess" );
142
+ private final Method implAddEnableNativeAccessToAllUnnamed = ReflectionUtil .lookupMethod (Module .class , "implAddEnableNativeAccessToAllUnnamed" );
143
+
141
144
@ SuppressWarnings ("this-escape" )
142
145
protected NativeImageClassLoaderSupport (ClassLoader defaultSystemClassLoader , String [] classpath , String [] modulePath ) {
143
146
@@ -402,39 +405,6 @@ void serviceProvidersForEach(BiConsumer<String, Collection<String>> action) {
402
405
serviceProviders .forEach ((key , val ) -> action .accept (key , Collections .unmodifiableCollection (val )));
403
406
}
404
407
405
- private static void implAddReadsAllUnnamed (Module module ) {
406
- try {
407
- Method implAddReadsAllUnnamed = Module .class .getDeclaredMethod ("implAddReadsAllUnnamed" );
408
- ModuleSupport .accessModuleByClass (ModuleSupport .Access .OPEN , NativeImageClassLoaderSupport .class , Module .class );
409
- implAddReadsAllUnnamed .setAccessible (true );
410
- implAddReadsAllUnnamed .invoke (module );
411
- } catch (ReflectiveOperationException | NoSuchElementException e ) {
412
- VMError .shouldNotReachHere ("Could not reflectively call Module.implAddReadsAllUnnamed" , e );
413
- }
414
- }
415
-
416
- static void implAddEnableNativeAccess (Module module ) {
417
- try {
418
- Method implAddEnableNativeAccess = Module .class .getDeclaredMethod ("implAddEnableNativeAccess" );
419
- ModuleSupport .accessModuleByClass (ModuleSupport .Access .OPEN , NativeImageClassLoaderSupport .class , Module .class );
420
- implAddEnableNativeAccess .setAccessible (true );
421
- implAddEnableNativeAccess .invoke (module );
422
- } catch (ReflectiveOperationException | NoSuchElementException e ) {
423
- VMError .shouldNotReachHere ("Could not reflectively call Module.implAddEnableNativeAccess" , e );
424
- }
425
- }
426
-
427
- static void implAddEnableNativeAccessToAllUnnamed () {
428
- try {
429
- Method implAddEnableNativeAccess = Module .class .getDeclaredMethod ("implAddEnableNativeAccessToAllUnnamed" );
430
- ModuleSupport .accessModuleByClass (ModuleSupport .Access .OPEN , NativeImageClassLoaderSupport .class , Module .class );
431
- implAddEnableNativeAccess .setAccessible (true );
432
- implAddEnableNativeAccess .invoke (null );
433
- } catch (ReflectiveOperationException | NoSuchElementException e ) {
434
- VMError .shouldNotReachHere ("Could not reflectively call Module.implAddEnableNativeAccessToAllUnnamed" , e );
435
- }
436
- }
437
-
438
408
protected List <Path > modulepath () {
439
409
return Stream .concat (imagemp .stream (), buildmp .stream ()).toList ();
440
410
}
@@ -481,7 +451,7 @@ void processClassLoaderOptions() {
481
451
});
482
452
processOption (NativeImageClassLoaderOptions .AddReads ).forEach (val -> {
483
453
if (val .targetModules .isEmpty ()) {
484
- implAddReadsAllUnnamed ( val .module );
454
+ ReflectionUtil . invokeMethod ( implAddReadsAllUnnamed , val .module );
485
455
} else {
486
456
for (Module targetModule : val .targetModules ) {
487
457
Modules .addReads (val .module , targetModule );
@@ -490,10 +460,10 @@ void processClassLoaderOptions() {
490
460
});
491
461
NativeImageClassLoaderOptions .EnableNativeAccess .getValue (parsedHostedOptions ).values ().stream ().flatMap (m -> Arrays .stream (SubstrateUtil .split (m , "," ))).forEach (moduleName -> {
492
462
if ("ALL-UNNAMED" .equals (moduleName )) {
493
- implAddEnableNativeAccessToAllUnnamed ( );
463
+ ReflectionUtil . invokeMethod ( implAddEnableNativeAccessToAllUnnamed , null );
494
464
} else {
495
465
Module module = findModule (moduleName ).orElseThrow (() -> userWarningModuleNotFound (NativeImageClassLoaderOptions .EnableNativeAccess , moduleName ));
496
- implAddEnableNativeAccess ( module );
466
+ ReflectionUtil . invokeMethod ( implAddEnableNativeAccess , module );
497
467
}
498
468
});
499
469
}
0 commit comments