< prev index next >

src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ResourcePoolManager.java

Print this page

        

*** 33,43 **** import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.stream.Stream; import jdk.internal.jimage.decompressor.CompressedResourceHeader; ! import jdk.internal.loader.ResourceHelper; import jdk.tools.jlink.plugin.ResourcePool; import jdk.tools.jlink.plugin.ResourcePoolBuilder; import jdk.tools.jlink.plugin.ResourcePoolEntry; import jdk.tools.jlink.plugin.ResourcePoolModule; import jdk.tools.jlink.plugin.ResourcePoolModuleView; --- 33,46 ---- import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.stream.Stream; import jdk.internal.jimage.decompressor.CompressedResourceHeader; ! import jdk.internal.module.Resources; ! import jdk.internal.module.ModuleInfo; ! import jdk.internal.module.ModuleInfo.Attributes; ! import jdk.internal.module.ModuleTarget; import jdk.tools.jlink.plugin.ResourcePool; import jdk.tools.jlink.plugin.ResourcePoolBuilder; import jdk.tools.jlink.plugin.ResourcePoolEntry; import jdk.tools.jlink.plugin.ResourcePoolModule; import jdk.tools.jlink.plugin.ResourcePoolModuleView;
*** 45,83 **** /** * A manager for pool of resources. */ public class ResourcePoolManager { ! // utility to read ModuleDescriptor of the given ResourcePoolModule ! static ModuleDescriptor readModuleDescriptor(ResourcePoolModule mod) { String p = "/" + mod.name() + "/module-info.class"; Optional<ResourcePoolEntry> content = mod.findEntry(p); if (!content.isPresent()) { throw new PluginException("module-info.class not found for " + mod.name() + " module"); } ByteBuffer bb = ByteBuffer.wrap(content.get().contentBytes()); try { ! return ModuleDescriptor.read(bb); } catch (RuntimeException re) { ! throw new RuntimeException("module descriptor cannot be read for " + mod.name(), re); } } /** * Returns true if a resource has an effective package. */ public static boolean isNamedPackageResource(String path) { return (path.endsWith(".class") && !path.endsWith("module-info.class")) || ! !ResourceHelper.isSimpleResource(path); } class ResourcePoolModuleImpl implements ResourcePoolModule { final Map<String, ResourcePoolEntry> moduleContent = new LinkedHashMap<>(); // lazily initialized private ModuleDescriptor descriptor; final String name; private ResourcePoolModuleImpl(String name) { this.name = name; } --- 48,88 ---- /** * A manager for pool of resources. */ public class ResourcePoolManager { ! // utility to read Module Attributes of the given ResourcePoolModule ! static Attributes readModuleAttributes(ResourcePoolModule mod) { String p = "/" + mod.name() + "/module-info.class"; Optional<ResourcePoolEntry> content = mod.findEntry(p); if (!content.isPresent()) { throw new PluginException("module-info.class not found for " + mod.name() + " module"); } ByteBuffer bb = ByteBuffer.wrap(content.get().contentBytes()); try { ! return ModuleInfo.read(bb, null); } catch (RuntimeException re) { ! throw new RuntimeException("module info cannot be read for " + mod.name(), re); } } /** * Returns true if a resource has an effective package. */ public static boolean isNamedPackageResource(String path) { return (path.endsWith(".class") && !path.endsWith("module-info.class")) || ! Resources.canEncapsulate(path); } class ResourcePoolModuleImpl implements ResourcePoolModule { final Map<String, ResourcePoolEntry> moduleContent = new LinkedHashMap<>(); // lazily initialized private ModuleDescriptor descriptor; + private ModuleTarget target; + final String name; private ResourcePoolModuleImpl(String name) { this.name = name; }
*** 98,114 **** return Optional.ofNullable(moduleContent.get(path)); } @Override public ModuleDescriptor descriptor() { ! if (descriptor == null) { ! descriptor = readModuleDescriptor(this); ! } return descriptor; } @Override public Set<String> packages() { Set<String> pkgs = new HashSet<>(); moduleContent.values().stream() .filter(m -> m.type() == ResourcePoolEntry.Type.CLASS_OR_RESOURCE) .forEach(res -> { --- 103,137 ---- return Optional.ofNullable(moduleContent.get(path)); } @Override public ModuleDescriptor descriptor() { ! initModuleAttributes(); return descriptor; } @Override + public String osName() { + initModuleAttributes(); + return target != null? target.osName() : null; + } + + @Override + public String osArch() { + initModuleAttributes(); + return target != null? target.osArch() : null; + } + + private void initModuleAttributes() { + if (this.descriptor == null) { + Attributes attr = readModuleAttributes(this); + this.descriptor = attr.descriptor(); + this.target = attr.target(); + } + } + + @Override public Set<String> packages() { Set<String> pkgs = new HashSet<>(); moduleContent.values().stream() .filter(m -> m.type() == ResourcePoolEntry.Type.CLASS_OR_RESOURCE) .forEach(res -> {
< prev index next >