Skip to content

Commit 6b6a4c8

Browse files
committed
Merge branch 'big-andy-coates-issue_211'
2 parents 8a43251 + c8cf42b commit 6b6a4c8

File tree

6 files changed

+121
-10
lines changed

6 files changed

+121
-10
lines changed

src/main/java/org/javamodularity/moduleplugin/tasks/CompileTestTask.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ public void configureCompileTestJava() {
3434
});
3535
}
3636

37+
@SuppressWarnings("Convert2Lambda")
3738
private void configureCompileTestJava(JavaCompile compileTestJava) {
3839
if(GradleVersion.current().compareTo(GradleVersion.version("6.4")) >= 0) {
3940
compileTestJava.getModularity().getInferModulePath().set(false);
@@ -44,7 +45,7 @@ private void configureCompileTestJava(JavaCompile compileTestJava) {
4445
LOGGER.info(compileTestJava.getName() + ".compileOnClasspath: {}", moduleOptions.isCompileOnClasspath());
4546
if(!moduleOptions.isCompileOnClasspath()) {
4647
// don't convert to lambda: https://github.com/java9-modularity/gradle-modules-plugin/issues/54
47-
compileTestJava.doFirst(new Action<Task>() {
48+
compileTestJava.doFirst(new Action<>() {
4849
@Override
4950
public void execute(Task task) {
5051
var compilerArgs = buildCompilerArgs(compileTestJava, moduleOptions);
@@ -86,7 +87,7 @@ private List<String> buildCompilerArgs(
8687

8788
patchModuleContainer.mutator(classpath).mutateArgs(compilerArgs);
8889

89-
ModuleInfoTestHelper.mutateArgs(project, compilerArgs::add);
90+
ModuleInfoTestHelper.mutateArgs(project, true, compilerArgs::add);
9091

9192
return compilerArgs;
9293
}

src/main/java/org/javamodularity/moduleplugin/tasks/ModuleInfoTestHelper.java

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,17 @@
88
import java.io.IOException;
99
import java.io.UncheckedIOException;
1010
import java.nio.file.Files;
11+
import java.util.Iterator;
12+
import java.util.List;
1113
import java.util.function.Consumer;
14+
import java.util.stream.Collectors;
15+
import java.util.stream.Stream;
1216

1317
class ModuleInfoTestHelper {
1418

1519
private static final Logger LOGGER = Logging.getLogger(ModuleInfoTestHelper.class);
1620

17-
static void mutateArgs(Project project, Consumer<String> consumer) {
21+
static void mutateArgs(Project project, boolean excludeOpens, Consumer<String> consumer) {
1822
JavaProjectHelper helper = new JavaProjectHelper(project);
1923

2024
String moduleName = helper.moduleName();
@@ -29,13 +33,42 @@ static void mutateArgs(Project project, Consumer<String> consumer) {
2933
var moduleInfoTestPath = files.getSingleFile().toPath();
3034
LOGGER.info("Using lines of '{}' to patch module {}...", moduleInfoTestPath, moduleName);
3135
try (var lines = Files.lines(moduleInfoTestPath)) {
32-
lines.map(String::trim)
33-
.filter(line -> !line.isEmpty())
34-
.filter(line -> !line.startsWith("//"))
35-
.peek(line -> LOGGER.debug(" {}", line))
36-
.forEach(consumer);
36+
consumeLines(lines, excludeOpens, consumer);
3737
} catch (IOException e) {
3838
throw new UncheckedIOException("Reading " + moduleInfoTestPath + " failed", e);
3939
}
4040
}
41+
42+
// Visible for testing.
43+
static void consumeLines(Stream<String> s, boolean excludeOpens, Consumer<String> consumer) {
44+
final List<String> lines = s.map(String::trim)
45+
.filter(line -> !line.isBlank())
46+
.filter(line -> !line.startsWith("//"))
47+
.collect(Collectors.toList());
48+
49+
if (excludeOpens) {
50+
excludeOpens(lines);
51+
}
52+
53+
lines.stream()
54+
.peek(line -> LOGGER.debug(" {}", line))
55+
.forEach(consumer);
56+
}
57+
58+
private static void excludeOpens(final List<String> lines) {
59+
final Iterator<String> it = lines.iterator();
60+
while (it.hasNext()) {
61+
final String next = it.next();
62+
if (!next.equals("--add-opens")) {
63+
continue;
64+
}
65+
66+
it.remove();
67+
if (it.hasNext()) {
68+
final String opens = it.next();
69+
LOGGER.debug(" Excluding --add-opens {}", opens);
70+
it.remove();
71+
}
72+
}
73+
}
4174
}

src/main/java/org/javamodularity/moduleplugin/tasks/TestTask.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,15 @@ public void configureTestJava() {
4040
.ifPresent(this::configureTestJava);
4141
}
4242

43+
@SuppressWarnings("Convert2Lambda")
4344
private void configureTestJava(Test testJava) {
4445
var testModuleOptions = testJava.getExtensions().create("moduleOptions", TestModuleOptions.class, project);
4546

4647
if(GradleVersion.current().compareTo(GradleVersion.version("6.4")) >= 0) {
4748
testJava.getModularity().getInferModulePath().set(false);
4849
}
4950
// don't convert to lambda: https://github.com/java9-modularity/gradle-modules-plugin/issues/54
50-
testJava.doFirst(new Action<Task>() {
51+
testJava.doFirst(new Action<>() {
5152
@Override
5253
public void execute(Task task) {
5354
if (testModuleOptions.getRunOnClasspath()) {
@@ -86,7 +87,7 @@ private List<String> buildJvmArgs(Test testJava, TestModuleOptions testModuleOpt
8687
testEngine.additionalTaskOptions.forEach(option -> option.mutateArgs(jvmArgs));
8788
});
8889

89-
ModuleInfoTestHelper.mutateArgs(project, jvmArgs::add);
90+
ModuleInfoTestHelper.mutateArgs(project, false, jvmArgs::add);
9091

9192
return jvmArgs;
9293
}

src/test/java/org/javamodularity/moduleplugin/ModulePluginSmokeTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ void smokeTest(String projectName, GradleVersion gradleVersion) {
8181
assertTasksSuccessful(result, "greeter.provider.testfixture", "build");
8282
}
8383
assertTasksSuccessful(result, "greeter.runner", "build", "run");
84+
assertOutputDoesNotContain(result, "warning: [options] --add-opens has no effect at compile time");
8485
}
8586

8687
@CartesianProductTest(name = "smokeTestRun({arguments})")
@@ -275,6 +276,11 @@ private static void assertTasksSuccessful(BuildResult result, String subprojectN
275276
}
276277
}
277278

279+
private static void assertOutputDoesNotContain(BuildResult result, String text) {
280+
final String output = result.getOutput();
281+
assertFalse(output.contains(text), "Output should not contain '" + text + "', but was: " + output);
282+
}
283+
278284
private static boolean checkCombination(String projectName, GradleVersion gradleVersion) {
279285
final boolean kotlin_NotSupported = projectName.startsWith("test-project-kotlin") && gradleVersion.toString().compareTo("6.4") < 0;
280286
final boolean kotlin1_7_NotSupported = projectName.equals("test-project-kotlin") && gradleVersion.toString().compareTo("6.6") < 0;
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package org.javamodularity.moduleplugin.tasks;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import java.util.ArrayList;
6+
import java.util.List;
7+
import java.util.stream.Stream;
8+
9+
import static org.junit.jupiter.api.Assertions.*;
10+
11+
class ModuleInfoTestHelperTest {
12+
13+
private final List<String> output = new ArrayList<>();
14+
15+
@Test
16+
void shouldFilterOutBlankLines() {
17+
final Stream<String> lines = Stream.of("", " ", "\t");
18+
19+
ModuleInfoTestHelper.consumeLines(lines, false, output::add);
20+
21+
assertEquals(List.of(), output);
22+
}
23+
24+
@Test
25+
void shouldFilterOutCommentLines() {
26+
final Stream<String> lines = Stream.of("// comment", " // indented comment");
27+
28+
ModuleInfoTestHelper.consumeLines(lines, false, output::add);
29+
30+
assertEquals(List.of(), output);
31+
}
32+
33+
@Test
34+
void shouldTrimLines() {
35+
final Stream<String> lines = Stream.of(" a ", "\tb\t");
36+
37+
ModuleInfoTestHelper.consumeLines(lines, false, output::add);
38+
39+
assertEquals(List.of("a", "b"), output);
40+
}
41+
42+
@Test
43+
void shouldNotExcludeOpens() {
44+
final Stream<String> lines = Stream.of("a", "--add-opens", "c");
45+
46+
ModuleInfoTestHelper.consumeLines(lines, false, output::add);
47+
48+
assertEquals(List.of("a", "--add-opens", "c"), output);
49+
}
50+
51+
@Test
52+
void shouldExcludeOpens() {
53+
final Stream<String> lines = Stream.of("a", " --add-opens", "x=y", "c");
54+
55+
ModuleInfoTestHelper.consumeLines(lines, true, output::add);
56+
57+
assertEquals(List.of("a", "c"), output);
58+
}
59+
60+
@Test
61+
void shouldNotBlowUpOnExcludedOpenAtEnd() {
62+
final Stream<String> lines = Stream.of("a", "--add-opens");
63+
64+
ModuleInfoTestHelper.consumeLines(lines, true, output::add);
65+
66+
assertEquals(List.of("a"), output);
67+
}
68+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
--add-opens
2+
java.base/java.lang=greeter.api

0 commit comments

Comments
 (0)