Skip to content

Commit df7c41a

Browse files
authored
Merge pull request #16 from iherasymenko/master
Prevent duplicates in ModuleInfo DSL
2 parents ca6010f + 88900e7 commit df7c41a

File tree

4 files changed

+23
-48
lines changed

4 files changed

+23
-48
lines changed

README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,6 @@ extraJavaModuleInfo {
9696
ignoreServiceProvider("org.codehaus.groovy.runtime.ExtensionModule")
9797
ignoreServiceProvider("org.codehaus.groovy.plugins.Runners")
9898
ignoreServiceProvider("org.codehaus.groovy.source.Extensions")
99-
ignoreServiceProvider("org.codehaus.groovy.source.Extensions")
10099
}
101100
}
102101
```

src/functionalTest/groovy/de/jjohannes/gradle/javamodules/test/ExtraJavaModuleInfoTest.groovy

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,6 @@ class ExtraJavaModuleInfoTest extends Specification {
419419
ignoreServiceProvider("org.codehaus.groovy.runtime.ExtensionModule")
420420
ignoreServiceProvider("org.codehaus.groovy.plugins.Runners")
421421
ignoreServiceProvider("org.codehaus.groovy.source.Extensions")
422-
ignoreServiceProvider("org.codehaus.groovy.source.Extensions")
423422
}
424423
}
425424

src/main/java/de/jjohannes/gradle/javamodules/ExtraModuleInfoTransform.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -200,24 +200,24 @@ private static String[] extractImplementations(byte[] content) {
200200
private static byte[] addModuleInfo(ModuleInfo moduleInfo, Map<String, String[]> providers) {
201201
ClassWriter classWriter = new ClassWriter(0);
202202
classWriter.visit(Opcodes.V9, Opcodes.ACC_MODULE, "module-info", null, null, null);
203-
ModuleVisitor moduleVisitor = classWriter.visitModule(moduleInfo.getModuleName(), Opcodes.ACC_OPEN, moduleInfo.getModuleVersion());
204-
for (String packageName : moduleInfo.getExports()) {
203+
ModuleVisitor moduleVisitor = classWriter.visitModule(moduleInfo.moduleName, Opcodes.ACC_OPEN, moduleInfo.moduleVersion);
204+
for (String packageName : moduleInfo.exports) {
205205
moduleVisitor.visitExport(packageName.replace('.', '/'), 0);
206206
}
207207
moduleVisitor.visitRequire("java.base", 0, null);
208-
for (String requireName : moduleInfo.getRequires()) {
208+
for (String requireName : moduleInfo.requires) {
209209
moduleVisitor.visitRequire(requireName, 0, null);
210210
}
211-
for (String requireName : moduleInfo.getRequiresTransitive()) {
211+
for (String requireName : moduleInfo.requiresTransitive) {
212212
moduleVisitor.visitRequire(requireName, Opcodes.ACC_TRANSITIVE, null);
213213
}
214-
for (String requireName : moduleInfo.getRequiresStatic()) {
214+
for (String requireName : moduleInfo.requiresStatic) {
215215
moduleVisitor.visitRequire(requireName, Opcodes.ACC_STATIC_PHASE, null);
216216
}
217217
for (Map.Entry<String, String[]> entry : providers.entrySet()) {
218218
String name = entry.getKey();
219219
String[] implementations = entry.getValue();
220-
if (!moduleInfo.getIgnoredServiceProviders().contains(name)) {
220+
if (!moduleInfo.ignoreServiceProviders.contains(name)) {
221221
moduleVisitor.visitProvide(name.replace('.', '/'), implementations);
222222
}
223223
}

src/main/java/de/jjohannes/gradle/javamodules/ModuleInfo.java

Lines changed: 17 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -16,74 +16,51 @@
1616
package de.jjohannes.gradle.javamodules;
1717

1818
import java.io.Serializable;
19-
import java.util.ArrayList;
2019
import java.util.LinkedHashSet;
21-
import java.util.List;
2220
import java.util.Set;
2321

2422
/**
2523
* Data class to hold the information that should be added as module-info.class to an existing Jar file.
2624
*/
2725
public class ModuleInfo implements Serializable {
28-
private String moduleName;
29-
private String moduleVersion;
30-
private List<String> exports = new ArrayList<>();
31-
private List<String> requires = new ArrayList<>();
32-
private List<String> requiresTransitive = new ArrayList<>();
33-
private List<String> requiresStatic = new ArrayList<>();
34-
private Set<String> ignoredServiceProviders = new LinkedHashSet<>();
26+
27+
final String moduleName;
28+
final String moduleVersion;
29+
final Set<String> exports = new LinkedHashSet<>();
30+
final Set<String> requires = new LinkedHashSet<>();
31+
final Set<String> requiresTransitive = new LinkedHashSet<>();
32+
final Set<String> requiresStatic = new LinkedHashSet<>();
33+
final Set<String> ignoreServiceProviders = new LinkedHashSet<>();
3534

3635
ModuleInfo(String moduleName, String moduleVersion) {
3736
this.moduleName = moduleName;
3837
this.moduleVersion = moduleVersion;
3938
}
4039

4140
public void exports(String exports) {
42-
this.exports.add(exports);
41+
addOrThrow(this.exports, exports);
4342
}
4443

4544
public void requires(String requires) {
46-
this.requires.add(requires);
45+
addOrThrow(this.requires, requires);
4746
}
4847

4948
public void requiresTransitive(String requiresTransitive) {
50-
this.requiresTransitive.add(requiresTransitive);
49+
addOrThrow(this.requiresTransitive, requiresTransitive);
5150
}
5251

5352
public void requiresStatic(String requiresStatic) {
54-
this.requiresStatic.add(requiresStatic);
53+
addOrThrow(this.requiresStatic, requiresStatic);
5554
}
5655

5756
public void ignoreServiceProvider(String ignoreServiceProvider) {
58-
this.ignoredServiceProviders.add(ignoreServiceProvider);
59-
}
60-
61-
public String getModuleName() {
62-
return moduleName;
63-
}
64-
65-
protected String getModuleVersion() {
66-
return moduleVersion;
67-
}
68-
69-
protected List<String> getExports() {
70-
return exports;
71-
}
72-
73-
protected List<String> getRequires() {
74-
return requires;
75-
}
76-
77-
protected List<String> getRequiresTransitive() {
78-
return requiresTransitive;
79-
}
80-
81-
protected List<String> getRequiresStatic() {
82-
return requiresStatic;
57+
addOrThrow(this.ignoreServiceProviders, ignoreServiceProvider);
8358
}
8459

85-
protected Set<String> getIgnoredServiceProviders() {
86-
return ignoredServiceProviders;
60+
private static void addOrThrow(Set<String> target, String element) {
61+
if (!target.add(element)) {
62+
throw new IllegalArgumentException("The element '" + element + "' is already specified");
63+
}
8764
}
8865

8966
}

0 commit comments

Comments
 (0)