Skip to content

Commit 7ee76a1

Browse files
committed
Track module-info.java files as part of the configuration of a build
Otherwise, changes do not invalidate the configuration cache.
1 parent e459c48 commit 7ee76a1

File tree

2 files changed

+20
-17
lines changed

2 files changed

+20
-17
lines changed

src/main/java/de/jjohannes/gradle/moduledependencies/JavaModuleDependenciesPlugin.java

+13-7
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,15 @@
44
import org.gradle.api.NonNullApi;
55
import org.gradle.api.Plugin;
66
import org.gradle.api.Project;
7-
import org.gradle.api.artifacts.*;
7+
import org.gradle.api.artifacts.Configuration;
8+
import org.gradle.api.artifacts.VersionCatalog;
9+
import org.gradle.api.artifacts.VersionCatalogsExtension;
10+
import org.gradle.api.artifacts.VersionConstraint;
11+
import org.gradle.api.file.RegularFile;
812
import org.gradle.api.logging.Logger;
913
import org.gradle.api.plugins.JavaLibraryPlugin;
1014
import org.gradle.api.plugins.JavaPlugin;
15+
import org.gradle.api.provider.Provider;
1116
import org.gradle.api.tasks.SourceSet;
1217
import org.gradle.api.tasks.SourceSetContainer;
1318
import org.gradle.util.GradleVersion;
@@ -20,7 +25,7 @@
2025

2126
@SuppressWarnings({"unused", "UnstableApiUsage"})
2227
@NonNullApi
23-
public class JavaModuleDependenciesPlugin implements Plugin<Project> {
28+
public abstract class JavaModuleDependenciesPlugin implements Plugin<Project> {
2429

2530
private final Map<File, ModuleInfo> moduleInfo = new HashMap<>();
2631
private boolean catalogFound = true;
@@ -60,12 +65,13 @@ private void process(ModuleInfo.Directive moduleDirective, String gradleConfigur
6065

6166
private void findAndReadModuleInfo(ModuleInfo.Directive moduleDirective, SourceSet sourceSet, Project project, Configuration configuration, JavaModuleDependenciesExtension javaModuleDependenciesExtension) {
6267
for (File folder : sourceSet.getJava().getSrcDirs()) {
63-
File moduleInfoFile = new File(folder, "module-info.java");
64-
if (moduleInfoFile.exists()) {
65-
if (!this.moduleInfo.containsKey(moduleInfoFile)) {
66-
this.moduleInfo.put(moduleInfoFile, new ModuleInfo(moduleInfoFile));
68+
Provider<RegularFile> moduleInfoFile = project.getLayout().file(project.provider(() -> new File(folder, "module-info.java")));
69+
Provider<String> moduleInfoContent = project.getProviders().fileContents(moduleInfoFile).getAsText().forUseAtConfigurationTime();
70+
if (moduleInfoContent.isPresent()) {
71+
if (!this.moduleInfo.containsKey(folder)) {
72+
this.moduleInfo.put(folder, new ModuleInfo(moduleInfoContent.get()));
6773
}
68-
for (String moduleName : this.moduleInfo.get(moduleInfoFile).get(moduleDirective)) {
74+
for (String moduleName : this.moduleInfo.get(folder).get(moduleDirective)) {
6975
declareDependency(moduleName, project, configuration, javaModuleDependenciesExtension);
7076
}
7177
}

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

+7-10
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
package de.jjohannes.gradle.moduledependencies;
22

3-
import java.io.File;
4-
import java.io.IOException;
5-
import java.nio.file.Files;
6-
import java.util.*;
7-
import java.util.stream.Stream;
3+
import java.util.ArrayList;
4+
import java.util.Arrays;
5+
import java.util.Collections;
6+
import java.util.List;
87

98
public class ModuleInfo {
109

@@ -20,11 +19,9 @@ public enum Directive {
2019
private final List<String> requiresStatic = new ArrayList<>();
2120
private final List<String> requiresStaticTransitive = new ArrayList<>();
2221

23-
public ModuleInfo(File moduleInfoFile) {
24-
try (Stream<String> stream = Files.lines(moduleInfoFile.toPath())) {
25-
stream.forEach(this::parse);
26-
} catch (IOException e) {
27-
throw new RuntimeException(e);
22+
public ModuleInfo(String moduleInfoFileContent) {
23+
for(String line: moduleInfoFileContent.split("\n")) {
24+
parse(line);
2825
}
2926
}
3027

0 commit comments

Comments
 (0)