Skip to content

Commit 61d9356

Browse files
committed
Access extension lazily in argument providers
1 parent ddcf456 commit 61d9356

File tree

4 files changed

+48
-25
lines changed

4 files changed

+48
-25
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
org.gradle.caching=true
2-
org.gradle.parallel=true
2+
org.gradle.configuration-cache=true

src/main/java/org/gradlex/javamodule/testing/JavaModuleTestingExtension.java

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,12 @@
1616

1717
package org.gradlex.javamodule.testing;
1818

19-
import org.gradle.api.file.FileCollection;
20-
import org.gradle.testing.base.TestingExtension;
21-
import org.gradlex.javamodule.testing.internal.ModuleInfoParser;
22-
import org.gradlex.javamodule.testing.internal.bridges.JavaModuleDependenciesBridge;
23-
import org.gradlex.javamodule.testing.internal.provider.WhiteboxTestCompileArgumentProvider;
24-
import org.gradlex.javamodule.testing.internal.provider.WhiteboxTestRuntimeArgumentProvider;
2519
import org.gradle.api.Action;
2620
import org.gradle.api.Project;
2721
import org.gradle.api.artifacts.Configuration;
2822
import org.gradle.api.artifacts.ConfigurationContainer;
2923
import org.gradle.api.artifacts.dsl.DependencyHandler;
24+
import org.gradle.api.file.FileCollection;
3025
import org.gradle.api.plugins.jvm.JvmTestSuite;
3126
import org.gradle.api.provider.Provider;
3227
import org.gradle.api.tasks.SourceSet;
@@ -38,6 +33,11 @@
3833
import org.gradle.internal.jvm.JavaModuleDetector;
3934
import org.gradle.jvm.tasks.Jar;
4035
import org.gradle.testing.base.TestSuite;
36+
import org.gradle.testing.base.TestingExtension;
37+
import org.gradlex.javamodule.testing.internal.ModuleInfoParser;
38+
import org.gradlex.javamodule.testing.internal.bridges.JavaModuleDependenciesBridge;
39+
import org.gradlex.javamodule.testing.internal.provider.WhiteboxTestCompileArgumentProvider;
40+
import org.gradlex.javamodule.testing.internal.provider.WhiteboxTestRuntimeArgumentProvider;
4141

4242
import javax.inject.Inject;
4343
import java.io.File;
@@ -71,7 +71,7 @@ public JavaModuleTestingExtension(Project project, JavaModuleDetector moduleDete
7171
/**
7272
* Turn the given JVM Test Suite into a Blackbox Test Suite.
7373
* For example:
74-
*
74+
* <p>
7575
* javaModuleTesting.blackbox(testing.suites["integtest"])
7676
*
7777
* @param jvmTestSuite the JVM Test Suite to configure
@@ -85,11 +85,12 @@ public void blackbox(TestSuite jvmTestSuite) {
8585
/**
8686
* Turn the given JVM Test Suite into a Whitebox Test Suite.
8787
* For example:
88-
*
88+
* <p>
8989
* javaModuleTesting.whitebox(testing.suites["test"])
9090
*
9191
* @param jvmTestSuite the JVM Test Suite to configure
9292
*/
93+
@SuppressWarnings("unused")
9394
public void whitebox(TestSuite jvmTestSuite) {
9495
whitebox(jvmTestSuite, NO_OP_ACTION);
9596
}
@@ -98,9 +99,9 @@ public void whitebox(TestSuite jvmTestSuite) {
9899
* Turn the given JVM Test Suite into a Whitebox Test Suite.
99100
* If needed, configure additional 'requires' and open the
100101
* test packages for reflection.
101-
*
102+
* <p>
102103
* For example, for JUnit 5, you need at least:
103-
*
104+
* <p>
104105
* javaModuleTesting.whitebox(testing.suites["test"]) {
105106
* requires.add("org.junit.jupiter.api")
106107
* opensTo.add("org.junit.platform.commons")
@@ -162,12 +163,13 @@ private void configureJvmTestSuiteForWhitebox(JvmTestSuite jvmTestSuite, Whitebo
162163
compileJava,
163164
syntheticModuleInfoFolders,
164165
moduleDetector,
165-
moduleInfoParser);
166+
moduleInfoParser,
167+
project.getObjects());
166168
compileJava.getOptions().getCompilerArgumentProviders().add(newProvider);
167169
return newProvider;
168170
});
169171
argumentProvider.testRequires(JavaModuleDependenciesBridge.getCompileClasspathModules(project, testSources));
170-
argumentProvider.testRequires(whiteboxJvmTestSuite.getRequires().get());
172+
argumentProvider.testRequires(whiteboxJvmTestSuite.getRequires());
171173
});
172174

