< prev index next >
src/java.base/share/classes/jdk/internal/module/ModulePatcher.java
Print this page
*** 53,63 ****
import java.util.jar.JarFile;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import jdk.internal.loader.Resource;
- import jdk.internal.loader.ResourceHelper;
import jdk.internal.misc.JavaLangModuleAccess;
import jdk.internal.misc.SharedSecrets;
import sun.net.www.ParseUtil;
--- 53,62 ----
*** 163,175 ****
}
descriptor.provides().forEach(builder::provides);
descriptor.version().ifPresent(builder::version);
descriptor.mainClass().ifPresent(builder::mainClass);
- descriptor.osName().ifPresent(builder::osName);
- descriptor.osArch().ifPresent(builder::osArch);
- descriptor.osVersion().ifPresent(builder::osVersion);
// original + new packages
builder.packages(descriptor.packages());
builder.packages(packages);
--- 162,171 ----
*** 177,198 ****
--- 173,197 ----
}
// return a module reference to the patched module
URI location = mref.location().orElse(null);
+ ModuleTarget target = null;
ModuleHashes recordedHashes = null;
ModuleResolution mres = null;
if (mref instanceof ModuleReferenceImpl) {
ModuleReferenceImpl impl = (ModuleReferenceImpl)mref;
+ target = impl.moduleTarget();
recordedHashes = impl.recordedHashes();
mres = impl.moduleResolution();
}
return new ModuleReferenceImpl(descriptor,
location,
() -> new PatchedModuleReader(paths, mref),
this,
+ target,
recordedHashes,
null,
mres);
}
*** 224,234 ****
private final ModuleReference mref;
private final URL delegateCodeSourceURL;
private volatile ModuleReader delegate;
/**
! * Creates the ModuleReader to reads resources a patched module.
*/
PatchedModuleReader(List<Path> patches, ModuleReference mref) {
List<ResourceFinder> finders = new ArrayList<>();
boolean initialized = false;
try {
--- 223,233 ----
private final ModuleReference mref;
private final URL delegateCodeSourceURL;
private volatile ModuleReader delegate;
/**
! * Creates the ModuleReader to reads resources in a patched module.
*/
PatchedModuleReader(List<Path> patches, ModuleReference mref) {
List<ResourceFinder> finders = new ArrayList<>();
boolean initialized = false;
try {
*** 289,306 ****
}
return r;
}
/**
! * Finds a resources in the patch locations. Returns null if not found.
*/
private Resource findResourceInPatch(String name) throws IOException {
for (ResourceFinder finder : finders) {
Resource r = finder.find(name);
if (r != null)
return r;
}
return null;
}
/**
* Finds a resource of the given name in the patched module.
--- 288,308 ----
}
return r;
}
/**
! * Finds a resources in the patch locations. Returns null if not found
! * or the name is "module-info.class" as that cannot be overridden.
*/
private Resource findResourceInPatch(String name) throws IOException {
+ if (!name.equals("module-info.class")) {
for (ResourceFinder finder : finders) {
Resource r = finder.find(name);
if (r != null)
return r;
}
+ }
return null;
}
/**
* Finds a resource of the given name in the patched module.
*** 476,488 ****
};
}
@Override
public Stream<String> list() throws IOException {
! return jf.stream()
! .filter(e -> !e.isDirectory())
! .map(JarEntry::getName);
}
}
/**
--- 478,488 ----
};
}
@Override
public Stream<String> list() throws IOException {
! return jf.stream().map(JarEntry::getName);
}
}
/**
*** 498,516 ****
@Override
public void close() { }
@Override
public Resource find(String name) throws IOException {
! Path path = ResourceHelper.toFilePath(name);
! if (path != null) {
! Path file = dir.resolve(path);
! if (Files.isRegularFile(file)) {
return newResource(name, dir, file);
! }
! }
return null;
}
private Resource newResource(String name, Path top, Path file) {
return new Resource() {
@Override
public String getName() {
--- 498,514 ----
@Override
public void close() { }
@Override
public Resource find(String name) throws IOException {
! Path file = Resources.toFilePath(dir, name);
! if (file != null) {
return newResource(name, dir, file);
! } else {
return null;
}
+ }
private Resource newResource(String name, Path top, Path file) {
return new Resource() {
@Override
public String getName() {
*** 548,562 ****
};
}
@Override
public Stream<String> list() throws IOException {
! return Files.find(dir, Integer.MAX_VALUE,
! (path, attrs) -> attrs.isRegularFile())
! .map(f -> dir.relativize(f)
! .toString()
! .replace(File.separatorChar, '/'));
}
}
/**
--- 546,558 ----
};
}
@Override
public Stream<String> list() throws IOException {
! return Files.walk(dir, Integer.MAX_VALUE)
! .map(f -> Resources.toResourceName(dir, f))
! .filter(s -> s.length() > 0);
}
}
/**
< prev index next >