Skip to content

Commit f187225

Browse files
committed
Add .kotlin directory to .gitignore if Gradle is used
Closes gh-1501
1 parent 8953ddd commit f187225

File tree

5 files changed

+60
-3
lines changed

5 files changed

+60
-3
lines changed

initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/code/kotlin/KotlinProjectGenerationConfiguration.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
package io.spring.initializr.generator.spring.code.kotlin;
1818

19+
import io.spring.initializr.generator.buildsystem.gradle.GradleBuildSystem;
20+
import io.spring.initializr.generator.condition.ConditionalOnBuildSystem;
1921
import io.spring.initializr.generator.condition.ConditionalOnLanguage;
2022
import io.spring.initializr.generator.io.IndentingWriterFactory;
2123
import io.spring.initializr.generator.language.kotlin.KotlinCompilationUnit;
@@ -32,6 +34,8 @@
3234
import io.spring.initializr.generator.spring.code.TestApplicationTypeCustomizer;
3335
import io.spring.initializr.generator.spring.code.TestSourceCodeCustomizer;
3436
import io.spring.initializr.generator.spring.code.TestSourceCodeProjectContributor;
37+
import io.spring.initializr.generator.spring.scm.git.GitIgnore;
38+
import io.spring.initializr.generator.spring.scm.git.GitIgnoreCustomizer;
3539
import io.spring.initializr.metadata.InitializrMetadata;
3640

3741
import org.springframework.beans.factory.ObjectProvider;
@@ -44,6 +48,7 @@
4448
*
4549
* @author Andy Wilkinson
4650
* @author Stephane Nicoll
51+
* @author Moritz Halbritter
4752
*/
4853
@ProjectGenerationConfiguration
4954
@ConditionalOnLanguage(KotlinLanguage.ID)
@@ -79,6 +84,15 @@ public TestSourceCodeProjectContributor<KotlinTypeDeclaration, KotlinCompilation
7984
testSourceCodeCustomizers);
8085
}
8186