173175
tasks.named(testSources.getName(), Test.class, test -> {
@@ -184,13 +186,14 @@ private void configureJvmTestSuiteForWhitebox(JvmTestSuite jvmTestSuite, Whitebo
184186
testSources.getJava().getClassesDirectory(),
185187
sourcesUnderTest.getOutput().getResourcesDir(),
186188
testSources.getOutput().getResourcesDir(),
187-
moduleInfoParser);
189+
moduleInfoParser,
190+
project.getObjects());
188191
test.getJvmArgumentProviders().add(newProvider);
189192
return newProvider;
190193
});
191194
argumentProvider.testRequires(JavaModuleDependenciesBridge.getRuntimeClasspathModules(project, testSources));
192-
argumentProvider.testRequires(whiteboxJvmTestSuite.getRequires().get());
193-
argumentProvider.testOpensTo(whiteboxJvmTestSuite.getOpensTo().get());
195+
argumentProvider.testRequires(whiteboxJvmTestSuite.getRequires());
196+
argumentProvider.testOpensTo(whiteboxJvmTestSuite.getOpensTo());
194197
});
195198

196199
Configuration implementation = configurations.getByName(testSources.getImplementationConfigurationName());

src/main/java/org/gradlex/javamodule/testing/internal/provider/WhiteboxTestCompileArgumentProvider.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
package org.gradlex.javamodule.testing.internal.provider;
1818

1919
import org.gradle.api.file.FileCollection;
20+
import org.gradle.api.model.ObjectFactory;
21+
import org.gradle.api.provider.ListProperty;
22+
import org.gradle.api.provider.Provider;
2023
import org.gradlex.javamodule.testing.internal.ModuleInfoParser;
2124
import org.gradle.api.tasks.compile.JavaCompile;
2225
import org.gradle.internal.jvm.JavaModuleDetector;
@@ -36,17 +39,22 @@ public class WhiteboxTestCompileArgumentProvider implements CommandLineArgumentP
3639
private final JavaModuleDetector moduleDetector;
3740
private final ModuleInfoParser moduleInfoParser;
3841

39-
private final List<String> allTestRequires = new ArrayList<>();
42+
private final ListProperty<String> allTestRequires;
4043

4144
public WhiteboxTestCompileArgumentProvider(
4245
Set<File> mainSourceFolders, Set<File> testSourceFolders, JavaCompile task, FileCollection syntheticModuleInfoFolders,
43-
JavaModuleDetector moduleDetector, ModuleInfoParser moduleInfoParser) {
46+
JavaModuleDetector moduleDetector, ModuleInfoParser moduleInfoParser, ObjectFactory objects) {
4447
this.mainSourceFolders = mainSourceFolders;
4548
this.testSourceFolders = testSourceFolders;
4649
this.task = task;
4750
this.syntheticModuleInfoFolders = syntheticModuleInfoFolders;
4851
this.moduleDetector = moduleDetector;
4952
this.moduleInfoParser = moduleInfoParser;
53+
this.allTestRequires = objects.listProperty(String.class);
54+
}
55+
56+
public void testRequires(Provider<List<String>> testRequires) {
57+
allTestRequires.addAll(testRequires);
5058
}
5159

