2424 */
2525package com .oracle .svm .core .jdk ;
2626
27- import java .util .Collection ;
2827import java .util .HashMap ;
2928import java .util .HashSet ;
3029import java .util .Map ;
3130import java .util .Set ;
3231
32+ import org .graalvm .collections .EconomicMap ;
3333import org .graalvm .nativeimage .ImageSingletons ;
3434import org .graalvm .nativeimage .Platform ;
3535import org .graalvm .nativeimage .Platforms ;
@@ -48,19 +48,19 @@ public abstract class LayeredModuleSingleton {
4848 public static final String ALL_UNNAMED_MODULE_NAME = "native-image-all-unnamed" ;
4949 public static final String EVERYONE_MODULE_NAME = "native-image-everyone" ;
5050
51- protected final Map <String , Map <String , Set <String >>> moduleOpenPackages ;
52- protected final Map <String , Map <String , Set <String >>> moduleExportedPackages ;
51+ protected final EconomicMap <String , Map <String , Set <String >>> moduleOpenPackages ;
52+ protected final EconomicMap <String , Map <String , Set <String >>> moduleExportedPackages ;
5353
54- private final Map <String , ResolvedJavaModule > nameToModule = new HashMap <> ();
54+ private final EconomicMap <String , ResolvedJavaModule > nameToModule = EconomicMap . create ();
5555
5656 private ResolvedJavaModule everyoneModule ;
5757 private ResolvedJavaModule allUnnamedModule ;
5858
5959 public LayeredModuleSingleton () {
60- this (new HashMap <> (), new HashMap <> ());
60+ this (EconomicMap . create (), EconomicMap . create ());
6161 }
6262
63- public LayeredModuleSingleton (Map <String , Map <String , Set <String >>> moduleOpenPackages , Map <String , Map <String , Set <String >>> moduleExportedPackages ) {
63+ public LayeredModuleSingleton (EconomicMap <String , Map <String , Set <String >>> moduleOpenPackages , EconomicMap <String , Map <String , Set <String >>> moduleExportedPackages ) {
6464 this .moduleOpenPackages = moduleOpenPackages ;
6565 this .moduleExportedPackages = moduleExportedPackages ;
6666 }
@@ -82,8 +82,17 @@ public Map<String, Set<String>> getExportedPackages(ResolvedJavaModule module) {
8282 return moduleExportedPackages .get (module .getName ());
8383 }
8484
85- public Collection <ResolvedJavaModule > getModules () {
86- return nameToModule .values ();
85+ public Iterable <ResolvedJavaModule > getModules () {
86+ return nameToModule .getValues ();
87+ }
88+
89+ public boolean containsModule (ResolvedJavaModule module ) {
90+ for (ResolvedJavaModule m : nameToModule .getValues ()) {
91+ if (m .equals (module )) {
92+ return true ;
93+ }
94+ }
95+ return false ;
8796 }
8897
8998 public void setOpenPackages (ResolvedJavaModule module , Map <String , Set <Module >> openPackages ) {
@@ -94,7 +103,7 @@ public void setExportedPackages(ResolvedJavaModule module, Map<String, Set<Modul
94103 setPackages (module , moduleExportedPackages , exportedPackages , "exported" );
95104 }
96105
97- private void setPackages (ResolvedJavaModule module , Map <String , Map <String , Set <String >>> modulePackages , Map <String , Set <Module >> packages , String mode ) {
106+ private void setPackages (ResolvedJavaModule module , EconomicMap <String , Map <String , Set <String >>> modulePackages , Map <String , Set <Module >> packages , String mode ) {
98107 ResolvedJavaModule oldValue = nameToModule .put (module .toString (), module );
99108 if (oldValue != null && !oldValue .equals (module )) {
100109 throw UserError .abort ("Layered images require all modules to have a different name because their identity hash code is not consistent across layers. " +
0 commit comments