Fix references to built-in configurations with Gradle Kotlin DSL

Closes gh-917
This commit is contained in:
Andy Wilkinson 2019-06-27 20:42:12 +01:00
parent db2c867f71
commit d38463c4e7
5 changed files with 31 additions and 16 deletions

View File

@ -10,7 +10,7 @@ java.sourceCompatibility = JavaVersion.VERSION_1_8
configurations { configurations {
compileOnly { compileOnly {
extendsFrom(annotationProcessor) extendsFrom(configurations.annotationProcessor.get())
} }
} }

View File

@ -86,7 +86,7 @@ public abstract class GradleBuildWriter {
protected abstract void writeConfigurations(IndentingWriter writer, GradleBuild build); protected abstract void writeConfigurations(IndentingWriter writer, GradleBuild build);
protected abstract void writeConfiguration(IndentingWriter writer, String configurationName, protected abstract void writeConfiguration(IndentingWriter writer, String configurationName,
ConfigurationCustomization configurationCustomization); ConfigurationCustomization configurationCustomization, List<String> customConfigurations);
protected final void writeRepositories(IndentingWriter writer, GradleBuild build) { protected final void writeRepositories(IndentingWriter writer, GradleBuild build) {
writeNestedCollection(writer, "repositories", build.repositories().items().collect(Collectors.toList()), writeNestedCollection(writer, "repositories", build.repositories().items().collect(Collectors.toList()),

View File

@ -89,7 +89,7 @@ public class GroovyDslGradleBuildWriter extends GradleBuildWriter {
@Override @Override
protected void writeConfiguration(IndentingWriter writer, String configurationName, protected void writeConfiguration(IndentingWriter writer, String configurationName,
GradleBuild.ConfigurationCustomization configurationCustomization) { GradleBuild.ConfigurationCustomization configurationCustomization, List<String> customConfigurations) {
writer.println(configurationName + " {"); writer.println(configurationName + " {");
writer.indented(() -> writer.println( writer.indented(() -> writer.println(
String.format("extendsFrom %s", String.join(", ", configurationCustomization.getExtendsFrom())))); String.format("extendsFrom %s", String.join(", ", configurationCustomization.getExtendsFrom()))));
@ -125,7 +125,7 @@ public class GroovyDslGradleBuildWriter extends GradleBuildWriter {
writer.indented(() -> { writer.indented(() -> {
configurations.forEach(writer::println); configurations.forEach(writer::println);
configurationCustomizations configurationCustomizations
.forEach((name, customization) -> writeConfiguration(writer, name, customization)); .forEach((name, customization) -> writeConfiguration(writer, name, customization, configurations));
}); });
writer.println("}"); writer.println("}");
writer.println(""); writer.println("");

View File

@ -16,8 +16,10 @@
package io.spring.initializr.generator.buildsystem.gradle; package io.spring.initializr.generator.buildsystem.gradle;
import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -104,18 +106,27 @@ public class KotlinDslGradleBuildWriter extends GradleBuildWriter {
@Override @Override
protected void writeConfiguration(IndentingWriter writer, String configurationName, protected void writeConfiguration(IndentingWriter writer, String configurationName,
ConfigurationCustomization configurationCustomization) { ConfigurationCustomization configurationCustomization, List<String> customConfigurations) {
if (configurationCustomization.getExtendsFrom().isEmpty()) { if (configurationCustomization.getExtendsFrom().isEmpty()) {
writer.println(configurationName); writer.println(configurationName);
} }
else { else {
writer.println(configurationName + " {"); writer.println(configurationName + " {");
writer.indented(() -> writer.println(String.format("extendsFrom(%s)", writer.indented(() -> writer.println(String.format("extendsFrom(%s)",
configurationCustomization.getExtendsFrom().stream().collect(Collectors.joining(", "))))); configurationCustomization.getExtendsFrom().stream()
.map((name) -> configurationReference(name, customConfigurations))
.collect(Collectors.joining(", ")))));
writer.println("}"); writer.println("}");
} }
} }
private String configurationReference(String configurationName, Collection<String> customConfigurations) {
if (customConfigurations.contains(configurationName)) {
return configurationName;
}
return "configurations." + configurationName + ".get()";
}
@Override @Override
protected String repositoryAsString(MavenRepository repository) { protected String repositoryAsString(MavenRepository repository) {
if (MavenRepository.MAVEN_CENTRAL.equals(repository)) { if (MavenRepository.MAVEN_CENTRAL.equals(repository)) {
@ -127,7 +138,8 @@ public class KotlinDslGradleBuildWriter extends GradleBuildWriter {
@Override @Override
protected void writeConfigurations(IndentingWriter writer, GradleBuild build) { protected void writeConfigurations(IndentingWriter writer, GradleBuild build) {
Map<String, ConfigurationCustomization> configurationCustomizations = build.getConfigurationCustomizations(); Map<String, ConfigurationCustomization> configurationCustomizations = build.getConfigurationCustomizations();
for (String configuration : build.getConfigurations()) { List<String> configurations = build.getConfigurations();
for (String configuration : configurations) {
writer.println("val " + configuration + " by configurations.creating"); writer.println("val " + configuration + " by configurations.creating");
} }
if (configurationCustomizations.isEmpty()) { if (configurationCustomizations.isEmpty()) {
@ -135,7 +147,7 @@ public class KotlinDslGradleBuildWriter extends GradleBuildWriter {
} }
writer.println("configurations {"); writer.println("configurations {");
writer.indented(() -> configurationCustomizations writer.indented(() -> configurationCustomizations
.forEach((name, customization) -> writeConfiguration(writer, name, customization))); .forEach((name, customization) -> writeConfiguration(writer, name, customization, configurations)));
writer.println("}"); writer.println("}");
writer.println(""); writer.println("");
} }

View File

@ -277,21 +277,24 @@ class KotlinDslGradleBuildWriterTests {
@Test @Test
void gradleBuildWithConfigurationCustomization() throws Exception { void gradleBuildWithConfigurationCustomization() throws Exception {
GradleBuild build = new GradleBuild(); GradleBuild build = new GradleBuild();
build.customizeConfiguration("runtimeClasspath", (configuration) -> configuration.extendsFrom("custom1")); build.addConfiguration("custom");
build.customizeConfiguration("runtimeClasspath", (configuration) -> configuration.extendsFrom("custom2")); build.customizeConfiguration("runtimeClasspath", (configuration) -> configuration.extendsFrom("custom"));
build.customizeConfiguration("runtimeClasspath", (configuration) -> configuration.extendsFrom("builtIn"));
List<String> lines = generateBuild(build); List<String> lines = generateBuild(build);
assertThat(lines).containsSequence("configurations {", " runtimeClasspath {", assertThat(lines).containsSequence("val custom by configurations.creating", "configurations {",
" extendsFrom(custom1, custom2)", " }", "}"); " runtimeClasspath {", " extendsFrom(custom, configurations.builtIn.get())", " }", "}");
} }
@Test @Test
void gradleBuildWithConfigurationCustomizations() throws Exception { void gradleBuildWithConfigurationCustomizations() throws Exception {
GradleBuild build = new GradleBuild(); GradleBuild build = new GradleBuild();
build.customizeConfiguration("runtimeClasspath", (configuration) -> configuration.extendsFrom("custom1")); build.addConfiguration("custom");
build.customizeConfiguration("testRuntimeClasspath", (configuration) -> configuration.extendsFrom("custom2")); build.customizeConfiguration("runtimeClasspath", (configuration) -> configuration.extendsFrom("custom"));
build.customizeConfiguration("testRuntimeClasspath", (configuration) -> configuration.extendsFrom("builtIn"));
List<String> lines = generateBuild(build); List<String> lines = generateBuild(build);
assertThat(lines).containsSequence("configurations {", " runtimeClasspath {", " extendsFrom(custom1)", assertThat(lines).containsSequence("val custom by configurations.creating", "configurations {",
" }", " testRuntimeClasspath {", " extendsFrom(custom2)", " }", "}"); " runtimeClasspath {", " extendsFrom(custom)", " }", " testRuntimeClasspath {",
" extendsFrom(configurations.builtIn.get())", " }", "}");
} }
@Test @Test