Skip to content

Commit 98f0700

Browse files
committed
Replicate visibility modifications for unnamed modules
1 parent e200def commit 98f0700

File tree

1 file changed

+16
-12
lines changed

1 file changed

+16
-12
lines changed

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ModuleLayerFeature.java

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -201,13 +201,15 @@ private void scanRuntimeBootLayerPrototype(BeforeAnalysisAccessImpl accessImpl)
201201
public void afterAnalysis(AfterAnalysisAccess access) {
202202
AfterAnalysisAccessImpl accessImpl = (AfterAnalysisAccessImpl) access;
203203

204-
Set<Module> runtimeImageNamedModules = accessImpl.getUniverse().getTypes()
204+
Set<Module> runtimeImageModules = accessImpl.getUniverse().getTypes()
205205
.stream()
206206
.filter(ModuleLayerFeature::typeIsReachable)
207207
.map(t -> t.getJavaClass().getModule())
208-
.filter(Module::isNamed)
209208
.collect(Collectors.toSet());
210209

210+
Set<Module> runtimeImageNamedModules = runtimeImageModules.stream().filter(Module::isNamed).collect(Collectors.toSet());
211+
Set<Module> runtimeImageUnnamedModules = runtimeImageModules.stream().filter(Predicate.not(Module::isNamed)).collect(Collectors.toSet());
212+
211213
/*
212214
* Parse explicitly added modules via --add-modules. This is done early as this information
213215
* is required when filtering the analysis reachable module set.
@@ -257,7 +259,7 @@ public void afterAnalysis(AfterAnalysisAccess access) {
257259
* Ensure that runtime modules have the same relations (i.e., reads, opens and exports) as
258260
* the originals.
259261
*/
260-
replicateVisibilityModifications(runtimeBootLayer, accessImpl, accessImpl.imageClassLoader, runtimeImageNamedModules);
262+
replicateVisibilityModifications(runtimeBootLayer, accessImpl, accessImpl.imageClassLoader, runtimeImageNamedModules, runtimeImageUnnamedModules);
261263
replicateNativeAccess(accessImpl, runtimeImageNamedModules);
262264
}
263265

@@ -461,26 +463,28 @@ private ModuleLayer synthesizeRuntimeModuleLayer(List<ModuleLayer> parentLayers,
461463
}
462464
}
463465

464-
private void replicateVisibilityModifications(ModuleLayer runtimeBootLayer, AfterAnalysisAccessImpl accessImpl, ImageClassLoader cl, Set<Module> analysisReachableNamedModules) {
466+
private void replicateVisibilityModifications(ModuleLayer runtimeBootLayer, AfterAnalysisAccessImpl accessImpl, ImageClassLoader cl, Set<Module> analysisReachableNamedModules, Set<Module> analysisReachableUnnamedModules) {
465467
List<Module> applicationModules = findApplicationModules(runtimeBootLayer, cl.applicationModulePath());
466468

467-
Map<Module, Module> modulePairs = analysisReachableNamedModules
469+
Map<Module, Module> namedModulePairs = analysisReachableNamedModules
468470
.stream()
469471
.collect(Collectors.toMap(m -> m, m -> moduleLayerFeatureUtils.getRuntimeModuleForHostedModule(m, false)));
470-
modulePairs.put(moduleLayerFeatureUtils.allUnnamedModule, moduleLayerFeatureUtils.allUnnamedModule);
471-
modulePairs.put(moduleLayerFeatureUtils.everyoneModule, moduleLayerFeatureUtils.everyoneModule);
472+
Map<Module, Module> unnamedModulePairs = analysisReachableUnnamedModules
473+
.stream()
474+
.collect(Collectors.toMap(m -> m, m -> moduleLayerFeatureUtils.getRuntimeModuleForHostedModule(m, false)));
475+
unnamedModulePairs.put(moduleLayerFeatureUtils.allUnnamedModule, moduleLayerFeatureUtils.allUnnamedModule);
476+
unnamedModulePairs.put(moduleLayerFeatureUtils.everyoneModule, moduleLayerFeatureUtils.everyoneModule);
472477

473478
Module builderModule = ModuleLayerFeatureUtils.getBuilderModule();
474479
assert builderModule != null;
475480

476481
try {
477-
for (Map.Entry<Module, Module> e1 : modulePairs.entrySet()) {
482+
for (Map.Entry<Module, Module> e1 : namedModulePairs.entrySet()) {
478483
Module hostedFrom = e1.getKey();
479-
if (!hostedFrom.isNamed()) {
480-
continue;
481-
}
482484
Module runtimeFrom = e1.getValue();
483-
for (Map.Entry<Module, Module> e2 : modulePairs.entrySet()) {
485+
Set<Map.Entry<Module, Module>> allModules = new HashSet<>(namedModulePairs.entrySet());
486+
allModules.addAll(unnamedModulePairs.entrySet());
487+
for (Map.Entry<Module, Module> e2 : allModules) {
484488
Module hostedTo = e2.getKey();
485489
if (hostedTo == hostedFrom) {
486490
continue;

0 commit comments

Comments
 (0)