Skip to content

Commit 721dcba

Browse files
committed
Organize code and add comments to new public properties
1 parent 9b5dede commit 721dcba

File tree

4 files changed

+32
-46
lines changed

4 files changed

+32
-46
lines changed

src/main/java/org/gradlex/javamodule/dependencies/initialization/Directory.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,19 @@ public Directory(File root) {
5454
@Inject
5555
protected abstract ObjectFactory getObjects();
5656

57+
/**
58+
* Configure which folders should be ignored when searching for Modules.
59+
* This can be tweaked to optimize the configuration cache hit ratio.
60+
* Defaults to: 'build', '.*'
61+
*/
5762
public abstract ListProperty<String> getExclusions();
5863

64+
/**
65+
* Configure if only folders that contain a 'build.gradle' or 'build.gradle.kts'
66+
* should be considered when searching for Modules.
67+
* Setting this to true may improve configuration cache hit ratio if you know
68+
* that all modules have build files in addition to the 'module-info.java' files.
69+
*/
5970
public abstract Property<Boolean> getRequiresBuildFile();
6071

6172
/**

src/main/java/org/gradlex/javamodule/dependencies/initialization/JavaModulesExtension.java

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,12 @@
2929
import org.gradle.api.plugins.JavaPlatformPlugin;
3030
import org.gradle.api.provider.Provider;
3131
import org.gradle.api.provider.ProviderFactory;
32-
import org.gradle.api.provider.ValueSourceSpec;
3332
import org.gradlex.javamodule.dependencies.JavaModuleDependenciesExtension;
3433
import org.gradlex.javamodule.dependencies.JavaModuleDependenciesPlugin;
3534
import org.gradlex.javamodule.dependencies.JavaModuleVersionsPlugin;
3635
import org.gradlex.javamodule.dependencies.internal.utils.ModuleInfo;
3736
import org.gradlex.javamodule.dependencies.internal.utils.ModuleInfoCache;
37+
import org.gradlex.javamodule.dependencies.internal.utils.ValueModuleDirectoryListing;
3838

3939
import javax.annotation.Nullable;
4040
import javax.inject.Inject;
@@ -91,18 +91,14 @@ public void directory(String directory, Action<Directory> action) {
9191
Directory moduleDirectory = getObjects().newInstance(Directory.class, modulesDirectory);
9292
action.execute(moduleDirectory);
9393

94-
9594
for (Module module : moduleDirectory.customizedModules.values()) {
9695
includeModule(module, new File(modulesDirectory, module.getDirectory().get()));
9796
}
98-
Provider<List<String>> listProvider = getProviders().of(ValueSourceDirectoryListing.class, new Action<ValueSourceSpec<ValueSourceDirectoryListing.DirectoryListingParameter>>() {
99-
@Override
100-
public void execute(ValueSourceSpec<ValueSourceDirectoryListing.DirectoryListingParameter> spec) {
101-
spec.getParameters().getRegexExclusions().set(moduleDirectory.getExclusions());
102-
spec.getParameters().getExclusions().set(moduleDirectory.customizedModules.keySet());
103-
spec.getParameters().getDir().set(modulesDirectory);
104-
spec.getParameters().getRequiresBuildFile().set(moduleDirectory.getRequiresBuildFile());
105-
}
97+
Provider<List<String>> listProvider = getProviders().of(ValueModuleDirectoryListing.class, spec -> {
98+
spec.getParameters().getExclusions().set(moduleDirectory.getExclusions());
99+
spec.getParameters().getExplicitlyConfiguredFolders().set(moduleDirectory.customizedModules.keySet());
100+
spec.getParameters().getDir().set(modulesDirectory);
101+
spec.getParameters().getRequiresBuildFile().set(moduleDirectory.getRequiresBuildFile());
106102
});
107103

108104
for (String projectDir : listProvider.get()) {
Lines changed: 14 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -14,69 +14,51 @@
1414
* limitations under the License.
1515
*/
1616

17-
package org.gradlex.javamodule.dependencies.initialization;
17+
package org.gradlex.javamodule.dependencies.internal.utils;
1818

1919
import org.gradle.api.provider.Property;
2020
import org.gradle.api.provider.SetProperty;
2121
import org.gradle.api.provider.ValueSource;
2222
import org.gradle.api.provider.ValueSourceParameters;
2323

2424
import java.io.File;
25-
import java.io.FileFilter;
2625
import java.io.IOException;
27-
import java.nio.file.DirectoryStream;
2826
import java.nio.file.Files;
2927
import java.nio.file.Path;
30-
import java.nio.file.attribute.BasicFileAttributes;
31-
import java.util.Arrays;
3228
import java.util.List;
33-
import java.util.function.BiPredicate;
3429
import java.util.stream.Collectors;
3530
import java.util.stream.Stream;
3631

37-
public abstract class ValueSourceDirectoryListing implements ValueSource<List<String>, ValueSourceDirectoryListing.DirectoryListingParameter> {
32+
public abstract class ValueModuleDirectoryListing implements ValueSource<List<String>, ValueModuleDirectoryListing.Parameter> {
3833

34+
public interface Parameter extends ValueSourceParameters {
35+
Property<File> getDir();
36+
SetProperty<String> getExplicitlyConfiguredFolders();
37+
SetProperty<String> getExclusions();
38+
Property<Boolean> getRequiresBuildFile();
39+
}
3940

4041
@Override
4142
public List<String> obtain() {
4243
Path path = getParameters().getDir().get().toPath();
43-
File file = getParameters().getDir().get();
44-
try (Stream<Path> directoryStream = Files.find(path, 1, new BiPredicate<Path, BasicFileAttributes>() {
45-
@Override
46-
public boolean test(Path path, BasicFileAttributes basicFileAttributes) {
47-
return basicFileAttributes.isDirectory();
48-
}
49-
})) {
50-
return directoryStream.filter(x -> !getParameters().getExclusions().get().contains(x.getFileName().toString()))
51-
.filter(x -> getParameters().getRegexExclusions().get().stream().noneMatch(r -> x.getFileName().toString().matches(r)))
44+
try (Stream<Path> directoryStream = Files.find(path, 1, (unused, basicFileAttributes) -> basicFileAttributes.isDirectory())) {
45+
return directoryStream
46+
.filter(x -> !getParameters().getExplicitlyConfiguredFolders().get().contains(x.getFileName().toString()))
47+
.filter(x -> getParameters().getExclusions().get().stream().noneMatch(r -> x.getFileName().toString().matches(r)))
5248
.filter(x -> checkBuildFile(x, getParameters()))
5349
.map(x -> x.getFileName().toString())
5450
.sorted()
5551
.collect(Collectors.toList());
5652

5753
} catch (IOException e) {
58-
throw new RuntimeException("Failed on " + file, e);
54+
throw new RuntimeException("Failed to inspect: " + path, e);
5955
}
60-
61-
6256
}
6357

64-
private boolean checkBuildFile(Path x, DirectoryListingParameter parameters) {
58+
private boolean checkBuildFile(Path x, Parameter parameters) {
6559
if (!parameters.getRequiresBuildFile().get()) {
6660
return true;
6761
}
6862
return Files.isRegularFile(x.resolve("build.gradle.kts")) || Files.isRegularFile(x.resolve("build.gradle"));
6963
}
70-
71-
interface DirectoryListingParameter extends ValueSourceParameters {
72-
73-
Property<Boolean> getRequiresBuildFile();
74-
75-
Property<File> getDir();
76-
77-
SetProperty<String> getExclusions();
78-
79-
SetProperty<String> getRegexExclusions();
80-
81-
}
8264
}

src/test/groovy/org/gradlex/javamodule/dependencies/test/initialization/SettingsPluginTest.groovy

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,6 @@ class SettingsPluginTest extends Specification {
110110
}
111111
'''
112112

113-
114113
def runner = runner(':app:compileJava')
115114
when:
116115
def result = runner.build()
@@ -141,7 +140,6 @@ class SettingsPluginTest extends Specification {
141140
}
142141
'''
143142

144-
145143
def runner = runner(':app:compileJava')
146144
when:
147145
def result = runner.build()
@@ -155,10 +153,9 @@ class SettingsPluginTest extends Specification {
155153
result = runner.build()
156154

157155
then:
158-
result.getOutput().contains("Calculating task graph as configuration cache cannot be reused because a build logic input of type 'ValueSourceDirectoryListing' has changed.")
156+
result.getOutput().contains("Calculating task graph as configuration cache cannot be reused because a build logic input of type 'ValueModuleDirectoryListing' has changed.")
159157
}
160158

161-
162159
def "configurationCacheHitIrrelevantChange"() {
163160
given:
164161
settingsFile << '''

0 commit comments

Comments
 (0)