5260
public void testRequires(List<String> testRequires) {
@@ -66,7 +74,7 @@ public Iterable<String> asArguments() {
6674
args.add(moduleDetector.inferModulePath(true, task.getClasspath().plus(syntheticModuleInfoFolders)).getFiles().stream()
6775
.map(File::getPath).collect(Collectors.joining(cpSeparator)));
6876

69-
for (String testRequires : allTestRequires) {
77+
for (String testRequires : allTestRequires.get()) {
7078
args.add("--add-modules");
7179
args.add(testRequires);
7280
args.add("--add-reads");

src/main/java/org/gradlex/javamodule/testing/internal/provider/WhiteboxTestRuntimeArgumentProvider.java

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
package org.gradlex.javamodule.testing.internal.provider;
1818

1919
import org.gradle.api.file.Directory;
20+
import org.gradle.api.model.ObjectFactory;
21+
import org.gradle.api.provider.ListProperty;
2022
import org.gradle.api.provider.Provider;
2123
import org.gradle.process.CommandLineArgumentProvider;
2224
import org.gradlex.javamodule.testing.internal.ModuleInfoParser;
@@ -34,24 +36,34 @@ public class WhiteboxTestRuntimeArgumentProvider implements CommandLineArgumentP
3436
private final File testResources;
3537
private final ModuleInfoParser moduleInfoParser;
3638

37-
private final List<String> allTestRequires = new ArrayList<>();
38-
private final List<String> allTestOpensTo = new ArrayList<>();
39+
private final ListProperty<String> allTestRequires;
40+
private final ListProperty<String> allTestOpensTo;
3941

4042
public WhiteboxTestRuntimeArgumentProvider(Set<File> mainSourceFolders,
41-
Provider<Directory> testClassesFolders, File resourcesUnderTest, File testResources,
42-
ModuleInfoParser moduleInfoParser) {
43+
Provider<Directory> testClassesFolders, File resourcesUnderTest, File testResources,
44+
ModuleInfoParser moduleInfoParser, ObjectFactory objects) {
4345

4446
this.mainSourceFolders = mainSourceFolders;
4547
this.testClassesFolders = testClassesFolders;
4648
this.resourcesUnderTest = resourcesUnderTest;
4749
this.testResources = testResources;
4850
this.moduleInfoParser = moduleInfoParser;
51+
this.allTestRequires = objects.listProperty(String.class);
52+
this.allTestOpensTo = objects.listProperty(String.class);
53+
}
54+
55+
public void testRequires(Provider<List<String>> testRequires) {
56+
allTestRequires.addAll(testRequires);
4957
}
5058

5159
public void testRequires(List<String> testRequires) {
5260
allTestRequires.addAll(testRequires);
5361
}
5462

63+
public void testOpensTo(Provider<List<String>> testRequires) {
64+
allTestOpensTo.addAll(testRequires);
65+
}
66+
5567
public void testOpensTo(List<String> testRequires) {
5668
allTestOpensTo.addAll(testRequires);
5769
}
@@ -70,15 +82,15 @@ public Iterable<String> asArguments() {
7082

7183
List<String> args = new ArrayList<>();
7284

73-
for (String testRequires : allTestRequires) {
85+
for (String testRequires : allTestRequires.get()) {
7486
args.add("--add-modules");
7587
args.add(testRequires);
7688
args.add("--add-reads");
7789
args.add(moduleName + "=" + testRequires);
7890
}
7991

8092
for (String packageName : allTestClassPackages) {
81-
for (String opensTo : allTestOpensTo) {
93+
for (String opensTo : allTestOpensTo.get()) {
8294
args.add("--add-opens");
8395
args.add(moduleName + "/" + packageName + "=" + opensTo);
8496
}

0 commit comments

Comments
 (0)