87+
@Bean
88+
@ConditionalOnBuildSystem(GradleBuildSystem.ID)
89+
public GitIgnoreCustomizer kotlinGradlePluginGitIgnoreCustomizer() {
90+
return (gitIgnore) -> {
91+
GitIgnore.GitIgnoreSection section = gitIgnore.addSectionIfAbsent("Kotlin");
92+
section.add(".kotlin");
93+
};
94+
}
95+
8296
@Bean
8397
public KotlinProjectSettings kotlinProjectSettings(ObjectProvider<KotlinVersionResolver> kotlinVersionResolver,
8498
InitializrMetadata metadata) {

initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/scm/git/GitIgnore.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,21 @@ public void addSection(GitIgnoreSection section) {
6060
this.sections.add(section);
6161
}
6262

63+
/**
64+
* Adds a section if it doesn't already exist.
65+
* @param sectionName the name of the section
66+
* @return the newly added section or the existing one
67+
*/
68+
public GitIgnoreSection addSectionIfAbsent(String sectionName) {
69+
GitIgnoreSection section = getSection(sectionName);
70+
if (section != null) {
71+
return section;
72+
}
73+
section = new GitIgnoreSection(sectionName);
74+
addSection(section);
75+
return section;
76+
}
77+
6378
public GitIgnoreSection getSection(String sectionName) {
6479
if ("general".equalsIgnoreCase(sectionName)) {
6580
return this.general;

initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/code/kotlin/KotlinProjectGenerationConfigurationTests.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,17 @@
1919
import java.nio.file.Path;
2020
import java.util.Collections;
2121

22+
import io.spring.initializr.generator.buildsystem.BuildSystem;
2223
import io.spring.initializr.generator.buildsystem.Dependency;
24+
import io.spring.initializr.generator.buildsystem.gradle.GradleBuildSystem;
2325
import io.spring.initializr.generator.buildsystem.maven.MavenBuildSystem;
2426
import io.spring.initializr.generator.language.kotlin.KotlinLanguage;
2527
import io.spring.initializr.generator.packaging.war.WarPackaging;
2628
import io.spring.initializr.generator.project.MutableProjectDescription;
2729
import io.spring.initializr.generator.spring.build.BuildProjectGenerationConfiguration;
2830
import io.spring.initializr.generator.spring.build.maven.MavenProjectGenerationConfiguration;
2931
import io.spring.initializr.generator.spring.code.SourceCodeProjectGenerationConfiguration;
32+
import io.spring.initializr.generator.spring.scm.git.GitProjectGenerationConfiguration;
3033
import io.spring.initializr.generator.test.InitializrMetadataTestBuilder;
3134
import io.spring.initializr.generator.test.project.ProjectAssetTester;
3235
import io.spring.initializr.generator.test.project.ProjectStructure;
@@ -42,6 +45,7 @@
4245
* Tests for {@link KotlinProjectGenerationConfiguration}.
4346
*
4447
* @author Stephane Nicoll
48+
* @author Moritz Halbritter
4549
*/
4650
class KotlinProjectGenerationConfigurationTests {
4751

@@ -52,7 +56,7 @@ void setup(@TempDir Path directory) {
5256
this.projectTester = new ProjectAssetTester().withIndentingWriterFactory()
5357
.withConfiguration(SourceCodeProjectGenerationConfiguration.class,
5458
KotlinProjectGenerationConfiguration.class, BuildProjectGenerationConfiguration.class,
55-
MavenProjectGenerationConfiguration.class)
59+
MavenProjectGenerationConfiguration.class, GitProjectGenerationConfiguration.class)
5660
.withDirectory(directory)
5761
.withBean(InitializrMetadata.class, () -> {
5862
io.spring.initializr.metadata.Dependency dependency = io.spring.initializr.metadata.Dependency
@@ -65,7 +69,9 @@ void setup(@TempDir Path directory) {
6569
if (description.getPlatformVersion() == null) {
6670
description.setPlatformVersion(Version.parse("2.1.0.RELEASE"));
6771
}
68-
description.setBuildSystem(new MavenBuildSystem());
72+
if (description.getBuildSystem() == null) {
73+
description.setBuildSystem(new MavenBuildSystem());
74+
}
6975
});
7076
}
7177

@@ -125,4 +131,12 @@ void jacksonKotlinModuleShouldBeAddedWhenJsonFacetPresent() {
125131
" <artifactId>jackson-module-kotlin</artifactId>", " </dependency>");
126132
}
127133

134+
@Test
135+
void addsKotlinGradlePluginGitIgnoreEntry() {
136+
MutableProjectDescription description = new MutableProjectDescription();
137+
description.setBuildSystem(BuildSystem.forId(GradleBuildSystem.ID));
138+
ProjectStructure project = this.projectTester.generate(description);
139+
assertThat(project).textFile(".gitignore").contains("### Kotlin ###", ".kotlin");
140+
}
141+
128142
}

initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/scm/git/GitIgnoreTests.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,15 @@ void shouldFailIfSectionAlreadyExists() {
5858
.withMessageContaining("Section with name 'test' already exists");
5959
}
6060

61+
@Test
62+
void addSectionIfAbsentShouldNotFail() {
63+
GitIgnore.GitIgnoreSection section = this.gitIgnore.addSectionIfAbsent("test");
64+
assertThat(section).isNotNull();
65+
GitIgnore.GitIgnoreSection section2 = this.gitIgnore.addSectionIfAbsent("test");
66+
assertThat(section2).isNotNull();
67+
assertThat(section2).isSameAs(section);
68+
}
69+
6170
private String write(GitIgnore gitIgnore) throws IOException {
6271
StringWriter stringWriter = new StringWriter();
6372
try (PrintWriter writer = new PrintWriter(stringWriter)) {

initializr-service-sample/src/main/resources/application.yml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
initializr:
2+
env:
3+
kotlin:
4+
default-version: "1.9.22"
25
group-id:
36
value: org.acme
47
dependencies:
@@ -18,8 +21,10 @@ initializr:
1821
id: groovy
1922
default: false
2023
javaVersions:
21-
- id: 11
24+
- id: 17
2225
default: true
26+
- id: 11
27+
default: false
2328
- id: 1.8
2429
name: 8
2530
default: false

0 commit comments

Comments
 (0)