Skip to content

Commit 8399e93

Browse files
committed
Lazily configure Configurations: no 'matching', 'create', 'getByName'
1 parent 60dc37d commit 8399e93

File tree

3 files changed

+44
-27
lines changed

3 files changed

+44
-27
lines changed

src/main/java/org/gradlex/jvm/dependency/conflict/resolution/ConsistentResolution.java

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.gradlex.jvm.dependency.conflict.resolution;
1818

19+
import org.gradle.api.NamedDomainObjectProvider;
1920
import org.gradle.api.artifacts.Configuration;
2021
import org.gradle.api.artifacts.ConfigurationContainer;
2122
import org.gradle.api.artifacts.Dependency;
@@ -56,8 +57,8 @@ public ConsistentResolution(SourceSetContainer sourceSets) {
5657
/**
5758
* The runtime classpath of the given project always respected in version conflict detection and resolution.
5859
*/
59-
public Configuration providesVersions(String versionProvidingProject) {
60-
Configuration mainRuntimeClasspath = maybeCreateMainRuntimeClasspathConfiguration();
60+
public NamedDomainObjectProvider<Configuration> providesVersions(String versionProvidingProject) {
61+
NamedDomainObjectProvider<Configuration> mainRuntimeClasspath = maybeCreateMainRuntimeClasspathConfiguration();
6162
getDependencies().add(mainRuntimeClasspath.getName(), createDependency(versionProvidingProject));
6263
return mainRuntimeClasspath;
6364
}
@@ -68,31 +69,30 @@ public Configuration providesVersions(String versionProvidingProject) {
6869
* Useful if additional dependencies are needed only for tests.
6970
*/
7071
public void platform(String platform) {
71-
Configuration internal = maybeCreateInternalConfiguration();
72-
internal.withDependencies(d -> {
72+
NamedDomainObjectProvider<Configuration> internal = maybeCreateInternalConfiguration();
73+
internal.configure(conf -> conf.withDependencies(d -> {
7374
Dependency platformDependency = getDependencies().platform(createDependency(platform));
7475
d.add(platformDependency);
75-
});
76+
}));
7677

7778
sourceSets.configureEach(sourceSet -> {
7879
ConfigurationContainer configurations = getConfigurations();
79-
configurations.getByName(sourceSet.getRuntimeClasspathConfigurationName()).extendsFrom(internal);
80-
configurations.getByName(sourceSet.getCompileClasspathConfigurationName()).extendsFrom(internal);
81-
configurations.getByName(sourceSet.getAnnotationProcessorConfigurationName()).extendsFrom(internal);
80+
configurations.named(sourceSet.getRuntimeClasspathConfigurationName(), c -> c.extendsFrom(internal.get()));
81+
configurations.named(sourceSet.getCompileClasspathConfigurationName(), c -> c.extendsFrom(internal.get()));
82+
configurations.named(sourceSet.getAnnotationProcessorConfigurationName(), c -> c.extendsFrom(internal.get()));
8283
});
8384
}
8485

85-
private Configuration maybeCreateMainRuntimeClasspathConfiguration() {
86-
Configuration existing = getConfigurations().findByName(MAIN_RUNTIME_CLASSPATH_CONFIGURATION_NAME);
87-
if (existing != null) {
88-
return existing;
86+
private NamedDomainObjectProvider<Configuration> maybeCreateMainRuntimeClasspathConfiguration() {
87+
if (getConfigurations().getNames().contains(MAIN_RUNTIME_CLASSPATH_CONFIGURATION_NAME)) {
88+
return getConfigurations().named(MAIN_RUNTIME_CLASSPATH_CONFIGURATION_NAME);
8989
}
9090

91-
Configuration mainRuntimeClasspath = getConfigurations().create(MAIN_RUNTIME_CLASSPATH_CONFIGURATION_NAME, c -> {
91+
NamedDomainObjectProvider<Configuration> mainRuntimeClasspath = getConfigurations().register(MAIN_RUNTIME_CLASSPATH_CONFIGURATION_NAME, c -> {
9292
ObjectFactory objects = getObjects();
9393
c.setCanBeResolved(true);
9494
c.setCanBeConsumed(false);
95-
c.extendsFrom(maybeCreateInternalConfiguration());
95+
c.extendsFrom(maybeCreateInternalConfiguration().get());
9696
c.getAttributes().attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage.class, Usage.JAVA_RUNTIME));
9797
c.getAttributes().attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.class, Category.LIBRARY));
9898
c.getAttributes().attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements.class, LibraryElements.JAR));
@@ -104,22 +104,21 @@ private Configuration maybeCreateMainRuntimeClasspathConfiguration() {
104104
});
105105
sourceSets.configureEach(sourceSet -> {
106106
ConfigurationContainer configurations = getConfigurations();
107-
Configuration runtime = configurations.getByName(sourceSet.getRuntimeClasspathConfigurationName());
108-
Configuration compile = configurations.getByName(sourceSet.getCompileClasspathConfigurationName());
109-
Configuration processor = configurations.getByName(sourceSet.getAnnotationProcessorConfigurationName());
110-
runtime.shouldResolveConsistentlyWith(mainRuntimeClasspath);
111-
compile.shouldResolveConsistentlyWith(runtime);
112-
processor.shouldResolveConsistentlyWith(runtime);
107+
NamedDomainObjectProvider<Configuration> runtime = configurations.named(sourceSet.getRuntimeClasspathConfigurationName(),c ->
108+
c.shouldResolveConsistentlyWith(mainRuntimeClasspath.get()));
109+
configurations.named(sourceSet.getCompileClasspathConfigurationName(), c ->
110+
c.shouldResolveConsistentlyWith(runtime.get()));
111+
configurations.named(sourceSet.getAnnotationProcessorConfigurationName(), c ->
112+
c.shouldResolveConsistentlyWith(runtime.get()));
113113
});
114114
return mainRuntimeClasspath;
115115
}
116116

117-
private Configuration maybeCreateInternalConfiguration() {
118-
Configuration internal = getConfigurations().findByName(INTERNAL_CONFIGURATION_NAME);
119-
if (internal != null) {
120-
return internal;
117+
private NamedDomainObjectProvider<Configuration> maybeCreateInternalConfiguration() {
118+
if (getConfigurations().getNames().contains(INTERNAL_CONFIGURATION_NAME)) {
119+
return getConfigurations().named(INTERNAL_CONFIGURATION_NAME);
121120
}
122-
return getConfigurations().create(INTERNAL_CONFIGURATION_NAME, c -> {
121+
return getConfigurations().register(INTERNAL_CONFIGURATION_NAME, c -> {
123122
c.setCanBeResolved(false);
124123
c.setCanBeConsumed(false);
125124
});

src/main/java/org/gradlex/jvm/dependency/conflict/resolution/Logging.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -430,7 +430,7 @@ private void enforceSlf4JImplementation(String configurationName) {
430430
selectSlf4JLog4J2Interaction(configurationName, LoggingModuleIdentifiers.LOG4J_TO_SLF4J.moduleId);
431431
selectLog4J2Implementation(configurationName, LoggingModuleIdentifiers.LOG4J_TO_SLF4J.moduleId);
432432

433-
getConfigurations().matching(conf -> conf.getName().equals(configurationName)).configureEach(new Slf4JEnforcementSubstitutionsUsing());
433+
getConfigurations().configureEach(new Slf4JEnforcementSubstitutionsUsing(configurationName));
434434
}
435435

436436
private ExternalDependency validateNotation(Object dependencyNotation) {
@@ -443,7 +443,11 @@ private ExternalDependency validateNotation(Object dependencyNotation) {
443443
}
444444

445445
private void selectCapabilityConflict(String configuration, String capabilityId, ExternalDependency target, String because) {
446-
getConfigurations().matching(conf -> conf.getName().equals(configuration)).configureEach(conf -> conf.getResolutionStrategy().capabilitiesResolution(getCapabilitiesResolutionAction(capabilityId, target, because)));
446+
getConfigurations().configureEach(conf -> {
447+
if (conf.getName().equals(configuration)) {
448+
conf.getResolutionStrategy().capabilitiesResolution(getCapabilitiesResolutionAction(capabilityId, target, because));
449+
}
450+
});
447451
}
448452

449453
private void selectCapabilityConflict(String capabilityId, ExternalDependency target, String because) {

src/main/java/org/gradlex/jvm/dependency/conflict/resolution/Slf4JEnforcementSubstitutionsUsing.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,22 @@
2222
import org.gradlex.jvm.dependency.conflict.detection.rules.logging.LoggingModuleIdentifiers;
2323

2424
class Slf4JEnforcementSubstitutionsUsing implements Action<Configuration> {
25+
26+
private final String onlyApplyTo;
27+
28+
public Slf4JEnforcementSubstitutionsUsing() {
29+
this.onlyApplyTo = null;
30+
}
31+
32+
public Slf4JEnforcementSubstitutionsUsing(String onlyApplyTo) {
33+
this.onlyApplyTo = onlyApplyTo;
34+
}
35+
2536
@Override
2637
public void execute(Configuration configuration) {
38+
if (!configuration.getName().equals(onlyApplyTo)) {
39+
return;
40+
}
2741
configuration.getResolutionStrategy().dependencySubstitution(substitution -> {
2842
ComponentSelector log4JOverSlf4J = substitution.module(LoggingModuleIdentifiers.LOG4J_OVER_SLF4J.asFirstVersion());
2943
substitution.substitute(substitution.module(LoggingModuleIdentifiers.LOG4J.moduleId)).using(log4JOverSlf4J);

0 commit comments

Comments
 (0)