23
23
24
24
package jdk .tools .jlink .internal ;
25
25
26
+ import jdk .internal .jimage .ModuleReference ;
26
27
import jdk .tools .jlink .internal .ImageResourcesTree .Node ;
27
28
import jdk .tools .jlink .internal .ImageResourcesTree .PackageNode ;
28
- import jdk .tools .jlink .internal .ImageResourcesTree .PackageNode .PackageReference ;
29
29
import jdk .tools .jlink .internal .ImageResourcesTree .ResourceNode ;
30
30
import jdk .tools .jlink .internal .ImageResourcesTree .Tree ;
31
31
import org .junit .jupiter .api .Test ;
@@ -46,11 +46,6 @@ public class ImageResourcesTreeTest {
46
46
private static final String MODULES_PREFIX = "/modules/" ;
47
47
private static final String PACKAGES_PREFIX = "/packages/" ;
48
48
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
-
54
49
@ Test
55
50
public void directoryNodes () {
56
51
List <String > paths = List .of (
@@ -139,19 +134,15 @@ public void expectedPackageEntries() {
139
134
Tree tree = new Tree (paths );
140
135
Map <String , Node > nodes = tree .getMap ();
141
136
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 () );
144
139
145
- List <String > modNames = modRefs .stream ().map (PackageReference ::name ).toList ();
140
+ List <String > modNames = modRefs .stream ().map (ModuleReference ::name ).toList ();
146
141
assertEquals (List .of ("java.base" , "java.logging" ), modNames );
147
142
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" );
155
146
}
156
147
157
148
@ Test
@@ -165,11 +156,11 @@ public void expectedPackageEntries_withPreviewResources() {
165
156
Tree tree = new Tree (paths );
166
157
Map <String , Node > nodes = tree .getMap ();
167
158
PackageNode pkgUtil = getPackageNode (nodes , "java.util" );
168
- List <PackageReference > modRefs = pkgUtil .modules (). toList ();
159
+ List <ModuleReference > modRefs = pkgUtil .getModuleReferences ();
169
160
170
- PackageReference baseRef = modRefs .get (0 );
161
+ ModuleReference baseRef = modRefs .get (0 );
171
162
assertNonEmptyRef (baseRef , "java.base" );
172
- assertEquals ( PKG_FLAG_HAS_NORMAL_CONTENT | PKG_FLAG_HAS_PREVIEW_CONTENT , baseRef .flags ());
163
+ assertTrue ( baseRef .hasPreviewVersion ());
173
164
}
174
165
175
166
@ Test
@@ -183,57 +174,52 @@ public void expectedPackageEntries_withPreviewOnlyPackages() {
183
174
184
175
// Preview only package (with content).
185
176
PackageNode nonEmptyPkg = getPackageNode (nodes , "java.util.preview.only" );
186
- PackageReference nonEmptyRef = nonEmptyPkg .modules ().findFirst (). orElseThrow ();
177
+ ModuleReference nonEmptyRef = nonEmptyPkg .getModuleReferences ().getFirst ();
187
178
assertNonEmptyPreviewOnlyRef (nonEmptyRef , "java.base" );
188
- assertEquals (PKG_FLAG_IS_PREVIEW_ONLY | PKG_FLAG_HAS_PREVIEW_CONTENT , nonEmptyRef .flags ());
189
179
190
180
// Preview only packages can be empty.
191
181
PackageNode emptyPkg = getPackageNode (nodes , "java.util.preview" );
192
- PackageReference emptyRef = emptyPkg .modules ().findFirst (). orElseThrow ();
182
+ ModuleReference emptyRef = emptyPkg .getModuleReferences ().getFirst ();
193
183
assertEmptyPreviewOnlyRef (emptyRef , "java.base" );
194
- assertEquals (PKG_FLAG_IS_PREVIEW_ONLY , emptyRef .flags ());
195
184
}
196
185
197
186
@ 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) .
201
190
// 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 }
205
194
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".
212
196
"/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" );
215
205
216
206
Tree tree = new Tree (paths );
217
207
Map <String , Node > nodes = tree .getMap ();
218
208
219
- // Preview only package (with content).
220
209
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 ();
226
211
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 ++));
232
216
}
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 ++));
237
223
}
238
224
}
239
225
@@ -249,27 +235,27 @@ static void assertContainsResources(Node dirNode, String... resourceNames) {
249
235
}
250
236
}
251
237
252
- static void assertNonEmptyRef (PackageReference ref , String modName ) {
238
+ static void assertNonEmptyRef (ModuleReference ref , String modName ) {
253
239
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 );
255
241
assertFalse (ref .isPreviewOnly (), "Expected not preview-only: " + ref );
256
242
}
257
243
258
- static void assertEmptyRef (PackageReference ref , String modName ) {
244
+ static void assertEmptyRef (ModuleReference ref , String modName ) {
259
245
assertEquals (modName , ref .name (), "Unexpected module name: " + ref );
260
- assertTrue (ref .isEmpty (), "Expected empty reference: " + ref );
246
+ assertFalse (ref .hasContent (), "Expected empty reference: " + ref );
261
247
assertFalse (ref .isPreviewOnly (), "Expected not preview-only: " + ref );
262
248
}
263
249
264
- static void assertNonEmptyPreviewOnlyRef (PackageReference ref , String modName ) {
250
+ static void assertNonEmptyPreviewOnlyRef (ModuleReference ref , String modName ) {
265
251
assertEquals (modName , ref .name (), "Unexpected module name: " + ref );
266
- assertFalse (ref .isEmpty (), "Expected empty reference: " + ref );
252
+ assertTrue (ref .hasContent (), "Expected empty reference: " + ref );
267
253
assertTrue (ref .isPreviewOnly (), "Expected preview-only: " + ref );
268
254
}
269
255
270
- static void assertEmptyPreviewOnlyRef (PackageReference ref , String modName ) {
256
+ static void assertEmptyPreviewOnlyRef (ModuleReference ref , String modName ) {
271
257
assertEquals (modName , ref .name (), "Unexpected module name: " + ref );
272
- assertTrue (ref .isEmpty (), "Expected empty reference: " + ref );
258
+ assertFalse (ref .hasContent (), "Expected empty reference: " + ref );
273
259
assertTrue (ref .isPreviewOnly (), "Expected preview-only: " + ref );
274
260
}
275
261
}
0 commit comments