Honour custom application name in Kotlin main class

Closes gh-826
This commit is contained in:
Stephane Nicoll
2019-02-13 09:53:49 +01:00
parent fe66bbab78
commit b0d7bdd343
11 changed files with 182 additions and 4 deletions

View File

@@ -82,14 +82,16 @@ class KotlinProjectGenerationDefaultContributorsConfiguration {
}
@Bean
public MainCompilationUnitCustomizer<KotlinTypeDeclaration, KotlinCompilationUnit> boot15MainFunctionContributor() {
public MainCompilationUnitCustomizer<KotlinTypeDeclaration, KotlinCompilationUnit> boot15MainFunctionContributor(
ResolvedProjectDescription projectDescription) {
return (compilationUnit) -> compilationUnit
.addTopLevelFunction(KotlinFunctionDeclaration.function("main")
.parameters(new Parameter("Array<String>", "args"))
.body(new KotlinExpressionStatement(
new KotlinFunctionInvocation(
"org.springframework.boot.SpringApplication",
"run", "DemoApplication::class.java",
"run", projectDescription.getApplicationName()
+ "::class.java",
"*args"))));
}
@@ -110,14 +112,16 @@ class KotlinProjectGenerationDefaultContributorsConfiguration {
}
@Bean
public MainCompilationUnitCustomizer<KotlinTypeDeclaration, KotlinCompilationUnit> mainFunctionContributor() {
public MainCompilationUnitCustomizer<KotlinTypeDeclaration, KotlinCompilationUnit> mainFunctionContributor(
ResolvedProjectDescription projectDescription) {
return (compilationUnit) -> compilationUnit
.addTopLevelFunction(KotlinFunctionDeclaration.function("main")
.parameters(new Parameter("Array<String>", "args"))
.body(new KotlinExpressionStatement(
new KotlinReifiedFunctionInvocation(
"org.springframework.boot.runApplication",
"DemoApplication", "*args"))));
projectDescription.getApplicationName(),
"*args"))));
}
}

View File

@@ -146,6 +146,49 @@ class CodeComplianceTests extends AbstractComplianceTests {
+ "ServletInitializer." + getExpectedExtension(extension)));
}
@ParameterizedTest
@MethodSource("parameters")
void currentGenerationCustomCoordinates(Language language, String extension) {
ProjectAssert project = generateProject(language, maven, "2.1.1.RELEASE",
(description) -> {
description.setGroupId("com.example.acme");
description.setArtifactId("my-project");
description.setPackageName("com.example.acme.myproject");
description.setApplicationName("MyProjectApplication");
});
project.isGenericProject("com.example.acme.myproject", "MyProjectApplication",
language.id(), extension);
project.sourceCodeAssert("src/main/" + language
+ "/com/example/acme/myproject/MyProjectApplication." + extension)
.equalsTo(new ClassPathResource(
"project/" + language + "/standard/MyProjectApplication."
+ getExpectedExtension(extension)));
project.sourceCodeAssert("src/test/" + language
+ "/com/example/acme/myproject/MyProjectApplicationTests." + extension)
.equalsTo(new ClassPathResource(
"project/" + language + "/standard/MyProjectApplicationTests."
+ getExpectedExtension(extension)));
}
@ParameterizedTest
@MethodSource("parameters")
void previousGenerationCustomCoordinates(Language language, String extension) {
ProjectAssert project = generateProject(language, maven, "1.5.18.RELEASE",
(description) -> {
description.setGroupId("com.example.acme");
description.setArtifactId("my-project");
description.setPackageName("com.example.acme.myproject");
description.setApplicationName("MyProjectApplication");
});
project.isGenericProject("com.example.acme.myproject", "MyProjectApplication",
language.id(), extension);
project.sourceCodeAssert("src/main/" + language
+ "/com/example/acme/myproject/MyProjectApplication." + extension)
.equalsTo(new ClassPathResource(
"project/" + language + "/previous/MyProjectApplication."
+ getExpectedExtension(extension)));
}
private String getExpectedExtension(String extension) {
return extension + ".gen";
}

View File

@@ -0,0 +1,14 @@
package com.example.acme.myproject
import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.SpringBootApplication
@SpringBootApplication
class MyProjectApplication {
static void main(String[] args) {
SpringApplication.run(MyProjectApplication, args)
}
}

View File

@@ -0,0 +1,14 @@
package com.example.acme.myproject
import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.SpringBootApplication
@SpringBootApplication
class MyProjectApplication {
static void main(String[] args) {
SpringApplication.run(MyProjectApplication, args)
}
}

View File

@@ -0,0 +1,17 @@
package com.example.acme.myproject
import org.junit.Test
import org.junit.runner.RunWith
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.test.context.junit4.SpringRunner
@RunWith(SpringRunner)
@SpringBootTest
class MyProjectApplicationTests {
@Test
void contextLoads() {
}
}

View File

@@ -0,0 +1,14 @@
package com.example.acme.myproject;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MyProjectApplication {
public static void main(String[] args) {
SpringApplication.run(MyProjectApplication.class, args);
}
}

View File

@@ -0,0 +1,14 @@
package com.example.acme.myproject;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MyProjectApplication {
public static void main(String[] args) {
SpringApplication.run(MyProjectApplication.class, args);
}
}

View File

@@ -0,0 +1,17 @@
package com.example.acme.myproject;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyProjectApplicationTests {
@Test
public void contextLoads() {
}
}

View File

@@ -0,0 +1,12 @@
package com.example.acme.myproject
import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.SpringBootApplication
@SpringBootApplication
class MyProjectApplication
fun main(args: Array<String>) {
SpringApplication.run(MyProjectApplication::class.java, *args)
}

View File

@@ -0,0 +1,12 @@
package com.example.acme.myproject
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
@SpringBootApplication
class MyProjectApplication
fun main(args: Array<String>) {
runApplication<MyProjectApplication>(*args)
}

View File

@@ -0,0 +1,17 @@
package com.example.acme.myproject
import org.junit.Test
import org.junit.runner.RunWith
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.test.context.junit4.SpringRunner
@RunWith(SpringRunner::class)
@SpringBootTest
class MyProjectApplicationTests {
@Test
fun contextLoads() {
}
}