1 package org.codehaus.plexus.languages.java.jpms;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.io.IOException;
24 import java.nio.file.Path;
25 import java.util.ArrayList;
26 import java.util.LinkedHashSet;
27 import java.util.List;
28 import java.util.Set;
29
30 import com.thoughtworks.qdox.JavaProjectBuilder;
31 import com.thoughtworks.qdox.model.JavaClass;
32 import com.thoughtworks.qdox.model.JavaModule;
33 import com.thoughtworks.qdox.model.JavaModuleDescriptor;
34
35
36
37
38
39
40
41 class SourceModuleInfoParser {
42
43 public org.codehaus.plexus.languages.java.jpms.JavaModuleDescriptor fromSourcePath(Path modulePath)
44 throws IOException {
45 File moduleDescriptor = modulePath.toFile();
46
47 org.codehaus.plexus.languages.java.jpms.JavaModuleDescriptor.Builder builder;
48 if (moduleDescriptor.exists()) {
49 JavaModuleDescriptor descriptor = new JavaProjectBuilder()
50 .addSourceFolder(moduleDescriptor.getParentFile())
51 .getDescriptor();
52
53 builder = org.codehaus.plexus.languages.java.jpms.JavaModuleDescriptor.newModule(descriptor.getName());
54
55 for (JavaModuleDescriptor.JavaRequires requires : descriptor.getRequires()) {
56 if (requires.isStatic() || requires.isTransitive()) {
57 Set<org.codehaus.plexus.languages.java.jpms.JavaModuleDescriptor.JavaRequires.JavaModifier>
58 modifiers = new LinkedHashSet<>(2);
59 if (requires.isStatic()) {
60 modifiers.add(
61 org.codehaus.plexus.languages.java.jpms.JavaModuleDescriptor.JavaRequires.JavaModifier
62 .STATIC);
63 }
64 if (requires.isTransitive()) {
65 modifiers.add(
66 org.codehaus.plexus.languages.java.jpms.JavaModuleDescriptor.JavaRequires.JavaModifier
67 .TRANSITIVE);
68 }
69 builder.requires(modifiers, requires.getModule().getName());
70 } else {
71 builder.requires(requires.getModule().getName());
72 }
73 }
74
75 for (JavaModuleDescriptor.JavaExports exports : descriptor.getExports()) {
76 if (exports.getTargets().isEmpty()) {
77 builder.exports(exports.getSource().getName());
78 } else {
79 Set<String> targets = new LinkedHashSet<>();
80 for (JavaModule module : exports.getTargets()) {
81 targets.add(module.getName());
82 }
83 builder.exports(exports.getSource().getName(), targets);
84 }
85 }
86
87 for (JavaModuleDescriptor.JavaUses uses : descriptor.getUses()) {
88 builder.uses(uses.getService().getName());
89 }
90
91 for (JavaModuleDescriptor.JavaProvides provides : descriptor.getProvides()) {
92 List<String> providers = new ArrayList<>(provides.getProviders().size());
93 for (JavaClass provider : provides.getProviders()) {
94 providers.add(provider.getName());
95 }
96
97 builder.provides(provides.getService().getName(), providers);
98 }
99 } else {
100 builder = org.codehaus.plexus.languages.java.jpms.JavaModuleDescriptor.newAutomaticModule(null);
101 }
102
103 return builder.build();
104 }
105 }