Skip to content

Commit 77dc568

Browse files
committed
Support using a build-wide shared module info cache
1 parent d29ae98 commit 77dc568

File tree

4 files changed

+29
-22
lines changed

4 files changed

+29
-22
lines changed

src/main/java/org/gradlex/javamodule/dependencies/JavaModuleDependenciesExtension.java

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,8 @@ public abstract class JavaModuleDependenciesExtension {
7777
private static final String INTERNAL = "internal";
7878

7979
private final VersionCatalogsExtension versionCatalogs;
80-
private final ModuleInfoCache moduleInfoCache;
80+
81+
public abstract Property<ModuleInfoCache> getModuleInfoCache();
8182

8283
/**
8384
* Custom mappings can be defined in a property files in your build.
@@ -134,7 +135,7 @@ public abstract class JavaModuleDependenciesExtension {
134135

135136
public JavaModuleDependenciesExtension(VersionCatalogsExtension versionCatalogs) {
136137
this.versionCatalogs = versionCatalogs;
137-
this.moduleInfoCache = getObjects().newInstance(ModuleInfoCache.class);
138+
getModuleInfoCache().convention(getProviders().provider(() -> getObjects().newInstance(ModuleInfoCache.class, false)));
138139
getModulesProperties().set(new File(getProject().getRootDir(), "gradle/modules.properties"));
139140
getVersionCatalogName().convention("libs");
140141
getModuleNameCheck().convention(true);
@@ -212,7 +213,7 @@ private String toProjectName(String moduleNameSuffix) {
212213
}
213214

214215
public Provider<Dependency> create(String moduleName, SourceSet sourceSetWithModuleInfo) {
215-
if (moduleInfoCache.initializedInSettings()) {
216+
if (getModuleInfoCache().get().isInitializedInSettings()) {
216217
return createPrecise(moduleName, sourceSetWithModuleInfo);
217218
} else {
218219
return createWithGuessing(moduleName, sourceSetWithModuleInfo);
@@ -221,8 +222,8 @@ public Provider<Dependency> create(String moduleName, SourceSet sourceSetWithMod
221222

222223
public Provider<Dependency> createPrecise(String moduleName, SourceSet sourceSetWithModuleInfo) {
223224
return getProviders().provider(() -> {
224-
String projectPath = moduleInfoCache.getProjectPath(moduleName);
225-
String capability = moduleInfoCache.getCapability(moduleName);
225+
String projectPath = getModuleInfoCache().get().getProjectPath(moduleName);
226+
String capability = getModuleInfoCache().get().getCapability(moduleName);
226227

227228
if (projectPath != null) {
228229
// local project
@@ -243,7 +244,7 @@ public Provider<Dependency> createWithGuessing(String moduleName, SourceSet sour
243244
Map<String, String> allProjectNamesAndGroups = getProject().getRootProject().getSubprojects().stream().collect(
244245
Collectors.toMap(Project::getName, p -> (String) p.getGroup(), (a, b) -> a));
245246

246-
ModuleInfo moduleInfo = moduleInfoCache.get(sourceSetWithModuleInfo, getProviders());
247+
ModuleInfo moduleInfo = getModuleInfoCache().get().get(sourceSetWithModuleInfo, getProviders());
247248
String ownModuleNamesPrefix = moduleInfo.moduleNamePrefix(getProject().getName(), sourceSetWithModuleInfo.getName(), getModuleNameCheck().get());
248249

249250
String moduleNameSuffix = ownModuleNamesPrefix == null ? null :
@@ -495,7 +496,7 @@ public void addRequiresRuntimeSupport(SourceSet sourceSetForModuleInfo, SourceSe
495496
}
496497

497498
void doAddRequiresRuntimeSupport(SourceSet sourceSetForModuleInfo, SourceSet sourceSetForClasspath) {
498-
List<String> requiresRuntime = getModuleInfoCache().get(sourceSetForModuleInfo, getProviders()).get(REQUIRES_RUNTIME);
499+
List<String> requiresRuntime = getModuleInfoCache().get().get(sourceSetForModuleInfo, getProviders()).get(REQUIRES_RUNTIME);
499500
String generatorTaskName = sourceSetForClasspath.getTaskName("generate", "syntheticModuleInfoFolders");
500501
if (requiresRuntime.isEmpty() || getProject().getTasks().getNames().contains(generatorTaskName)) {
501502
// Already active or not needed for this source set
@@ -558,8 +559,4 @@ private String moduleDebugInfo(String moduleName, File moduleInfoFile, File root
558559

559560
@Inject
560561
protected abstract SourceSetContainer getSourceSets();
561-
562-
ModuleInfoCache getModuleInfoCache() {
563-
return moduleInfoCache;
564-
}
565562
}

src/main/java/org/gradlex/javamodule/dependencies/JavaModuleDependenciesPlugin.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ private void setupOrderingCheckTasks(Project project, TaskProvider<Task> checkAl
234234
t.setGroup("java modules");
235235
t.setDescription("Check order of directives in 'module-info.java' in '" + sourceSet.getName() + "' source set");
236236

237-
ModuleInfo moduleInfo = javaModuleDependencies.getModuleInfoCache().get(sourceSet, project.getProviders());
237+
ModuleInfo moduleInfo = javaModuleDependencies.getModuleInfoCache().get().get(sourceSet, project.getProviders());
238238

239239
t.getModuleInfoPath().convention(moduleInfo.getFilePath().getAbsolutePath());
240240
t.getModuleNamePrefix().convention(moduleInfo.moduleNamePrefix(project.getName(), sourceSet.getName(), false));
@@ -264,7 +264,7 @@ private void readModuleInfo(ModuleInfo.Directive moduleDirective, SourceSet sour
264264
if (javaModuleDependenciesExtension.getAnalyseOnly().get()) {
265265
return;
266266
}
267-
ModuleInfo moduleInfo = javaModuleDependenciesExtension.getModuleInfoCache().get(sourceSet, project.getProviders());
267+
ModuleInfo moduleInfo = javaModuleDependenciesExtension.getModuleInfoCache().get().get(sourceSet, project.getProviders());
268268
for (String moduleName : moduleInfo.get(moduleDirective)) {
269269
declareDependency(moduleName, moduleInfo.getFilePath(), project, sourceSet, configuration, javaModuleDependenciesExtension);
270270
}
@@ -280,7 +280,7 @@ private void declareDependency(String moduleName, File moduleInfoFile, Project p
280280
}
281281

282282
private List<BuildFileDependenciesGenerate.DependencyDeclaration> collectDependencies(Project project, JavaModuleDependenciesExtension javaModuleDependencies, SourceSet sourceSet, ModuleInfo.Directive directive, String scope) {
283-
ModuleInfo moduleInfo = javaModuleDependencies.getModuleInfoCache().get(sourceSet, project.getProviders());
283+
ModuleInfo moduleInfo = javaModuleDependencies.getModuleInfoCache().get().get(sourceSet, project.getProviders());
284284
if (moduleInfo == ModuleInfo.EMPTY) {
285285
// check if there is a whiltebox module-info we can use isntead
286286
File sourceSetDir = sourceSet.getJava().getSrcDirs().iterator().next().getParentFile();

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.gradle.api.plugins.JavaApplication;
2828
import org.gradle.api.plugins.JavaPlatformPlugin;
2929
import org.gradle.util.GradleVersion;
30+
import org.gradlex.javamodule.dependencies.JavaModuleDependenciesExtension;
3031
import org.gradlex.javamodule.dependencies.JavaModuleDependenciesPlugin;
3132
import org.gradlex.javamodule.dependencies.JavaModuleVersionsPlugin;
3233
import org.gradlex.javamodule.dependencies.internal.utils.ModuleInfo;
@@ -52,7 +53,7 @@ public abstract class JavaModulesExtension {
5253
@Inject
5354
public JavaModulesExtension(Settings settings) {
5455
this.settings = settings;
55-
this.moduleInfoCache = getObjects().newInstance(ModuleInfoCache.class);
56+
this.moduleInfoCache = getObjects().newInstance(ModuleInfoCache.class, true);
5657
}
5758

5859
public void module(String folder) {
@@ -122,9 +123,9 @@ private void includeModule(Module module, File projectDir) {
122123
String group = module.getGroup().getOrNull();
123124
List<String> plugins = module.getPlugins().get();
124125
if (SUPPORT_PROJECT_ISOLATION) {
125-
settings.getGradle().getLifecycle().beforeProject(new ApplyPluginsAction(artifact, group, plugins, mainModuleName));
126+
settings.getGradle().getLifecycle().beforeProject(new ApplyPluginsAction(artifact, group, plugins, mainModuleName, moduleInfoCache));
126127
} else {
127-
settings.getGradle().beforeProject(new ApplyPluginsAction(artifact, group, plugins, mainModuleName));
128+
settings.getGradle().beforeProject(new ApplyPluginsAction(artifact, group, plugins, mainModuleName, moduleInfoCache));
128129
}
129130
}
130131

@@ -135,19 +136,22 @@ private static class ApplyPluginsAction implements IsolatedAction<Project>, Acti
135136
private final String group;
136137
private final List<String> plugins;
137138
private final String mainModuleName;
139+
private final ModuleInfoCache moduleInfoCache;
138140

139-
public ApplyPluginsAction(String artifact, @Nullable String group, List<String> plugins, @Nullable String mainModuleName) {
141+
public ApplyPluginsAction(String artifact, @Nullable String group, List<String> plugins, @Nullable String mainModuleName, ModuleInfoCache moduleInfoCache) {
140142
this.artifact = artifact;
141143
this.group = group;
142144
this.plugins = plugins;
143145
this.mainModuleName = mainModuleName;
146+
this.moduleInfoCache = moduleInfoCache;
144147
}
145148

146149
@Override
147150
public void execute(Project project) {
148151
if (project.getName().equals(artifact)) {
149152
if (group != null) project.setGroup(group);
150153
project.getPlugins().apply(JavaModuleDependenciesPlugin.class);
154+
project.getExtensions().getByType(JavaModuleDependenciesExtension.class).getModuleInfoCache().set(moduleInfoCache);
151155
plugins.forEach(id -> project.getPlugins().apply(id));
152156
if (mainModuleName != null) {
153157
project.getPlugins().withType(ApplicationPlugin.class, p ->

src/main/java/org/gradlex/javamodule/dependencies/internal/utils/ModuleInfoCache.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,23 @@
3232

3333
public abstract class ModuleInfoCache {
3434

35+
private final boolean initializedInSettings;
3536
private final Map<File, ModuleInfo> moduleInfo = new HashMap<>();
3637
private final Map<String, String> moduleNameToProjectPath = new HashMap<>();
3738
private final Map<String, String> moduleNameToCapability = new HashMap<>();
3839

3940
@Inject
4041
public abstract ObjectFactory getObjects();
4142

43+
@Inject
44+
public ModuleInfoCache(boolean initializedInSettings) {
45+
this.initializedInSettings = initializedInSettings;
46+
}
47+
48+
public boolean isInitializedInSettings() {
49+
return initializedInSettings;
50+
}
51+
4252
/**
4353
* Returns the module-info.java for the given SourceSet. If the SourceSet has multiple source folders with multiple
4454
* module-info files (which is usually a broken setup) the first file found is returned.
@@ -93,8 +103,4 @@ private boolean maybePutModuleInfo(File folder, ProviderFactory providers) {
93103
}
94104
return false;
95105
}
96-
97-
public boolean initializedInSettings() {
98-
return false;
99-
}
100106
}

0 commit comments

Comments
 (0)