Skip to content

Commit 9931673

Browse files
Changing resource policy.
1 parent ff93e6b commit 9931673

File tree

1 file changed

+79
-37
lines changed

1 file changed

+79
-37
lines changed

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/Target_java_lang_ClassLoader.java

Lines changed: 79 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,15 @@ final class Target_sun_misc_Resource_JDK8OrEarlier {
6969
}
7070

7171
@SuppressWarnings("unchecked")
72-
class URLClassPathHelper {
72+
class ResourcesHelper {
7373

74-
private static <T> T urlToResource(String name, URL url) {
74+
private static <T> T urlToResource(String resourceName, URL url) {
7575
try {
7676
if (url == null) {
7777
return null;
7878
}
7979
URLConnection urlConnection = url.openConnection();
80-
Object resource = JDKVersionSpecificResourceBuilder.buildResource(name, url, urlConnection);
80+
Object resource = JDKVersionSpecificResourceBuilder.buildResource(resourceName, url, urlConnection);
8181
VMError.guarantee(resource != null);
8282
return (T) resource;
8383
} catch (IOException e) {
@@ -87,18 +87,40 @@ private static <T> T urlToResource(String name, URL url) {
8787
}
8888
}
8989

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));
9292
}
9393

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);
9696
List<T> resourceURLs = new ArrayList<>();
9797
while (urls.hasMoreElements()) {
98-
resourceURLs.add(urlToResource(name, urls.nextElement()));
98+
resourceURLs.add(urlToResource(resourceName, urls.nextElement()));
9999
}
100100
return Collections.enumeration(resourceURLs);
101101
}
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+
}
102124
}
103125

104126
@TargetClass(classNameProvider = Package_jdk_internal_loader.class, className = "URLClassPath")
@@ -148,27 +170,27 @@ public Enumeration<URL> findResources(final String name, final boolean check) {
148170
@Substitute
149171
@TargetElement(name = "getResource", onlyWith = JDK11OrLater.class)
150172
public Target_jdk_internal_loader_Resource_JDK11OrLater getResourceJDK11OrLater(String name, boolean check) {
151-
return URLClassPathHelper.nameToResource(name);
173+
return ResourcesHelper.nameToResource(name);
152174
}
153175

154176
@Substitute
155177
@TargetElement(name = "getResources", onlyWith = JDK11OrLater.class)
156178
public Enumeration<Target_jdk_internal_loader_Resource_JDK11OrLater> getResourcesJDK11OrLater(final String name,
157179
final boolean check) {
158-
return URLClassPathHelper.nameToResources(name);
180+
return ResourcesHelper.nameToResources(name);
159181
}
160182

161183
@Substitute
162184
@TargetElement(name = "getResource", onlyWith = JDK8OrEarlier.class)
163185
public Target_sun_misc_Resource_JDK8OrEarlier getResourceJDK8OrEarlier(String name, boolean check) {
164-
return URLClassPathHelper.nameToResource(name);
186+
return ResourcesHelper.nameToResource(name);
165187
}
166188

167189
@Substitute
168190
@TargetElement(name = "getResources", onlyWith = JDK8OrEarlier.class)
169191
public Enumeration<Target_sun_misc_Resource_JDK8OrEarlier> getResourcesJDK8OrEarlier(final String name,
170192
final boolean check) {
171-
return URLClassPathHelper.nameToResources(name);
193+
return ResourcesHelper.nameToResources(name);
172194
}
173195
}
174196

@@ -185,63 +207,83 @@ protected Class<?> findClass(final String name) {
185207
}
186208
}
187209

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-
*/
194210
@TargetClass(className = "jdk.internal.loader.BuiltinClassLoader", onlyWith = JDK11OrLater.class)
195211
@SuppressWarnings({"unused", "static-method"})
196212
final class Target_jdk_internal_loader_BuiltinClassLoader {
197213

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+
}
200218

201219
@Substitute
202220
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);
205232
}
206233

207234
@Substitute
208235
private List<URL> findMiscResource(String name) {
209-
return new ArrayList<>();
236+
return ResourcesHelper.nameToResourceListURLs(name);
210237
}
211238

212239
@Substitute
213240
private URL findResource(Target_java_lang_module_ModuleReference mref, String name) {
214-
return null;
241+
return ResourcesHelper.nameToResourceURL(name);
215242
}
216243

217244
@Substitute
218245
private URL findResourceOnClassPath(String name) {
219-
return Resources.createURL(name);
246+
return ResourcesHelper.nameToResourceURL(name);
220247
}
221248

222249
@Substitute
223250
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);
230252
}
231253
}
232254

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-
*/
238255
@TargetClass(className = "jdk.internal.loader.Loader", onlyWith = JDK11OrLater.class)
239256
@SuppressWarnings({"unused", "static-method"})
240257
final class Target_jdk_internal_loader_Loader {
241258

242259
@Substitute
243260
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);
245287
}
246288
}
247289

0 commit comments

Comments
 (0)