diff --git a/initializr-generator-spring/pom.xml b/initializr-generator-spring/pom.xml index fdf634ec..497125cc 100644 --- a/initializr-generator-spring/pom.xml +++ b/initializr-generator-spring/pom.xml @@ -28,6 +28,11 @@ jmustache + + org.springframework.boot + spring-boot-autoconfigure + + io.spring.initializr initializr-generator diff --git a/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/autoconfigure/GeneratorSpringAutoConfiguration.java b/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/autoconfigure/GeneratorSpringAutoConfiguration.java new file mode 100644 index 00000000..2f299d58 --- /dev/null +++ b/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/autoconfigure/GeneratorSpringAutoConfiguration.java @@ -0,0 +1,41 @@ +/* + * Copyright 2012-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.initializr.generator.spring.autoconfigure; + +import io.spring.initializr.generator.spring.code.kotlin.InitializrMetadataKotlinVersionResolver; +import io.spring.initializr.generator.spring.code.kotlin.KotlinVersionResolver; +import io.spring.initializr.metadata.InitializrMetadataProvider; + +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for generation of Spring-based + * projects. + * + * @author Andy Wilkinson + */ +public class GeneratorSpringAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + public KotlinVersionResolver kotlinVersionResolver(InitializrMetadataProvider metadataProvider) { + return new InitializrMetadataKotlinVersionResolver(metadataProvider); + } + +} diff --git a/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/code/kotlin/InitializrMetadataKotlinVersionResolver.java b/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/code/kotlin/InitializrMetadataKotlinVersionResolver.java new file mode 100644 index 00000000..375c3e4f --- /dev/null +++ b/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/code/kotlin/InitializrMetadataKotlinVersionResolver.java @@ -0,0 +1,43 @@ +/* + * Copyright 2012-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.initializr.generator.spring.code.kotlin; + +import io.spring.initializr.generator.project.ResolvedProjectDescription; +import io.spring.initializr.metadata.InitializrMetadata; +import io.spring.initializr.metadata.InitializrMetadataProvider; + +/** + * {@link KotlinVersionResolver} that resolves the version from the + * {@link InitializrMetadata}. + * + * @author Andy Wilkinson + */ +public class InitializrMetadataKotlinVersionResolver implements KotlinVersionResolver { + + private final InitializrMetadataProvider metadataProvider; + + public InitializrMetadataKotlinVersionResolver(InitializrMetadataProvider metadataProvider) { + this.metadataProvider = metadataProvider; + } + + @Override + public String resolveKotlinVersion(ResolvedProjectDescription description) { + return this.metadataProvider.get().getConfiguration().getEnv().getKotlin() + .resolveKotlinVersion(description.getPlatformVersion()); + } + +} diff --git a/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/code/kotlin/KotlinProjectGenerationConfiguration.java b/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/code/kotlin/KotlinProjectGenerationConfiguration.java index 1307c3a4..e7f25b97 100644 --- a/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/code/kotlin/KotlinProjectGenerationConfiguration.java +++ b/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/code/kotlin/KotlinProjectGenerationConfiguration.java @@ -32,7 +32,6 @@ import io.spring.initializr.generator.spring.code.MainSourceCodeProjectContribut import io.spring.initializr.generator.spring.code.TestApplicationTypeCustomizer; import io.spring.initializr.generator.spring.code.TestSourceCodeCustomizer; import io.spring.initializr.generator.spring.code.TestSourceCodeProjectContributor; -import io.spring.initializr.metadata.InitializrMetadata; import org.springframework.beans.factory.ObjectProvider; import org.springframework.context.annotation.Bean; @@ -80,8 +79,8 @@ public class KotlinProjectGenerationConfiguration { } @Bean - public KotlinProjectSettings kotlinProjectSettings(InitializrMetadata metadata) { - return new MetadataKotlinProjectSettings(this.projectDescription, metadata); + public KotlinProjectSettings kotlinProjectSettings(KotlinVersionResolver kotlinVersionResolver) { + return new SimpleKotlinProjectSettings(kotlinVersionResolver.resolveKotlinVersion(this.projectDescription)); } } diff --git a/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/code/kotlin/MetadataKotlinProjectSettings.java b/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/code/kotlin/KotlinVersionResolver.java similarity index 56% rename from initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/code/kotlin/MetadataKotlinProjectSettings.java rename to initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/code/kotlin/KotlinVersionResolver.java index fd512a81..d3e8e4d0 100644 --- a/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/code/kotlin/MetadataKotlinProjectSettings.java +++ b/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/code/kotlin/KotlinVersionResolver.java @@ -17,25 +17,21 @@ package io.spring.initializr.generator.spring.code.kotlin; import io.spring.initializr.generator.project.ResolvedProjectDescription; -import io.spring.initializr.metadata.InitializrMetadata; /** - * A {@link KotlinProjectSettings} that resolves the version to use from the metadata. + * Strategy for resolving a Kotlin version from a platform version. * - * @author Stephane Nicoll + * @author Andy Wilkinson */ -public class MetadataKotlinProjectSettings implements KotlinProjectSettings { +@FunctionalInterface +public interface KotlinVersionResolver { - private final String version; - - public MetadataKotlinProjectSettings(ResolvedProjectDescription projectDescription, InitializrMetadata metadata) { - this.version = metadata.getConfiguration().getEnv().getKotlin() - .resolveKotlinVersion(projectDescription.getPlatformVersion()); - } - - @Override - public String getVersion() { - return this.version; - } + /** + * Resolves the Kotlin version to use for the generation of the project with the given + * {@code description}. + * @param description the description of the project being generated + * @return the corresponding Kotlin version + */ + String resolveKotlinVersion(ResolvedProjectDescription description); } diff --git a/initializr-generator-spring/src/main/resources/META-INF/spring.factories b/initializr-generator-spring/src/main/resources/META-INF/spring.factories index 3408105c..79eb7e6f 100644 --- a/initializr-generator-spring/src/main/resources/META-INF/spring.factories +++ b/initializr-generator-spring/src/main/resources/META-INF/spring.factories @@ -8,4 +8,7 @@ io.spring.initializr.generator.spring.code.java.JavaProjectGenerationConfigurati io.spring.initializr.generator.spring.code.kotlin.KotlinProjectGenerationConfiguration,\ io.spring.initializr.generator.spring.configuration.ApplicationConfigurationProjectGenerationConfiguration,\ io.spring.initializr.generator.spring.documentation.HelpDocumentProjectGenerationConfiguration,\ -io.spring.initializr.generator.spring.scm.git.GitProjectGenerationConfiguration \ No newline at end of file +io.spring.initializr.generator.spring.scm.git.GitProjectGenerationConfiguration + +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +io.spring.initializr.generator.spring.autoconfigure.GeneratorSpringAutoConfiguration diff --git a/initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/AbstractComplianceTests.java b/initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/AbstractComplianceTests.java index 39520431..5b3045a1 100644 --- a/initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/AbstractComplianceTests.java +++ b/initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/AbstractComplianceTests.java @@ -27,6 +27,8 @@ import io.spring.initializr.generator.language.Language; import io.spring.initializr.generator.project.ProjectDescription; import io.spring.initializr.generator.project.ProjectGenerationContext; import io.spring.initializr.generator.project.ResolvedProjectDescription; +import io.spring.initializr.generator.spring.code.kotlin.InitializrMetadataKotlinVersionResolver; +import io.spring.initializr.generator.spring.code.kotlin.KotlinVersionResolver; import io.spring.initializr.generator.spring.test.InitializrMetadataTestBuilder; import io.spring.initializr.generator.spring.test.ProjectAssert; import io.spring.initializr.generator.test.project.ProjectGeneratorTester; @@ -102,6 +104,8 @@ public abstract class AbstractComplianceTests { context.getBean(ResolvedProjectDescription.class).getPlatformVersion())); context.registerBean(IndentingWriterFactory.class, () -> IndentingWriterFactory.create(new SimpleIndentStrategy("\t"))); + context.registerBean(KotlinVersionResolver.class, + () -> new InitializrMetadataKotlinVersionResolver(() -> metadata)); } private void setupProjectDescription(Language language, String version, BuildSystem buildSystem,