@@ -69,15 +69,15 @@ final class Target_sun_misc_Resource_JDK8OrEarlier {
69
69
}
70
70
71
71
@ SuppressWarnings ("unchecked" )
72
- class URLClassPathHelper {
72
+ class ResourcesHelper {
73
73
74
- private static <T > T urlToResource (String name , URL url ) {
74
+ private static <T > T urlToResource (String resourceName , URL url ) {
75
75
try {
76
76
if (url == null ) {
77
77
return null ;
78
78
}
79
79
URLConnection urlConnection = url .openConnection ();
80
- Object resource = JDKVersionSpecificResourceBuilder .buildResource (name , url , urlConnection );
80
+ Object resource = JDKVersionSpecificResourceBuilder .buildResource (resourceName , url , urlConnection );
81
81
VMError .guarantee (resource != null );
82
82
return (T ) resource ;
83
83
} catch (IOException e ) {
@@ -87,18 +87,40 @@ private static <T> T urlToResource(String name, URL url) {
87
87
}
88
88
}
89
89
90
- static <T > T nameToResource (String name ) {
91
- return urlToResource (name , Resources . createURL ( name ));
90
+ static <T > T nameToResource (String resourceName ) {
91
+ return urlToResource (resourceName , nameToResourceURL ( resourceName ));
92
92
}
93
93
94
- static <T > Enumeration <T > nameToResources (String name ) {
95
- Enumeration <URL > urls = Resources .createURLs (name );
94
+ static <T > Enumeration <T > nameToResources (String resourceName ) {
95
+ Enumeration <URL > urls = Resources .createURLs (resourceName );
96
96
List <T > resourceURLs = new ArrayList <>();
97
97
while (urls .hasMoreElements ()) {
98
- resourceURLs .add (urlToResource (name , urls .nextElement ()));
98
+ resourceURLs .add (urlToResource (resourceName , urls .nextElement ()));
99
99
}
100
100
return Collections .enumeration (resourceURLs );
101
101
}
102
+
103
+ static URL nameToResourceURL (String resourceName ) {
104
+ return Resources .createURL (resourceName );
105
+ }
106
+
107
+ static InputStream nameToResourceInputStream (String resourceName ) throws IOException {
108
+ URL url = nameToResourceURL (resourceName );
109
+ return url != null ? url .openStream () : null ;
110
+ }
111
+
112
+ static List <URL > nameToResourceListURLs (String resourcesName ) {
113
+ Enumeration <URL > urls = Resources .createURLs (resourcesName );
114
+ List <URL > resourceURLs = new ArrayList <>();
115
+ while (urls .hasMoreElements ()) {
116
+ resourceURLs .add (urls .nextElement ());
117
+ }
118
+ return resourceURLs ;
119
+ }
120
+
121
+ static Enumeration <URL > nameToResourceEnumerationURLs (String resourcesName ) {
122
+ return Collections .enumeration (nameToResourceListURLs (resourcesName ));
123
+ }
102
124
}
103
125
104
126
@ TargetClass (classNameProvider = Package_jdk_internal_loader .class , className = "URLClassPath" )
@@ -148,27 +170,27 @@ public Enumeration<URL> findResources(final String name, final boolean check) {
148
170
@ Substitute
149
171
@ TargetElement (name = "getResource" , onlyWith = JDK11OrLater .class )
150
172
public Target_jdk_internal_loader_Resource_JDK11OrLater getResourceJDK11OrLater (String name , boolean check ) {
151
- return URLClassPathHelper .nameToResource (name );
173
+ return ResourcesHelper .nameToResource (name );
152
174
}
153
175
154
176
@ Substitute
155
177
@ TargetElement (name = "getResources" , onlyWith = JDK11OrLater .class )
156
178
public Enumeration <Target_jdk_internal_loader_Resource_JDK11OrLater > getResourcesJDK11OrLater (final String name ,
157
179
final boolean check ) {
158
- return URLClassPathHelper .nameToResources (name );
180
+ return ResourcesHelper .nameToResources (name );
159
181
}
160
182
161
183
@ Substitute
162
184
@ TargetElement (name = "getResource" , onlyWith = JDK8OrEarlier .class )
163
185
public Target_sun_misc_Resource_JDK8OrEarlier getResourceJDK8OrEarlier (String name , boolean check ) {
164
- return URLClassPathHelper .nameToResource (name );
186
+ return ResourcesHelper .nameToResource (name );
165
187
}
166
188
167
189
@ Substitute
168
190
@ TargetElement (name = "getResources" , onlyWith = JDK8OrEarlier .class )
169
191
public Enumeration <Target_sun_misc_Resource_JDK8OrEarlier > getResourcesJDK8OrEarlier (final String name ,
170
192
final boolean check ) {
171
- return URLClassPathHelper .nameToResources (name );
193
+ return ResourcesHelper .nameToResources (name );
172
194
}
173
195
}
174
196
@@ -185,63 +207,83 @@ protected Class<?> findClass(final String name) {
185
207
}
186
208
}
187
209
188
- /**
189
- * The BuiltinClassLoader is loading resources from modules, and if a resource is not found, from
190
- * the classpath. Currently, we are supporting resource loading only from the classpath, so we need
191
- * to ensure that in all cases, we will fallback to searching in the classpath. Once we get the full
192
- * module support, we will need to reimplement this class.
193
- */
194
210
@ TargetClass (className = "jdk.internal.loader.BuiltinClassLoader" , onlyWith = JDK11OrLater .class )
195
211
@ SuppressWarnings ({"unused" , "static-method" })
196
212
final class Target_jdk_internal_loader_BuiltinClassLoader {
197
213
198
- @ Alias
199
- public native URL findResource (String mn , String name );
214
+ @ Substitute
215
+ public URL findResource (String mn , String name ) {
216
+ return ResourcesHelper .nameToResourceURL (name );
217
+ }
200
218
201
219
@ Substitute
202
220
public InputStream findResourceAsStream (String mn , String name ) throws IOException {
203
- URL url = findResource (mn , name );
204
- return (url != null ) ? url .openStream () : null ;
221
+ return ResourcesHelper .nameToResourceInputStream (name );
222
+ }
223
+
224
+ @ Substitute
225
+ public URL findResource (String name ) {
226
+ return ResourcesHelper .nameToResourceURL (name );
227
+ }
228
+
229
+ @ Substitute
230
+ public Enumeration <URL > findResources (String name ) {
231
+ return ResourcesHelper .nameToResourceEnumerationURLs (name );
205
232
}
206
233
207
234
@ Substitute
208
235
private List <URL > findMiscResource (String name ) {
209
- return new ArrayList <>( );
236
+ return ResourcesHelper . nameToResourceListURLs ( name );
210
237
}
211
238
212
239
@ Substitute
213
240
private URL findResource (Target_java_lang_module_ModuleReference mref , String name ) {
214
- return null ;
241
+ return ResourcesHelper . nameToResourceURL ( name ) ;
215
242
}
216
243
217
244
@ Substitute
218
245
private URL findResourceOnClassPath (String name ) {
219
- return Resources . createURL (name );
246
+ return ResourcesHelper . nameToResourceURL (name );
220
247
}
221
248
222
249
@ Substitute
223
250
private Enumeration <URL > findResourcesOnClassPath (String name ) {
224
- Enumeration <URL > urls = Resources .createURLs (name );
225
- List <URL > resourceURLs = new ArrayList <>();
226
- while (urls .hasMoreElements ()) {
227
- resourceURLs .add (urls .nextElement ());
228
- }
229
- return Collections .enumeration (resourceURLs );
251
+ return ResourcesHelper .nameToResourceEnumerationURLs (name );
230
252
}
231
253
}
232
254
233
- /**
234
- * The Loader is loading resources from modules. Currently, we are supporting resource loading only
235
- * from the classpath. Once we get the full module support, we will need to reimplement this class.
236
- * This method is a root of substitution, so we only need to return null here.
237
- */
238
255
@ TargetClass (className = "jdk.internal.loader.Loader" , onlyWith = JDK11OrLater .class )
239
256
@ SuppressWarnings ({"unused" , "static-method" })
240
257
final class Target_jdk_internal_loader_Loader {
241
258
242
259
@ Substitute
243
260
protected URL findResource (String mn , String name ) {
244
- return null ;
261
+ return ResourcesHelper .nameToResourceURL (name );
262
+ }
263
+
264
+ @ Substitute
265
+ public URL findResource (String name ) {
266
+ return ResourcesHelper .nameToResourceURL (name );
267
+ }
268
+
269
+ @ Substitute
270
+ public Enumeration <URL > findResources (String name ) {
271
+ return ResourcesHelper .nameToResourceEnumerationURLs (name );
272
+ }
273
+
274
+ @ Substitute
275
+ public URL getResource (String name ) {
276
+ return ResourcesHelper .nameToResourceURL (name );
277
+ }
278
+
279
+ @ Substitute
280
+ public Enumeration <URL > getResources (String name ) throws IOException {
281
+ return ResourcesHelper .nameToResourceEnumerationURLs (name );
282
+ }
283
+
284
+ @ Substitute
285
+ private List <URL > findResourcesAsList (String name ) {
286
+ return ResourcesHelper .nameToResourceListURLs (name );
245
287
}
246
288
}
247
289
0 commit comments