Skip to content

Commit 1db85d7

Browse files
committed
Do not create multiple instances of one Action type
1 parent 563e916 commit 1db85d7

File tree

2 files changed

+38
-22
lines changed

2 files changed

+38
-22
lines changed

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

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,17 @@
3636
import org.gradlex.javamodule.dependencies.internal.utils.ModuleInfoCache;
3737
import org.gradlex.javamodule.dependencies.internal.utils.ValueModuleDirectoryListing;
3838

39-
import javax.annotation.Nullable;
4039
import javax.inject.Inject;
4140
import java.io.File;
4241
import java.nio.file.Paths;
42+
import java.util.ArrayList;
4343
import java.util.List;
4444

4545
public abstract class JavaModulesExtension {
4646

4747
private final Settings settings;
4848
private final ModuleInfoCache moduleInfoCache;
49+
private final List<ModuleProject> moduleProjects = new ArrayList<>();
4950

5051
@Inject
5152
public abstract ObjectFactory getObjects();
@@ -57,6 +58,7 @@ public abstract class JavaModulesExtension {
5758
public JavaModulesExtension(Settings settings) {
5859
this.settings = settings;
5960
this.moduleInfoCache = getObjects().newInstance(ModuleInfoCache.class, true);
61+
settings.getGradle().getLifecycle().beforeProject(new ApplyPluginsAction(moduleProjects, moduleInfoCache));
6062
}
6163

6264
/**
@@ -137,36 +139,46 @@ private void includeModule(Module module, File projectDir) {
137139

138140
String group = module.getGroup().getOrNull();
139141
List<String> plugins = module.getPlugins().get();
140-
settings.getGradle().getLifecycle().beforeProject(new ApplyPluginsAction(artifact, group, plugins, mainModuleName, moduleInfoCache));
142+
moduleProjects.add(new ModuleProject(artifact, group, plugins, mainModuleName));
141143
}
142144

143-
@NonNullApi
144-
private static class ApplyPluginsAction implements IsolatedAction<Project>, Action<Project> {
145-
145+
private static class ModuleProject {
146146
private final String artifact;
147147
private final String group;
148148
private final List<String> plugins;
149149
private final String mainModuleName;
150-
private final ModuleInfoCache moduleInfoCache;
151150

152-
public ApplyPluginsAction(String artifact, @Nullable String group, List<String> plugins, @Nullable String mainModuleName, ModuleInfoCache moduleInfoCache) {
151+
public ModuleProject(String artifact, String group, List<String> plugins, String mainModuleName) {
153152
this.artifact = artifact;
154153
this.group = group;
155154
this.plugins = plugins;
156155
this.mainModuleName = mainModuleName;
156+
}
157+
}
158+
159+
@NonNullApi
160+
private static class ApplyPluginsAction implements IsolatedAction<Project>, Action<Project> {
161+
162+
private final List<ModuleProject> moduleProjects;
163+
private final ModuleInfoCache moduleInfoCache;
164+
165+
public ApplyPluginsAction(List<ModuleProject> moduleProjects, ModuleInfoCache moduleInfoCache) {
166+
this.moduleProjects = moduleProjects;
157167
this.moduleInfoCache = moduleInfoCache;
158168
}
159169

160170
@Override
161171
public void execute(Project project) {
162-
if (project.getName().equals(artifact)) {
163-
if (group != null) project.setGroup(group);
164-
project.getPlugins().apply(JavaModuleDependenciesPlugin.class);
165-
project.getExtensions().getByType(JavaModuleDependenciesExtension.class).getModuleInfoCache().set(moduleInfoCache);
166-
plugins.forEach(id -> project.getPlugins().apply(id));
167-
if (mainModuleName != null) {
168-
project.getPlugins().withType(ApplicationPlugin.class, p ->
169-
project.getExtensions().getByType(JavaApplication.class).getMainModule().set(mainModuleName));
172+
for (ModuleProject m : moduleProjects) {
173+
if (project.getName().equals(m.artifact)) {
174+
if (m.group != null) project.setGroup(m.group);
175+
project.getPlugins().apply(JavaModuleDependenciesPlugin.class);
176+
project.getExtensions().getByType(JavaModuleDependenciesExtension.class).getModuleInfoCache().set(moduleInfoCache);
177+
m.plugins.forEach(id -> project.getPlugins().apply(id));
178+
if (m.mainModuleName != null) {
179+
project.getPlugins().withType(ApplicationPlugin.class, p ->
180+
project.getExtensions().getByType(JavaApplication.class).getMainModule().set(m.mainModuleName));
181+
}
170182
}
171183
}
172184
}

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

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,33 +23,37 @@
2323
import org.gradle.api.initialization.Settings;
2424

2525
import javax.inject.Inject;
26+
import java.util.ArrayList;
27+
import java.util.List;
2628

2729
public abstract class RootPluginsExtension {
2830

29-
private final Settings settings;
31+
private final List<String> ids = new ArrayList<>();
3032

3133
@Inject
3234
public RootPluginsExtension(Settings settings) {
33-
this.settings = settings;
35+
settings.getGradle().getLifecycle().beforeProject(new ApplyPluginAction(ids));
3436
}
3537

3638
public void id(String id) {
37-
settings.getGradle().getLifecycle().beforeProject(new ApplyPluginAction(id));
39+
ids.add(id);
3840
}
3941

4042
@NonNullApi
4143
private static class ApplyPluginAction implements IsolatedAction<Project>, Action<Project> {
4244

43-
private final String id;
45+
private final List<String> ids;
4446

45-
public ApplyPluginAction(String id) {
46-
this.id = id;
47+
public ApplyPluginAction(List<String> ids) {
48+
this.ids = ids;
4749
}
4850

4951
@Override
5052
public void execute(Project project) {
5153
if (isRoot(project)) {
52-
project.getPlugins().apply(id);
54+
for (String id : ids) {
55+
project.getPlugins().apply(id);
56+
}
5357
}
5458
}
5559

0 commit comments

Comments
 (0)