|
75 | 75 | import java.util.stream.Collectors;
|
76 | 76 | import java.util.stream.Stream;
|
77 | 77 |
|
| 78 | +import com.oracle.svm.core.SubstrateUtil; |
78 | 79 | import org.graalvm.collections.EconomicMap;
|
79 | 80 | import org.graalvm.collections.EconomicSet;
|
80 | 81 | import org.graalvm.collections.MapCursor;
|
@@ -379,7 +380,29 @@ private static void implAddReadsAllUnnamed(Module module) {
|
379 | 380 | implAddReadsAllUnnamed.setAccessible(true);
|
380 | 381 | implAddReadsAllUnnamed.invoke(module);
|
381 | 382 | } catch (ReflectiveOperationException | NoSuchElementException e) {
|
382 |
| - VMError.shouldNotReachHere("Could reflectively call Module.implAddReadsAllUnnamed", e); |
| 383 | + VMError.shouldNotReachHere("Could not reflectively call Module.implAddReadsAllUnnamed", e); |
| 384 | + } |
| 385 | + } |
| 386 | + |
| 387 | + static void implAddEnableNativeAccess(Module module) { |
| 388 | + try { |
| 389 | + Method implAddEnableNativeAccess = Module.class.getDeclaredMethod("implAddEnableNativeAccess"); |
| 390 | + ModuleSupport.accessModuleByClass(ModuleSupport.Access.OPEN, NativeImageClassLoaderSupport.class, Module.class); |
| 391 | + implAddEnableNativeAccess.setAccessible(true); |
| 392 | + implAddEnableNativeAccess.invoke(module); |
| 393 | + } catch (ReflectiveOperationException | NoSuchElementException e) { |
| 394 | + VMError.shouldNotReachHere("Could not reflectively call Module.implAddEnableNativeAccess", e); |
| 395 | + } |
| 396 | + } |
| 397 | + |
| 398 | + static void implAddEnableNativeAccessToAllUnnamed() { |
| 399 | + try { |
| 400 | + Method implAddEnableNativeAccess = Module.class.getDeclaredMethod("implAddEnableNativeAccessToAllUnnamed"); |
| 401 | + ModuleSupport.accessModuleByClass(ModuleSupport.Access.OPEN, NativeImageClassLoaderSupport.class, Module.class); |
| 402 | + implAddEnableNativeAccess.setAccessible(true); |
| 403 | + implAddEnableNativeAccess.invoke(null); |
| 404 | + } catch (ReflectiveOperationException | NoSuchElementException e) { |
| 405 | + VMError.shouldNotReachHere("Could not reflectively call Module.implAddEnableNativeAccessToAllUnnamed", e); |
383 | 406 | }
|
384 | 407 | }
|
385 | 408 |
|
@@ -436,6 +459,14 @@ void processClassLoaderOptions() {
|
436 | 459 | }
|
437 | 460 | }
|
438 | 461 | });
|
| 462 | + NativeImageClassLoaderOptions.EnableNativeAccess.getValue(parsedHostedOptions).values().stream().flatMap(m -> Arrays.stream(SubstrateUtil.split(m, ","))).forEach(moduleName -> { |
| 463 | + if ("ALL-UNNAMED".equals(moduleName)) { |
| 464 | + implAddEnableNativeAccessToAllUnnamed(); |
| 465 | + } else { |
| 466 | + Module module = findModule(moduleName).orElseThrow(() -> userWarningModuleNotFound(NativeImageClassLoaderOptions.EnableNativeAccess, moduleName)); |
| 467 | + implAddEnableNativeAccess(module); |
| 468 | + } |
| 469 | + }); |
439 | 470 | }
|
440 | 471 |
|
441 | 472 | private static void warn(String m) {
|
|
0 commit comments