Skip to content

Commit ce285e5

Browse files
Avoid warning about --add-opens from compileTestJava task
fixes: #211 Avoids ``--add-opens has no effect at compile time` warnings when compiling test code by filtering out `--add-opens` entries from the `module-info.test` file when executing the `compileTestJava` task.
1 parent c778dc2 commit ce285e5

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
@@ -57,6 +57,7 @@ void smokeTest(String projectName, String gradleVersion) {
5757
assertTasksSuccessful(result, "greeter.provider.testfixture", "build");
5858
}
5959
assertTasksSuccessful(result, "greeter.runner", "build", "run");
60+
assertOutputDoesNotContain(result, "warning: [options] --add-opens has no effect at compile time");
6061
}
6162

6263
@CartesianProductTest(name = "smokeTestRun({arguments})")
@@ -247,6 +248,11 @@ private static void assertTasksSuccessful(BuildResult result, String subprojectN
247248
}
248249
}
249250

251+
private static void assertOutputDoesNotContain(BuildResult result, String text) {
252+
final String output = result.getOutput();
253+
assertFalse(output.contains(text), "Output should not contain '" + text + "', but was: " + output);
254+
}
255+
250256
private static boolean checkCombination(String projectName, String gradleVersion) {
251257
if(projectName.equals("test-project-kotlin") && gradleVersion.compareTo("6.4") < 0) {
252258
LOGGER.lifecycle("Unsupported combination: {} / Gradle {}. Test skipped", projectName, gradleVersion);
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)