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 {
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 writeConfiguration(IndentingWriter writer, String configurationName,
ConfigurationCustomization configurationCustomization);
ConfigurationCustomization configurationCustomization, List<String> customConfigurations);
protected final void writeRepositories(IndentingWriter writer, GradleBuild build) {
writeNestedCollection(writer, "repositories", build.repositories().items().collect(Collectors.toList()),

View File

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

View File

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

View File

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