@@ -609,7 +609,8 @@ private static final class ModuleLayerFeatureUtils {
609
609
private final Set <Module > allUnnamedModuleSet ;
610
610
private final Module everyoneModule ;
611
611
private final Set <Module > everyoneSet ;
612
- private final Constructor <Module > moduleConstructor ;
612
+ private final Constructor <Module > namedModuleConstructor ;
613
+ private final Constructor <Module > unnamedModuleConstructor ;
613
614
private final Field moduleDescriptorField ;
614
615
private final Field moduleLayerField ;
615
616
private final Field moduleLoaderField ;
@@ -670,7 +671,8 @@ private static final class ModuleLayerFeatureUtils {
670
671
everyoneSet = new HashSet <>(1 );
671
672
everyoneSet .add (everyoneModule );
672
673
673
- moduleConstructor = ReflectionUtil .lookupConstructor (Module .class , ClassLoader .class , ModuleDescriptor .class );
674
+ namedModuleConstructor = ReflectionUtil .lookupConstructor (Module .class , ClassLoader .class , ModuleDescriptor .class );
675
+ unnamedModuleConstructor = ReflectionUtil .lookupConstructor (Module .class , ClassLoader .class );
674
676
moduleFindModuleMethod = ReflectionUtil .lookupMethod (Module .class , "findModule" , String .class , Map .class , Map .class , List .class );
675
677
676
678
systemModuleFindersAllSystemModulesMethod = ReflectionUtil .lookupMethod (SystemModuleFinders .class , "allSystemModules" );
@@ -770,11 +772,7 @@ public ModuleFinder getAppModuleFinder() {
770
772
}
771
773
772
774
public Module getRuntimeModuleForHostedModule (Module hostedModule , boolean optional ) {
773
- if (hostedModule .isNamed ()) {
774
- return getRuntimeModuleForHostedModule (hostedModule .getClassLoader (), hostedModule .getName (), optional );
775
- } else {
776
- return hostedModule ;
777
- }
775
+ return getRuntimeModuleForHostedModule (hostedModule .getClassLoader (), hostedModule .getName (), optional );
778
776
}
779
777
780
778
public Module getRuntimeModuleForHostedModule (ClassLoader loader , String hostedModuleName , boolean optional ) {
@@ -800,10 +798,15 @@ public Module getRuntimeModuleForHostedModule(ClassLoader loader, String hostedM
800
798
}
801
799
802
800
public Module getOrCreateRuntimeModuleForHostedModule (Module hostedModule ) {
803
- if (hostedModule .isNamed ()) {
804
- return getOrCreateRuntimeModuleForHostedModule (hostedModule .getClassLoader (), hostedModule .getName (), hostedModule .getDescriptor ());
805
- } else {
801
+ /*
802
+ * Special module instances such as ALL_UNNAMED and EVERYONE_MODULE are not replicated
803
+ * as they only serve as marker modules (all their fields are null, including the loader
804
+ * field).
805
+ */
806
+ if (hostedModule == allUnnamedModule || hostedModule == everyoneModule ) {
806
807
return hostedModule ;
808
+ } else {
809
+ return getOrCreateRuntimeModuleForHostedModule (hostedModule .getClassLoader (), hostedModule .getName (), hostedModule .getDescriptor ());
807
810
}
808
811
}
809
812
@@ -815,7 +818,11 @@ public Module getOrCreateRuntimeModuleForHostedModule(ClassLoader loader, String
815
818
}
816
819
817
820
try {
818
- runtimeModule = moduleConstructor .newInstance (loader , runtimeModuleDescriptor );
821
+ if (hostedModuleName == null ) {
822
+ runtimeModule = unnamedModuleConstructor .newInstance (loader );
823
+ } else {
824
+ runtimeModule = namedModuleConstructor .newInstance (loader , runtimeModuleDescriptor );
825
+ }
819
826
} catch (InstantiationException | IllegalAccessException | InvocationTargetException ex ) {
820
827
throw VMError .shouldNotReachHere ("Failed to reflectively construct a runtime Module object." , ex );
821
828
}
0 commit comments