< 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 >