< prev index next >
src/java.base/share/classes/jdk/internal/module/ModuleReferences.java
Print this page
*** 49,58 ****
--- 49,59 ----
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.zip.ZipFile;
import jdk.internal.jmod.JmodFile;
+ import jdk.internal.loader.ResourceHelper;
import jdk.internal.misc.JavaLangAccess;
import jdk.internal.misc.SharedSecrets;
import jdk.internal.module.ModuleHashes.HashSupplier;
import jdk.internal.util.jar.VersionedStream;
import sun.net.www.ParseUtil;
*** 241,251 ****
this.jf = newJarFile(path);
this.uri = uri;
}
private JarEntry getEntry(String name) {
! return jf.getJarEntry(Objects.requireNonNull(name));
}
@Override
Optional<URI> implFind(String name) throws IOException {
JarEntry je = getEntry(name);
--- 242,253 ----
this.jf = newJarFile(path);
this.uri = uri;
}
private JarEntry getEntry(String name) {
! JarEntry entry = jf.getJarEntry(Objects.requireNonNull(name));
! return (entry == null || entry.isDirectory()) ? null : entry;
}
@Override
Optional<URI> implFind(String name) throws IOException {
JarEntry je = getEntry(name);
*** 368,403 ****
boolean unused = Files.isDirectory(dir);
}
}
/**
- * Returns a Path to access to the given resource.
- */
- private Path toPath(String name) {
- Path path = Paths.get(name.replace('/', File.separatorChar));
- if (path.getRoot() == null) {
- return dir.resolve(path);
- } else {
- // drop the root component so that the resource is
- // located relative to the module directory
- int n = path.getNameCount();
- return (n > 0) ? dir.resolve(path.subpath(0, n)) : null;
- }
- }
-
- /**
* Throws IOException if the module reader is closed;
*/
private void ensureOpen() throws IOException {
if (closed) throw new IOException("ModuleReader is closed");
}
@Override
public Optional<URI> find(String name) throws IOException {
ensureOpen();
! Path path = toPath(name);
! if (path != null && Files.isRegularFile(path)) {
try {
return Optional.of(path.toUri());
} catch (IOError e) {
throw (IOException) e.getCause();
}
--- 370,406 ----
boolean unused = Files.isDirectory(dir);
}
}
/**
* Throws IOException if the module reader is closed;
*/
private void ensureOpen() throws IOException {
if (closed) throw new IOException("ModuleReader is closed");
}
+ /**
+ * Returns a Path to access the given resource. Returns null if the
+ * resource name does not convert to a file path that locates a regular
+ * file in the module.
+ */
+ private Path toFilePath(String name) {
+ Path path = ResourceHelper.toFilePath(name);
+ if (path != null) {
+ Path file = dir.resolve(path);
+ if (Files.isRegularFile(file)) {
+ return file;
+ }
+ }
+ return null;
+ }
+
@Override
public Optional<URI> find(String name) throws IOException {
ensureOpen();
! Path path = toFilePath(name);
! if (path != null) {
try {
return Optional.of(path.toUri());
} catch (IOError e) {
throw (IOException) e.getCause();
}
*** 407,429 ****
}
@Override
public Optional<InputStream> open(String name) throws IOException {
ensureOpen();
! Path path = toPath(name);
! if (path != null && Files.isRegularFile(path)) {
return Optional.of(Files.newInputStream(path));
} else {
return Optional.empty();
}
}
@Override
public Optional<ByteBuffer> read(String name) throws IOException {
ensureOpen();
! Path path = toPath(name);
! if (path != null && Files.isRegularFile(path)) {
return Optional.of(ByteBuffer.wrap(Files.readAllBytes(path)));
} else {
return Optional.empty();
}
}
--- 410,432 ----
}
@Override
public Optional<InputStream> open(String name) throws IOException {
ensureOpen();
! Path path = toFilePath(name);
! if (path != null) {
return Optional.of(Files.newInputStream(path));
} else {
return Optional.empty();
}
}
@Override
public Optional<ByteBuffer> read(String name) throws IOException {
ensureOpen();
! Path path = toFilePath(name);
! if (path != null) {
return Optional.of(ByteBuffer.wrap(Files.readAllBytes(path)));
} else {
return Optional.empty();
}
}
< prev index next >