34 import java.io.UncheckedIOException;
35 import java.nio.ByteBuffer;
36 import java.util.Collection;
37 import java.util.HashSet;
38 import java.util.Map;
39 import java.util.Optional;
40 import java.util.Set;
41 import java.util.stream.Collectors;
42 import jdk.tools.jlink.plugin.PluginException;
43 import jdk.tools.jlink.plugin.ResourcePool;
44 import jdk.tools.jlink.plugin.ResourcePoolEntry;
45 import jdk.tools.jlink.plugin.ResourcePoolModule;
46
47 final class ResourcePoolConfiguration {
48 private ResourcePoolConfiguration() {}
49
50 private static ModuleDescriptor descriptorOf(ResourcePoolModule mod) {
51 ModuleDescriptor md = mod.descriptor();
52
53 // drop hashes
54 ModuleDescriptor.Builder builder = ModuleDescriptor.module(md.name());
55 md.requires().stream()
56 .forEach(builder::requires);
57 md.exports().stream()
58 .forEach(builder::exports);
59 md.opens().stream()
60 .forEach(builder::opens);
61 md.uses().stream()
62 .forEach(builder::uses);
63 md.provides().stream()
64 .forEach(builder::provides);
65
66 // build the proper concealed packages
67 Set<String> concealed = new HashSet<>(mod.packages());
68 md.exports().stream().map(ModuleDescriptor.Exports::source).forEach(concealed::remove);
69 md.opens().stream().map(ModuleDescriptor.Opens::source).forEach(concealed::remove);
70 concealed.stream().forEach(builder::contains);
71
72 md.version().ifPresent(builder::version);
73 md.mainClass().ifPresent(builder::mainClass);
74 md.osName().ifPresent(builder::osName);
75 md.osArch().ifPresent(builder::osArch);
76 md.osVersion().ifPresent(builder::osVersion);
77
78 return builder.build();
79 }
80
81 private static ModuleReference moduleReference(ModuleDescriptor desc) {
82 return new ModuleReference(desc, null) {
83 @Override
84 public ModuleReader open() {
85 throw new UnsupportedOperationException();
86 }
87 };
88 }
89
90 private static Map<String, ModuleReference> allModRefs(ResourcePool pool) {
107 });
108 }
109
110 static Configuration validate(ResourcePool pool) {
111 checkPackages(pool);
112 final Map<String, ModuleReference> nameToModRef = allModRefs(pool);
113 final Set<ModuleReference> allRefs = new HashSet<>(nameToModRef.values());
114
115 final ModuleFinder finder = new ModuleFinder() {
116 @Override
117 public Optional<ModuleReference> find(String name) {
118 return Optional.ofNullable(nameToModRef.get(name));
119 }
120
121 @Override
122 public Set<ModuleReference> findAll() {
123 return allRefs;
124 }
125 };
126
127 return Configuration.empty().resolveRequires(
128 finder, ModuleFinder.of(), nameToModRef.keySet());
129 }
130 }
|
34 import java.io.UncheckedIOException;
35 import java.nio.ByteBuffer;
36 import java.util.Collection;
37 import java.util.HashSet;
38 import java.util.Map;
39 import java.util.Optional;
40 import java.util.Set;
41 import java.util.stream.Collectors;
42 import jdk.tools.jlink.plugin.PluginException;
43 import jdk.tools.jlink.plugin.ResourcePool;
44 import jdk.tools.jlink.plugin.ResourcePoolEntry;
45 import jdk.tools.jlink.plugin.ResourcePoolModule;
46
47 final class ResourcePoolConfiguration {
48 private ResourcePoolConfiguration() {}
49
50 private static ModuleDescriptor descriptorOf(ResourcePoolModule mod) {
51 ModuleDescriptor md = mod.descriptor();
52
53 // drop hashes
54 ModuleDescriptor.Builder builder = ModuleDescriptor.newModule(md.name());
55 md.requires().stream()
56 .forEach(builder::requires);
57 md.exports().stream()
58 .forEach(builder::exports);
59 md.opens().stream()
60 .forEach(builder::opens);
61 md.uses().stream()
62 .forEach(builder::uses);
63 md.provides().stream()
64 .forEach(builder::provides);
65 builder.packages(md.packages());
66
67 md.version().ifPresent(builder::version);
68 md.mainClass().ifPresent(builder::mainClass);
69 md.osName().ifPresent(builder::osName);
70 md.osArch().ifPresent(builder::osArch);
71 md.osVersion().ifPresent(builder::osVersion);
72
73 return builder.build();
74 }
75
76 private static ModuleReference moduleReference(ModuleDescriptor desc) {
77 return new ModuleReference(desc, null) {
78 @Override
79 public ModuleReader open() {
80 throw new UnsupportedOperationException();
81 }
82 };
83 }
84
85 private static Map<String, ModuleReference> allModRefs(ResourcePool pool) {
102 });
103 }
104
105 static Configuration validate(ResourcePool pool) {
106 checkPackages(pool);
107 final Map<String, ModuleReference> nameToModRef = allModRefs(pool);
108 final Set<ModuleReference> allRefs = new HashSet<>(nameToModRef.values());
109
110 final ModuleFinder finder = new ModuleFinder() {
111 @Override
112 public Optional<ModuleReference> find(String name) {
113 return Optional.ofNullable(nameToModRef.get(name));
114 }
115
116 @Override
117 public Set<ModuleReference> findAll() {
118 return allRefs;
119 }
120 };
121
122 return Configuration.empty().resolve(
123 finder, ModuleFinder.of(), nameToModRef.keySet());
124 }
125 }
|