2323
2424package jdk .tools .jlink .internal ;
2525
26+ import jdk .internal .jimage .ModuleReference ;
2627import jdk .tools .jlink .internal .ImageResourcesTree .Node ;
2728import jdk .tools .jlink .internal .ImageResourcesTree .PackageNode ;
28- import jdk .tools .jlink .internal .ImageResourcesTree .PackageNode .PackageReference ;
2929import jdk .tools .jlink .internal .ImageResourcesTree .ResourceNode ;
3030import jdk .tools .jlink .internal .ImageResourcesTree .Tree ;
3131import org .junit .jupiter .api .Test ;
@@ -46,11 +46,6 @@ public class ImageResourcesTreeTest {
4646 private static final String MODULES_PREFIX = "/modules/" ;
4747 private static final String PACKAGES_PREFIX = "/packages/" ;
4848
49- // Package entry flags copied from ImageResourcesTree.
50- private static final int PKG_FLAG_HAS_NORMAL_CONTENT = 0x1 ;
51- private static final int PKG_FLAG_HAS_PREVIEW_CONTENT = 0x2 ;
52- private static final int PKG_FLAG_IS_PREVIEW_ONLY = 0x4 ;
53-
5449 @ Test
5550 public void directoryNodes () {
5651 List <String > paths = List .of (
@@ -139,19 +134,15 @@ public void expectedPackageEntries() {
139134 Tree tree = new Tree (paths );
140135 Map <String , Node > nodes = tree .getMap ();
141136 PackageNode pkgUtil = getPackageNode (nodes , "java.util" );
142- assertEquals ( 2 , pkgUtil .moduleCount () );
143- List < PackageReference > modRefs = pkgUtil . modules (). toList ( );
137+ List < ModuleReference > modRefs = pkgUtil .getModuleReferences ( );
138+ assertEquals ( 2 , modRefs . size () );
144139
145- List <String > modNames = modRefs .stream ().map (PackageReference ::name ).toList ();
140+ List <String > modNames = modRefs .stream ().map (ModuleReference ::name ).toList ();
146141 assertEquals (List .of ("java.base" , "java.logging" ), modNames );
147142
148- PackageReference baseRef = modRefs .get (0 );
149- assertNonEmptyRef (baseRef , "java.base" );
150- assertEquals (PKG_FLAG_HAS_NORMAL_CONTENT , baseRef .flags ());
151-
152- PackageReference loggingRef = modRefs .get (1 );
153- assertEmptyRef (loggingRef , "java.logging" );
154- assertEquals (0 , loggingRef .flags ());
143+ // Ordered by name.
144+ assertNonEmptyRef (modRefs .get (0 ), "java.base" );
145+ assertEmptyRef (modRefs .get (1 ), "java.logging" );
155146 }
156147
157148 @ Test
@@ -165,11 +156,11 @@ public void expectedPackageEntries_withPreviewResources() {
165156 Tree tree = new Tree (paths );
166157 Map <String , Node > nodes = tree .getMap ();
167158 PackageNode pkgUtil = getPackageNode (nodes , "java.util" );
168- List <PackageReference > modRefs = pkgUtil .modules (). toList ();
159+ List <ModuleReference > modRefs = pkgUtil .getModuleReferences ();
169160
170- PackageReference baseRef = modRefs .get (0 );
161+ ModuleReference baseRef = modRefs .get (0 );
171162 assertNonEmptyRef (baseRef , "java.base" );
172- assertEquals ( PKG_FLAG_HAS_NORMAL_CONTENT | PKG_FLAG_HAS_PREVIEW_CONTENT , baseRef .flags ());
163+ assertTrue ( baseRef .hasPreviewVersion ());
173164 }
174165
175166 @ Test
@@ -183,57 +174,52 @@ public void expectedPackageEntries_withPreviewOnlyPackages() {
183174
184175 // Preview only package (with content).
185176 PackageNode nonEmptyPkg = getPackageNode (nodes , "java.util.preview.only" );
186- PackageReference nonEmptyRef = nonEmptyPkg .modules ().findFirst (). orElseThrow ();
177+ ModuleReference nonEmptyRef = nonEmptyPkg .getModuleReferences ().getFirst ();
187178 assertNonEmptyPreviewOnlyRef (nonEmptyRef , "java.base" );
188- assertEquals (PKG_FLAG_IS_PREVIEW_ONLY | PKG_FLAG_HAS_PREVIEW_CONTENT , nonEmptyRef .flags ());
189179
190180 // Preview only packages can be empty.
191181 PackageNode emptyPkg = getPackageNode (nodes , "java.util.preview" );
192- PackageReference emptyRef = emptyPkg .modules ().findFirst (). orElseThrow ();
182+ ModuleReference emptyRef = emptyPkg .getModuleReferences ().getFirst ();
193183 assertEmptyPreviewOnlyRef (emptyRef , "java.base" );
194- assertEquals (PKG_FLAG_IS_PREVIEW_ONLY , emptyRef .flags ());
195184 }
196185
197186 @ Test
198- public void expectedPackageEntries_sharedPackage () {
199- // Resource in many modules define the same package (java.shared).
200- // However, the package "java.shared" only has content in one module.
187+ public void expectedPackageOrder_sharedPackage () {
188+ // Resource in many modules define the same package (java.shared), but
189+ // this only has content in one module (java.content) .
201190 // Order of test data is shuffled to show reordering in entry list.
202- // "java.preview " would sort before after "java.resource " if it were
203- // only sorted by name, but the preview flag has precedence .
204- // Expect: content -> resource {1..6} -> preview{7..8 }
191+ // "java.moduleN " would sort before after "java.previewN " if it were
192+ // only sorted by name, but preview entries come first .
193+ // Expect: preview {1..3) -> content -> module{1..3 }
205194 List <String > paths = List .of (
206- "/java.resource1/java/shared/one/SomeClass.class" ,
207- "/java.preview7/META-INF/preview/java/shared/foo/SomeClass.class" ,
208- "/java.resource3/java/shared/three/SomeClass.class" ,
209- "/java.resource6/java/shared/six/SomeClass.class" ,
210- "/java.preview8/META-INF/preview/java/shared/bar/SomeClass.class" ,
211- "/java.resource5/java/shared/five/SomeClass.class" ,
195+ // Module with content in "java.shared".
212196 "/java.content/java/shared/MainPackageClass.class" ,
213- "/java.resource2/java/shared/two/SomeClass.class" ,
214- "/java.resource4/java/shared/four/SomeClass.class" );
197+ // Other resources (in other modules) which implicitly define "java.shared".
198+ "/java.module3/java/shared/three/SomeClass.class" ,
199+ "/java.module2/java/shared/two/SomeClass.class" ,
200+ "/java.module1/java/shared/one/SomeClass.class" ,
201+ // Preview resources in other modules which implicitly define "java.shared".
202+ "/java.preview3/META-INF/preview/java/shared/baz/SomeClass.class" ,
203+ "/java.preview2/META-INF/preview/java/shared/bar/SomeClass.class" ,
204+ "/java.preview1/META-INF/preview/java/shared/foo/SomeClass.class" );
215205
216206 Tree tree = new Tree (paths );
217207 Map <String , Node > nodes = tree .getMap ();
218208
219- // Preview only package (with content).
220209 PackageNode sharedPkg = getPackageNode (nodes , "java.shared" );
221- assertEquals (9 , sharedPkg .moduleCount ());
222-
223- List <PackageReference > refs = sharedPkg .modules ().toList ();
224- assertNonEmptyRef (refs .getFirst (), "java.content" );
225- assertEquals (PKG_FLAG_HAS_NORMAL_CONTENT , refs .getFirst ().flags ());
210+ List <ModuleReference > refs = sharedPkg .getModuleReferences ();
226211
227- // Empty non-preview refs after non-empty ref.
228- int idx = 1 ;
229- for (PackageReference emptyRef : refs .subList (1 , 7 )) {
230- assertEmptyRef (emptyRef , "java.resource" + idx ++);
231- assertEquals (0 , emptyRef .flags ());
212+ // Preview packages first, by name.
213+ int n = 1 ;
214+ for (ModuleReference ref : refs .subList (0 , 3 )) {
215+ assertEmptyPreviewOnlyRef (ref , "java.preview" + (n ++));
232216 }
233- // Empty preview-only refs last.
234- for (PackageReference emptyRef : refs .subList (7 , 9 )) {
235- assertEmptyPreviewOnlyRef (emptyRef , "java.preview" + idx ++);
236- assertEquals (PKG_FLAG_IS_PREVIEW_ONLY , emptyRef .flags ());
217+ // The content package (simply due to its name).
218+ assertNonEmptyRef (refs .get (3 ), "java.content" );
219+ // And the non-preview empty packages after.
220+ n = 1 ;
221+ for (ModuleReference ref : refs .subList (4 , 7 )) {
222+ assertEmptyRef (ref , "java.module" + (n ++));
237223 }
238224 }
239225
@@ -249,27 +235,27 @@ static void assertContainsResources(Node dirNode, String... resourceNames) {
249235 }
250236 }
251237
252- static void assertNonEmptyRef (PackageReference ref , String modName ) {
238+ static void assertNonEmptyRef (ModuleReference ref , String modName ) {
253239 assertEquals (modName , ref .name (), "Unexpected module name: " + ref );
254- assertFalse (ref .isEmpty (), "Expected non-empty reference: " + ref );
240+ assertTrue (ref .hasContent (), "Expected non-empty reference: " + ref );
255241 assertFalse (ref .isPreviewOnly (), "Expected not preview-only: " + ref );
256242 }
257243
258- static void assertEmptyRef (PackageReference ref , String modName ) {
244+ static void assertEmptyRef (ModuleReference ref , String modName ) {
259245 assertEquals (modName , ref .name (), "Unexpected module name: " + ref );
260- assertTrue (ref .isEmpty (), "Expected empty reference: " + ref );
246+ assertFalse (ref .hasContent (), "Expected empty reference: " + ref );
261247 assertFalse (ref .isPreviewOnly (), "Expected not preview-only: " + ref );
262248 }
263249
264- static void assertNonEmptyPreviewOnlyRef (PackageReference ref , String modName ) {
250+ static void assertNonEmptyPreviewOnlyRef (ModuleReference ref , String modName ) {
265251 assertEquals (modName , ref .name (), "Unexpected module name: " + ref );
266- assertFalse (ref .isEmpty (), "Expected empty reference: " + ref );
252+ assertTrue (ref .hasContent (), "Expected empty reference: " + ref );
267253 assertTrue (ref .isPreviewOnly (), "Expected preview-only: " + ref );
268254 }
269255
270- static void assertEmptyPreviewOnlyRef (PackageReference ref , String modName ) {
256+ static void assertEmptyPreviewOnlyRef (ModuleReference ref , String modName ) {
271257 assertEquals (modName , ref .name (), "Unexpected module name: " + ref );
272- assertTrue (ref .isEmpty (), "Expected empty reference: " + ref );
258+ assertFalse (ref .hasContent (), "Expected empty reference: " + ref );
273259 assertTrue (ref .isPreviewOnly (), "Expected preview-only: " + ref );
274260 }
275261}
0 commit comments