8182742: ClassLoader.getResourceXXX throws NPE when ClassLoader created by defineModulesWithXXX

Reviewed-by: redestad, mchung
This commit is contained in:
Alan Bateman 2017-12-06 08:36:09 +00:00
parent d26e4ff9b5
commit 7e9984c112
2 changed files with 71 additions and 67 deletions

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -28,7 +28,6 @@ package jdk.internal.loader;
import java.io.File;
import java.io.FilePermission;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.lang.module.Configuration;
import java.lang.module.ModuleDescriptor;
import java.lang.module.ModuleReader;
@ -58,12 +57,8 @@ import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
import jdk.internal.misc.SharedSecrets;
import jdk.internal.module.Resources;
@ -403,12 +398,15 @@ public final class Loader extends SecureClassLoader {
// this loader
URL url = findResource(name);
if (url != null) {
return url;
} else {
if (url == null) {
// parent loader
return parent.getResource(name);
if (parent != null) {
url = parent.getResource(name);
} else {
url = BootLoader.findResource(name);
}
}
return url;
}
@Override
@ -419,7 +417,12 @@ public final class Loader extends SecureClassLoader {
List<URL> urls = findResourcesAsList(name);
// parent loader
Enumeration<URL> e = parent.getResources(name);
Enumeration<URL> e;
if (parent != null) {
e = parent.getResources(name);
} else {
e = BootLoader.findResources(name);
}
// concat the URLs with the URLs returned by the parent
return new Enumeration<>() {
@ -439,25 +442,6 @@ public final class Loader extends SecureClassLoader {
};
}
@Override
public Stream<URL> resources(String name) {
Objects.requireNonNull(name);
// ordering not specified
int characteristics = (Spliterator.NONNULL | Spliterator.IMMUTABLE |
Spliterator.SIZED | Spliterator.SUBSIZED);
Supplier<Spliterator<URL>> supplier = () -> {
try {
List<URL> urls = findResourcesAsList(name);
return Spliterators.spliterator(urls, characteristics);
} catch (IOException e) {
throw new UncheckedIOException(e);
}
};
Stream<URL> s1 = StreamSupport.stream(supplier, characteristics, false);
Stream<URL> s2 = parent.resources(name);
return Stream.concat(s1, s2);
}
/**
* Finds the resources with the given name in this class loader.
*/