5454import java .util .stream .Collectors ;
5555import java .util .stream .Stream ;
5656
57+ import com .oracle .svm .core .jdk .Resources ;
5758import jdk .internal .module .DefaultRoots ;
5859import jdk .internal .module .ModuleBootstrap ;
5960import jdk .internal .module .SystemModuleFinders ;
6364import com .oracle .svm .core .SubstrateOptions ;
6465import com .oracle .svm .core .SubstrateUtil ;
6566import com .oracle .svm .core .feature .InternalFeature ;
66- import com .oracle .svm .core .jdk .BootModuleLayerSupport ;
67+ import com .oracle .svm .core .jdk .RuntimeModuleSupport ;
6768import com .oracle .svm .core .feature .AutomaticallyRegisteredFeature ;
6869import com .oracle .svm .core .util .VMError ;
6970import com .oracle .svm .util .ModuleSupport ;
7071import com .oracle .svm .util .ReflectionUtil ;
72+ import org .graalvm .nativeimage .Platform ;
73+ import org .graalvm .nativeimage .Platforms ;
7174
7275/**
7376 * This feature:
@@ -126,7 +129,8 @@ public void duringSetup(DuringSetupAccess access) {
126129 .collect (Collectors .toSet ());
127130 Function <String , ClassLoader > clf = moduleLayerFeatureUtils ::getClassLoaderForBootLayerModule ;
128131 ModuleLayer runtimeBootLayer = synthesizeRuntimeModuleLayer (new ArrayList <>(List .of (ModuleLayer .empty ())), accessImpl .imageClassLoader , baseModules , Set .of (), clf , null );
129- BootModuleLayerSupport .instance ().setBootLayer (runtimeBootLayer );
132+ RuntimeModuleSupport .instance ().setBootLayer (runtimeBootLayer );
133+ RuntimeModuleSupport .instance ().setHostedToRuntimeModuleMapper (moduleLayerFeatureUtils ::getOrCreateRuntimeModuleForHostedModule );
130134
131135 /*
132136 * Register an object replacer that will ensure all references to hosted module instances
@@ -136,21 +140,20 @@ public void duringSetup(DuringSetupAccess access) {
136140 }
137141
138142 private Object replaceHostedModules (Object source ) {
139- if (source instanceof Module ) {
140- Module module = (Module ) source ;
141- return moduleLayerFeatureUtils .getOrCreateRuntimeModuleForHostedModule (module , module .getDescriptor ());
143+ if (source instanceof Module module ) {
144+ return moduleLayerFeatureUtils .getOrCreateRuntimeModuleForHostedModule (module );
142145 }
143146 return source ;
144147 }
145148
146149 @ Override
147150 public void afterRegistration (AfterRegistrationAccess access ) {
148- ImageSingletons .add (BootModuleLayerSupport .class , new BootModuleLayerSupport ());
151+ ImageSingletons .add (RuntimeModuleSupport .class , new RuntimeModuleSupport ());
149152
150153 List <Module > bootLayerAutomaticModules = ModuleLayer .boot ().modules ()
151154 .stream ()
152155 .filter (m -> m .isNamed () && m .getDescriptor ().isAutomatic ())
153- .collect ( Collectors . toList () );
156+ .toList ();
154157 if (!bootLayerAutomaticModules .isEmpty ()) {
155158 System .out .println ("Warning: Detected automatic module(s) on the module-path of the image builder:" + System .lineSeparator () +
156159 bootLayerAutomaticModules .stream ().map (ModuleLayerFeatureUtils ::formatModule ).collect (Collectors .joining (System .lineSeparator ())) +
@@ -176,12 +179,7 @@ public void afterAnalysis(AfterAnalysisAccess access) {
176179 * is required when filtering the analysis reachable module set.
177180 */
178181 Set <String > extraModules = ModuleLayerFeatureUtils .parseModuleSetModifierProperty (ModuleSupport .PROPERTY_IMAGE_EXPLICITLY_ADDED_MODULES );
179- Set <String > includedResourceModules = ImageSingletons .lookup (ResourcesFeature .class ).includedResourcesModules
180- .stream ()
181- .map (Module ::getName )
182- .filter (Objects ::nonNull )
183- .collect (Collectors .toSet ());
184- extraModules .addAll (includedResourceModules );
182+ extraModules .addAll (Resources .getIncludedResourcesModules ());
185183 extraModules .stream ().filter (Predicate .not (ModuleSupport .nonExplicitModules ::contains )).forEach (moduleName -> {
186184 Optional <?> module = accessImpl .imageClassLoader .findModule (moduleName );
187185 if (module .isEmpty ()) {
@@ -219,7 +217,7 @@ public void afterAnalysis(AfterAnalysisAccess access) {
219217 Set <String > rootModules = calculateRootModules (extraModules );
220218 List <ModuleLayer > runtimeModuleLayers = synthesizeRuntimeModuleLayers (accessImpl , reachableModuleLayers , runtimeImageNamedModules , analysisReachableSyntheticModules , rootModules );
221219 ModuleLayer runtimeBootLayer = runtimeModuleLayers .get (0 );
222- BootModuleLayerSupport .instance ().setBootLayer (runtimeBootLayer );
220+ RuntimeModuleSupport .instance ().setBootLayer (runtimeBootLayer );
223221
224222 /*
225223 * Ensure that runtime modules have the same relations (i.e., reads, opens and exports) as
@@ -416,7 +414,7 @@ private ModuleLayer synthesizeRuntimeModuleLayer(List<ModuleLayer> parentLayers,
416414 runtimeModuleLayer = moduleLayerFeatureUtils .createNewModuleLayerInstance (runtimeModuleLayerConfiguration );
417415 Map <String , Module > nameToModule = moduleLayerFeatureUtils .synthesizeNameToModule (runtimeModuleLayer , clf );
418416 for (Module syntheticModule : syntheticModules ) {
419- Module runtimeSyntheticModule = moduleLayerFeatureUtils .getOrCreateRuntimeModuleForHostedModule (syntheticModule , syntheticModule . getDescriptor () );
417+ Module runtimeSyntheticModule = moduleLayerFeatureUtils .getOrCreateRuntimeModuleForHostedModule (syntheticModule );
420418 nameToModule .putIfAbsent (runtimeSyntheticModule .getName (), runtimeSyntheticModule );
421419 moduleLayerFeatureUtils .patchModuleLayerField (runtimeSyntheticModule , runtimeModuleLayer );
422420 }
@@ -540,6 +538,7 @@ private void patchRuntimeModuleLayer(ModuleLayer runtimeModuleLayer, Map<String,
540538 runtimeModuleLayer .modules ();
541539 }
542540
541+ @ Platforms (Platform .HOSTED_ONLY .class )
543542 private static final class ModuleLayerFeatureUtils {
544543 private final Map <ClassLoader , Map <String , Module >> runtimeModules ;
545544 private final ImageClassLoader imageClassLoader ;
@@ -731,9 +730,9 @@ public Module getRuntimeModuleForHostedModule(ClassLoader loader, String hostedM
731730 }
732731 }
733732
734- public Module getOrCreateRuntimeModuleForHostedModule (Module hostedModule , ModuleDescriptor runtimeModuleDescriptor ) {
733+ public Module getOrCreateRuntimeModuleForHostedModule (Module hostedModule ) {
735734 if (hostedModule .isNamed ()) {
736- return getOrCreateRuntimeModuleForHostedModule (hostedModule .getClassLoader (), hostedModule .getName (), runtimeModuleDescriptor );
735+ return getOrCreateRuntimeModuleForHostedModule (hostedModule .getClassLoader (), hostedModule .getName (), hostedModule . getDescriptor () );
737736 } else {
738737 return hostedModule == everyoneModule ? everyoneModule : allUnnamedModule ;
739738 }
0 commit comments