mirror of
https://gitee.com/dcren/initializr.git
synced 2025-12-17 17:41:31 +08:00
Add modifiers support to TypeDeclaration
Closes gh-908
This commit is contained in:
@@ -46,18 +46,21 @@ class JavaProjectGenerationDefaultContributorsConfiguration {
|
|||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public MainApplicationTypeCustomizer<JavaTypeDeclaration> mainMethodContributor() {
|
public MainApplicationTypeCustomizer<JavaTypeDeclaration> mainMethodContributor() {
|
||||||
return (typeDeclaration) -> typeDeclaration
|
return (typeDeclaration) -> {
|
||||||
.addMethodDeclaration(JavaMethodDeclaration.method("main")
|
typeDeclaration.modifiers(Modifier.PUBLIC);
|
||||||
.modifiers(Modifier.PUBLIC | Modifier.STATIC).returning("void")
|
typeDeclaration.addMethodDeclaration(JavaMethodDeclaration.method("main")
|
||||||
.parameters(new Parameter("java.lang.String[]", "args"))
|
.modifiers(Modifier.PUBLIC | Modifier.STATIC).returning("void")
|
||||||
.body(new JavaExpressionStatement(new JavaMethodInvocation(
|
.parameters(new Parameter("java.lang.String[]", "args"))
|
||||||
"org.springframework.boot.SpringApplication", "run",
|
.body(new JavaExpressionStatement(new JavaMethodInvocation(
|
||||||
typeDeclaration.getName() + ".class", "args"))));
|
"org.springframework.boot.SpringApplication", "run",
|
||||||
|
typeDeclaration.getName() + ".class", "args"))));
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public TestApplicationTypeCustomizer<JavaTypeDeclaration> testMethodContributor() {
|
public TestApplicationTypeCustomizer<JavaTypeDeclaration> testMethodContributor() {
|
||||||
return (typeDeclaration) -> {
|
return (typeDeclaration) -> {
|
||||||
|
typeDeclaration.modifiers(Modifier.PUBLIC);
|
||||||
JavaMethodDeclaration method = JavaMethodDeclaration.method("contextLoads")
|
JavaMethodDeclaration method = JavaMethodDeclaration.method("contextLoads")
|
||||||
.modifiers(Modifier.PUBLIC).returning("void").body();
|
.modifiers(Modifier.PUBLIC).returning("void").body();
|
||||||
method.annotate(Annotation.name("org.junit.Test"));
|
method.annotate(Annotation.name("org.junit.Test"));
|
||||||
@@ -76,6 +79,7 @@ class JavaProjectGenerationDefaultContributorsConfiguration {
|
|||||||
public ServletInitializerCustomizer<JavaTypeDeclaration> javaServletInitializerCustomizer(
|
public ServletInitializerCustomizer<JavaTypeDeclaration> javaServletInitializerCustomizer(
|
||||||
ResolvedProjectDescription projectDescription) {
|
ResolvedProjectDescription projectDescription) {
|
||||||
return (typeDeclaration) -> {
|
return (typeDeclaration) -> {
|
||||||
|
typeDeclaration.modifiers(Modifier.PUBLIC);
|
||||||
JavaMethodDeclaration configure = JavaMethodDeclaration
|
JavaMethodDeclaration configure = JavaMethodDeclaration
|
||||||
.method("configure").modifiers(Modifier.PROTECTED)
|
.method("configure").modifiers(Modifier.PROTECTED)
|
||||||
.returning(
|
.returning(
|
||||||
|
|||||||
@@ -49,18 +49,23 @@ import io.spring.initializr.generator.language.SourceCodeWriter;
|
|||||||
*/
|
*/
|
||||||
public class GroovySourceCodeWriter implements SourceCodeWriter<GroovySourceCode> {
|
public class GroovySourceCodeWriter implements SourceCodeWriter<GroovySourceCode> {
|
||||||
|
|
||||||
|
private static final Map<Predicate<Integer>, String> TYPE_MODIFIERS;
|
||||||
|
|
||||||
private static final Map<Predicate<Integer>, String> METHOD_MODIFIERS;
|
private static final Map<Predicate<Integer>, String> METHOD_MODIFIERS;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
Map<Predicate<Integer>, String> methodModifiers = new LinkedHashMap<>();
|
Map<Predicate<Integer>, String> typeModifiers = new LinkedHashMap<>();
|
||||||
methodModifiers.put(Modifier::isProtected, "protected");
|
typeModifiers.put(Modifier::isProtected, "protected");
|
||||||
methodModifiers.put(Modifier::isPrivate, "private");
|
typeModifiers.put(Modifier::isPrivate, "private");
|
||||||
methodModifiers.put(Modifier::isAbstract, "abstract");
|
typeModifiers.put(Modifier::isAbstract, "abstract");
|
||||||
methodModifiers.put(Modifier::isStatic, "static");
|
typeModifiers.put(Modifier::isStatic, "static");
|
||||||
methodModifiers.put(Modifier::isFinal, "final");
|
typeModifiers.put(Modifier::isFinal, "final");
|
||||||
|
typeModifiers.put(Modifier::isStrict, "strictfp");
|
||||||
|
TYPE_MODIFIERS = typeModifiers;
|
||||||
|
Map<Predicate<Integer>, String> methodModifiers = new LinkedHashMap<>(
|
||||||
|
typeModifiers);
|
||||||
methodModifiers.put(Modifier::isSynchronized, "synchronized");
|
methodModifiers.put(Modifier::isSynchronized, "synchronized");
|
||||||
methodModifiers.put(Modifier::isNative, "native");
|
methodModifiers.put(Modifier::isNative, "native");
|
||||||
methodModifiers.put(Modifier::isStrict, "strictfp");
|
|
||||||
METHOD_MODIFIERS = methodModifiers;
|
METHOD_MODIFIERS = methodModifiers;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,6 +102,7 @@ public class GroovySourceCodeWriter implements SourceCodeWriter<GroovySourceCode
|
|||||||
}
|
}
|
||||||
for (GroovyTypeDeclaration type : compilationUnit.getTypeDeclarations()) {
|
for (GroovyTypeDeclaration type : compilationUnit.getTypeDeclarations()) {
|
||||||
writeAnnotations(writer, type);
|
writeAnnotations(writer, type);
|
||||||
|
writeModifiers(writer, TYPE_MODIFIERS, type.getModifiers());
|
||||||
writer.print("class " + type.getName());
|
writer.print("class " + type.getName());
|
||||||
if (type.getExtends() != null) {
|
if (type.getExtends() != null) {
|
||||||
writer.print(" extends " + getUnqualifiedName(type.getExtends()));
|
writer.print(" extends " + getUnqualifiedName(type.getExtends()));
|
||||||
@@ -167,7 +173,7 @@ public class GroovySourceCodeWriter implements SourceCodeWriter<GroovySourceCode
|
|||||||
private void writeMethodDeclaration(IndentingWriter writer,
|
private void writeMethodDeclaration(IndentingWriter writer,
|
||||||
GroovyMethodDeclaration methodDeclaration) {
|
GroovyMethodDeclaration methodDeclaration) {
|
||||||
writeAnnotations(writer, methodDeclaration);
|
writeAnnotations(writer, methodDeclaration);
|
||||||
writeMethodModifiers(writer, methodDeclaration);
|
writeModifiers(writer, METHOD_MODIFIERS, methodDeclaration.getModifiers());
|
||||||
writer.print(getUnqualifiedName(methodDeclaration.getReturnType()) + " "
|
writer.print(getUnqualifiedName(methodDeclaration.getReturnType()) + " "
|
||||||
+ methodDeclaration.getName() + "(");
|
+ methodDeclaration.getName() + "(");
|
||||||
List<Parameter> parameters = methodDeclaration.getParameters();
|
List<Parameter> parameters = methodDeclaration.getParameters();
|
||||||
@@ -196,10 +202,10 @@ public class GroovySourceCodeWriter implements SourceCodeWriter<GroovySourceCode
|
|||||||
writer.println();
|
writer.println();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void writeMethodModifiers(IndentingWriter writer,
|
private void writeModifiers(IndentingWriter writer,
|
||||||
GroovyMethodDeclaration methodDeclaration) {
|
Map<Predicate<Integer>, String> availableModifiers, int declaredModifiers) {
|
||||||
String modifiers = METHOD_MODIFIERS.entrySet().stream()
|
String modifiers = availableModifiers.entrySet().stream()
|
||||||
.filter((entry) -> entry.getKey().test(methodDeclaration.getModifiers()))
|
.filter((entry) -> entry.getKey().test(declaredModifiers))
|
||||||
.map(Entry::getValue).collect(Collectors.joining(" "));
|
.map(Entry::getValue).collect(Collectors.joining(" "));
|
||||||
if (!modifiers.isEmpty()) {
|
if (!modifiers.isEmpty()) {
|
||||||
writer.print(modifiers);
|
writer.print(modifiers);
|
||||||
|
|||||||
@@ -28,12 +28,22 @@ import io.spring.initializr.generator.language.TypeDeclaration;
|
|||||||
*/
|
*/
|
||||||
public class GroovyTypeDeclaration extends TypeDeclaration {
|
public class GroovyTypeDeclaration extends TypeDeclaration {
|
||||||
|
|
||||||
|
private int modifiers;
|
||||||
|
|
||||||
private final List<GroovyMethodDeclaration> methodDeclarations = new ArrayList<>();
|
private final List<GroovyMethodDeclaration> methodDeclarations = new ArrayList<>();
|
||||||
|
|
||||||
GroovyTypeDeclaration(String name) {
|
GroovyTypeDeclaration(String name) {
|
||||||
super(name);
|
super(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void modifiers(int modifiers) {
|
||||||
|
this.modifiers = modifiers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getModifiers() {
|
||||||
|
return this.modifiers;
|
||||||
|
}
|
||||||
|
|
||||||
public void addMethodDeclaration(GroovyMethodDeclaration methodDeclaration) {
|
public void addMethodDeclaration(GroovyMethodDeclaration methodDeclaration) {
|
||||||
this.methodDeclarations.add(methodDeclaration);
|
this.methodDeclarations.add(methodDeclaration);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
package io.spring.initializr.generator.language.java;
|
package io.spring.initializr.generator.language.java;
|
||||||
|
|
||||||
import java.lang.reflect.Modifier;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@@ -99,7 +98,7 @@ public final class JavaMethodDeclaration implements Annotatable {
|
|||||||
|
|
||||||
private String returnType = "void";
|
private String returnType = "void";
|
||||||
|
|
||||||
private int modifiers = Modifier.PUBLIC;
|
private int modifiers;
|
||||||
|
|
||||||
private Builder(String name) {
|
private Builder(String name) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
|
|||||||
@@ -49,19 +49,24 @@ import io.spring.initializr.generator.language.SourceCodeWriter;
|
|||||||
*/
|
*/
|
||||||
public class JavaSourceCodeWriter implements SourceCodeWriter<JavaSourceCode> {
|
public class JavaSourceCodeWriter implements SourceCodeWriter<JavaSourceCode> {
|
||||||
|
|
||||||
|
private static final Map<Predicate<Integer>, String> TYPE_MODIFIERS;
|
||||||
|
|
||||||
private static final Map<Predicate<Integer>, String> METHOD_MODIFIERS;
|
private static final Map<Predicate<Integer>, String> METHOD_MODIFIERS;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
Map<Predicate<Integer>, String> methodModifiers = new LinkedHashMap<>();
|
Map<Predicate<Integer>, String> typeModifiers = new LinkedHashMap<>();
|
||||||
methodModifiers.put(Modifier::isPublic, "public");
|
typeModifiers.put(Modifier::isPublic, "public");
|
||||||
methodModifiers.put(Modifier::isProtected, "protected");
|
typeModifiers.put(Modifier::isProtected, "protected");
|
||||||
methodModifiers.put(Modifier::isPrivate, "private");
|
typeModifiers.put(Modifier::isPrivate, "private");
|
||||||
methodModifiers.put(Modifier::isAbstract, "abstract");
|
typeModifiers.put(Modifier::isAbstract, "abstract");
|
||||||
methodModifiers.put(Modifier::isStatic, "static");
|
typeModifiers.put(Modifier::isStatic, "static");
|
||||||
methodModifiers.put(Modifier::isFinal, "final");
|
typeModifiers.put(Modifier::isFinal, "final");
|
||||||
|
typeModifiers.put(Modifier::isStrict, "strictfp");
|
||||||
|
TYPE_MODIFIERS = typeModifiers;
|
||||||
|
Map<Predicate<Integer>, String> methodModifiers = new LinkedHashMap<>(
|
||||||
|
typeModifiers);
|
||||||
methodModifiers.put(Modifier::isSynchronized, "synchronized");
|
methodModifiers.put(Modifier::isSynchronized, "synchronized");
|
||||||
methodModifiers.put(Modifier::isNative, "native");
|
methodModifiers.put(Modifier::isNative, "native");
|
||||||
methodModifiers.put(Modifier::isStrict, "strictfp");
|
|
||||||
METHOD_MODIFIERS = methodModifiers;
|
METHOD_MODIFIERS = methodModifiers;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,7 +103,8 @@ public class JavaSourceCodeWriter implements SourceCodeWriter<JavaSourceCode> {
|
|||||||
}
|
}
|
||||||
for (JavaTypeDeclaration type : compilationUnit.getTypeDeclarations()) {
|
for (JavaTypeDeclaration type : compilationUnit.getTypeDeclarations()) {
|
||||||
writeAnnotations(writer, type);
|
writeAnnotations(writer, type);
|
||||||
writer.print("public class " + type.getName());
|
writeModifiers(writer, TYPE_MODIFIERS, type.getModifiers());
|
||||||
|
writer.print("class " + type.getName());
|
||||||
if (type.getExtends() != null) {
|
if (type.getExtends() != null) {
|
||||||
writer.print(" extends " + getUnqualifiedName(type.getExtends()));
|
writer.print(" extends " + getUnqualifiedName(type.getExtends()));
|
||||||
}
|
}
|
||||||
@@ -169,7 +175,7 @@ public class JavaSourceCodeWriter implements SourceCodeWriter<JavaSourceCode> {
|
|||||||
private void writeMethodDeclaration(IndentingWriter writer,
|
private void writeMethodDeclaration(IndentingWriter writer,
|
||||||
JavaMethodDeclaration methodDeclaration) {
|
JavaMethodDeclaration methodDeclaration) {
|
||||||
writeAnnotations(writer, methodDeclaration);
|
writeAnnotations(writer, methodDeclaration);
|
||||||
writeMethodModifiers(writer, methodDeclaration);
|
writeModifiers(writer, METHOD_MODIFIERS, methodDeclaration.getModifiers());
|
||||||
writer.print(getUnqualifiedName(methodDeclaration.getReturnType()) + " "
|
writer.print(getUnqualifiedName(methodDeclaration.getReturnType()) + " "
|
||||||
+ methodDeclaration.getName() + "(");
|
+ methodDeclaration.getName() + "(");
|
||||||
List<Parameter> parameters = methodDeclaration.getParameters();
|
List<Parameter> parameters = methodDeclaration.getParameters();
|
||||||
@@ -199,10 +205,10 @@ public class JavaSourceCodeWriter implements SourceCodeWriter<JavaSourceCode> {
|
|||||||
writer.println();
|
writer.println();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void writeMethodModifiers(IndentingWriter writer,
|
private void writeModifiers(IndentingWriter writer,
|
||||||
JavaMethodDeclaration methodDeclaration) {
|
Map<Predicate<Integer>, String> availableModifiers, int declaredModifiers) {
|
||||||
String modifiers = METHOD_MODIFIERS.entrySet().stream()
|
String modifiers = availableModifiers.entrySet().stream()
|
||||||
.filter((entry) -> entry.getKey().test(methodDeclaration.getModifiers()))
|
.filter((entry) -> entry.getKey().test(declaredModifiers))
|
||||||
.map(Entry::getValue).collect(Collectors.joining(" "));
|
.map(Entry::getValue).collect(Collectors.joining(" "));
|
||||||
if (!modifiers.isEmpty()) {
|
if (!modifiers.isEmpty()) {
|
||||||
writer.print(modifiers);
|
writer.print(modifiers);
|
||||||
|
|||||||
@@ -28,12 +28,22 @@ import io.spring.initializr.generator.language.TypeDeclaration;
|
|||||||
*/
|
*/
|
||||||
public class JavaTypeDeclaration extends TypeDeclaration {
|
public class JavaTypeDeclaration extends TypeDeclaration {
|
||||||
|
|
||||||
|
private int modifiers;
|
||||||
|
|
||||||
private final List<JavaMethodDeclaration> methodDeclarations = new ArrayList<>();
|
private final List<JavaMethodDeclaration> methodDeclarations = new ArrayList<>();
|
||||||
|
|
||||||
JavaTypeDeclaration(String name) {
|
JavaTypeDeclaration(String name) {
|
||||||
super(name);
|
super(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void modifiers(int modifiers) {
|
||||||
|
this.modifiers = modifiers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getModifiers() {
|
||||||
|
return this.modifiers;
|
||||||
|
}
|
||||||
|
|
||||||
public void addMethodDeclaration(JavaMethodDeclaration methodDeclaration) {
|
public void addMethodDeclaration(JavaMethodDeclaration methodDeclaration) {
|
||||||
this.methodDeclarations.add(methodDeclaration);
|
this.methodDeclarations.add(methodDeclaration);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -78,6 +78,7 @@ public class KotlinSourceCodeWriter implements SourceCodeWriter<KotlinSourceCode
|
|||||||
}
|
}
|
||||||
for (KotlinTypeDeclaration type : compilationUnit.getTypeDeclarations()) {
|
for (KotlinTypeDeclaration type : compilationUnit.getTypeDeclarations()) {
|
||||||
writeAnnotations(writer, type);
|
writeAnnotations(writer, type);
|
||||||
|
writeModifiers(writer, type.getModifiers());
|
||||||
writer.print("class " + type.getName());
|
writer.print("class " + type.getName());
|
||||||
if (type.getExtends() != null) {
|
if (type.getExtends() != null) {
|
||||||
writer.print(" : " + getUnqualifiedName(type.getExtends()) + "()");
|
writer.print(" : " + getUnqualifiedName(type.getExtends()) + "()");
|
||||||
@@ -113,7 +114,7 @@ public class KotlinSourceCodeWriter implements SourceCodeWriter<KotlinSourceCode
|
|||||||
KotlinFunctionDeclaration functionDeclaration) {
|
KotlinFunctionDeclaration functionDeclaration) {
|
||||||
writer.println();
|
writer.println();
|
||||||
writeAnnotations(writer, functionDeclaration);
|
writeAnnotations(writer, functionDeclaration);
|
||||||
writeMethodModifiers(writer, functionDeclaration);
|
writeModifiers(writer, functionDeclaration.getModifiers());
|
||||||
writer.print("fun ");
|
writer.print("fun ");
|
||||||
writer.print(functionDeclaration.getName() + "(");
|
writer.print(functionDeclaration.getName() + "(");
|
||||||
List<Parameter> parameters = functionDeclaration.getParameters();
|
List<Parameter> parameters = functionDeclaration.getParameters();
|
||||||
@@ -195,9 +196,9 @@ public class KotlinSourceCodeWriter implements SourceCodeWriter<KotlinSourceCode
|
|||||||
return (values.size() > 1) ? "[" + result + "]" : result;
|
return (values.size() > 1) ? "[" + result + "]" : result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void writeMethodModifiers(IndentingWriter writer,
|
private void writeModifiers(IndentingWriter writer,
|
||||||
KotlinFunctionDeclaration functionDeclaration) {
|
List<KotlinModifier> declaredModifiers) {
|
||||||
String modifiers = functionDeclaration.getModifiers().stream()
|
String modifiers = declaredModifiers.stream()
|
||||||
.filter((entry) -> !entry.equals(KotlinModifier.PUBLIC)).sorted()
|
.filter((entry) -> !entry.equals(KotlinModifier.PUBLIC)).sorted()
|
||||||
.map((entry) -> entry.toString().toLowerCase(Locale.ENGLISH))
|
.map((entry) -> entry.toString().toLowerCase(Locale.ENGLISH))
|
||||||
.collect(Collectors.joining(" "));
|
.collect(Collectors.joining(" "));
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
package io.spring.initializr.generator.language.kotlin;
|
package io.spring.initializr.generator.language.kotlin;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import io.spring.initializr.generator.language.TypeDeclaration;
|
import io.spring.initializr.generator.language.TypeDeclaration;
|
||||||
@@ -28,12 +29,22 @@ import io.spring.initializr.generator.language.TypeDeclaration;
|
|||||||
*/
|
*/
|
||||||
public class KotlinTypeDeclaration extends TypeDeclaration {
|
public class KotlinTypeDeclaration extends TypeDeclaration {
|
||||||
|
|
||||||
|
private List<KotlinModifier> modifiers = new ArrayList<>();
|
||||||
|
|
||||||
private final List<KotlinFunctionDeclaration> functionDeclarations = new ArrayList<>();
|
private final List<KotlinFunctionDeclaration> functionDeclarations = new ArrayList<>();
|
||||||
|
|
||||||
KotlinTypeDeclaration(String name) {
|
KotlinTypeDeclaration(String name) {
|
||||||
super(name);
|
super(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void modifiers(KotlinModifier... modifiers) {
|
||||||
|
this.modifiers = Arrays.asList(modifiers);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<KotlinModifier> getModifiers() {
|
||||||
|
return this.modifiers;
|
||||||
|
}
|
||||||
|
|
||||||
public void addFunctionDeclaration(KotlinFunctionDeclaration methodDeclaration) {
|
public void addFunctionDeclaration(KotlinFunctionDeclaration methodDeclaration) {
|
||||||
this.functionDeclarations.add(methodDeclaration);
|
this.functionDeclarations.add(methodDeclaration);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,6 +64,18 @@ class GroovySourceCodeWriterTests {
|
|||||||
"}");
|
"}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void emptyTypeDeclarationWithModifiers() throws IOException {
|
||||||
|
GroovySourceCode sourceCode = new GroovySourceCode();
|
||||||
|
GroovyCompilationUnit compilationUnit = sourceCode
|
||||||
|
.createCompilationUnit("com.example", "Test");
|
||||||
|
GroovyTypeDeclaration test = compilationUnit.createTypeDeclaration("Test");
|
||||||
|
test.modifiers(Modifier.PUBLIC | Modifier.ABSTRACT);
|
||||||
|
List<String> lines = writeSingleType(sourceCode, "com/example/Test.groovy");
|
||||||
|
assertThat(lines).containsExactly("package com.example", "",
|
||||||
|
"abstract class Test {", "", "}");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void emptyTypeDeclarationWithSuperClass() throws IOException {
|
void emptyTypeDeclarationWithSuperClass() throws IOException {
|
||||||
GroovySourceCode sourceCode = new GroovySourceCode();
|
GroovySourceCode sourceCode = new GroovySourceCode();
|
||||||
|
|||||||
@@ -60,8 +60,20 @@ class JavaSourceCodeWriterTests {
|
|||||||
.createCompilationUnit("com.example", "Test");
|
.createCompilationUnit("com.example", "Test");
|
||||||
compilationUnit.createTypeDeclaration("Test");
|
compilationUnit.createTypeDeclaration("Test");
|
||||||
List<String> lines = writeSingleType(sourceCode, "com/example/Test.java");
|
List<String> lines = writeSingleType(sourceCode, "com/example/Test.java");
|
||||||
|
assertThat(lines).containsExactly("package com.example;", "", "class Test {", "",
|
||||||
|
"}");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void emptyTypeDeclarationWithModifiers() throws IOException {
|
||||||
|
JavaSourceCode sourceCode = new JavaSourceCode();
|
||||||
|
JavaCompilationUnit compilationUnit = sourceCode
|
||||||
|
.createCompilationUnit("com.example", "Test");
|
||||||
|
JavaTypeDeclaration test = compilationUnit.createTypeDeclaration("Test");
|
||||||
|
test.modifiers(Modifier.PROTECTED | Modifier.ABSTRACT);
|
||||||
|
List<String> lines = writeSingleType(sourceCode, "com/example/Test.java");
|
||||||
assertThat(lines).containsExactly("package com.example;", "",
|
assertThat(lines).containsExactly("package com.example;", "",
|
||||||
"public class Test {", "", "}");
|
"protected abstract class Test {", "", "}");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -74,7 +86,7 @@ class JavaSourceCodeWriterTests {
|
|||||||
List<String> lines = writeSingleType(sourceCode, "com/example/Test.java");
|
List<String> lines = writeSingleType(sourceCode, "com/example/Test.java");
|
||||||
assertThat(lines).containsExactly("package com.example;", "",
|
assertThat(lines).containsExactly("package com.example;", "",
|
||||||
"import com.example.build.TestParent;", "",
|
"import com.example.build.TestParent;", "",
|
||||||
"public class Test extends TestParent {", "", "}");
|
"class Test extends TestParent {", "", "}");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -83,15 +95,15 @@ class JavaSourceCodeWriterTests {
|
|||||||
JavaCompilationUnit compilationUnit = sourceCode
|
JavaCompilationUnit compilationUnit = sourceCode
|
||||||
.createCompilationUnit("com.example", "Test");
|
.createCompilationUnit("com.example", "Test");
|
||||||
JavaTypeDeclaration test = compilationUnit.createTypeDeclaration("Test");
|
JavaTypeDeclaration test = compilationUnit.createTypeDeclaration("Test");
|
||||||
test.addMethodDeclaration(
|
test.addMethodDeclaration(JavaMethodDeclaration.method("trim")
|
||||||
JavaMethodDeclaration.method("trim").returning("java.lang.String")
|
.returning("java.lang.String").modifiers(Modifier.PUBLIC)
|
||||||
.parameters(new Parameter("java.lang.String", "value"))
|
.parameters(new Parameter("java.lang.String", "value"))
|
||||||
.body(new JavaReturnStatement(
|
.body(new JavaReturnStatement(
|
||||||
new JavaMethodInvocation("value", "trim"))));
|
new JavaMethodInvocation("value", "trim"))));
|
||||||
List<String> lines = writeSingleType(sourceCode, "com/example/Test.java");
|
List<String> lines = writeSingleType(sourceCode, "com/example/Test.java");
|
||||||
assertThat(lines).containsExactly("package com.example;", "",
|
assertThat(lines).containsExactly("package com.example;", "", "class Test {", "",
|
||||||
"public class Test {", "", " public String trim(String value) {",
|
" public String trim(String value) {", " return value.trim();",
|
||||||
" return value.trim();", " }", "", "}");
|
" }", "", "}");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -112,7 +124,7 @@ class JavaSourceCodeWriterTests {
|
|||||||
assertThat(lines).containsExactly("package com.example;", "",
|
assertThat(lines).containsExactly("package com.example;", "",
|
||||||
"import org.springframework.boot.SpringApplication;",
|
"import org.springframework.boot.SpringApplication;",
|
||||||
"import org.springframework.boot.autoconfigure.SpringBootApplication;",
|
"import org.springframework.boot.autoconfigure.SpringBootApplication;",
|
||||||
"", "@SpringBootApplication", "public class Test {", "",
|
"", "@SpringBootApplication", "class Test {", "",
|
||||||
" public static void main(String[] args) {",
|
" public static void main(String[] args) {",
|
||||||
" SpringApplication.run(Test.class, args);", " }", "", "}");
|
" SpringApplication.run(Test.class, args);", " }", "", "}");
|
||||||
}
|
}
|
||||||
@@ -124,7 +136,7 @@ class JavaSourceCodeWriterTests {
|
|||||||
(builder) -> builder.attribute("counter", Integer.class, "42")));
|
(builder) -> builder.attribute("counter", Integer.class, "42")));
|
||||||
assertThat(lines).containsExactly("package com.example;", "",
|
assertThat(lines).containsExactly("package com.example;", "",
|
||||||
"import org.springframework.test.TestApplication;", "",
|
"import org.springframework.test.TestApplication;", "",
|
||||||
"@TestApplication(counter = 42)", "public class Test {", "", "}");
|
"@TestApplication(counter = 42)", "class Test {", "", "}");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -134,7 +146,7 @@ class JavaSourceCodeWriterTests {
|
|||||||
(builder) -> builder.attribute("name", String.class, "test")));
|
(builder) -> builder.attribute("name", String.class, "test")));
|
||||||
assertThat(lines).containsExactly("package com.example;", "",
|
assertThat(lines).containsExactly("package com.example;", "",
|
||||||
"import org.springframework.test.TestApplication;", "",
|
"import org.springframework.test.TestApplication;", "",
|
||||||
"@TestApplication(name = \"test\")", "public class Test {", "", "}");
|
"@TestApplication(name = \"test\")", "class Test {", "", "}");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -144,7 +156,7 @@ class JavaSourceCodeWriterTests {
|
|||||||
(builder) -> builder.attribute("value", String.class, "test")));
|
(builder) -> builder.attribute("value", String.class, "test")));
|
||||||
assertThat(lines).containsExactly("package com.example;", "",
|
assertThat(lines).containsExactly("package com.example;", "",
|
||||||
"import org.springframework.test.TestApplication;", "",
|
"import org.springframework.test.TestApplication;", "",
|
||||||
"@TestApplication(\"test\")", "public class Test {", "", "}");
|
"@TestApplication(\"test\")", "class Test {", "", "}");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -156,8 +168,7 @@ class JavaSourceCodeWriterTests {
|
|||||||
assertThat(lines).containsExactly("package com.example;", "",
|
assertThat(lines).containsExactly("package com.example;", "",
|
||||||
"import java.time.temporal.ChronoUnit;",
|
"import java.time.temporal.ChronoUnit;",
|
||||||
"import org.springframework.test.TestApplication;", "",
|
"import org.springframework.test.TestApplication;", "",
|
||||||
"@TestApplication(unit = ChronoUnit.SECONDS)", "public class Test {", "",
|
"@TestApplication(unit = ChronoUnit.SECONDS)", "class Test {", "", "}");
|
||||||
"}");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -169,8 +180,8 @@ class JavaSourceCodeWriterTests {
|
|||||||
assertThat(lines).containsExactly("package com.example;", "",
|
assertThat(lines).containsExactly("package com.example;", "",
|
||||||
"import com.example.One;", "import com.example.Two;",
|
"import com.example.One;", "import com.example.Two;",
|
||||||
"import org.springframework.test.TestApplication;", "",
|
"import org.springframework.test.TestApplication;", "",
|
||||||
"@TestApplication(target = { One.class, Two.class })",
|
"@TestApplication(target = { One.class, Two.class })", "class Test {", "",
|
||||||
"public class Test {", "", "}");
|
"}");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -184,7 +195,7 @@ class JavaSourceCodeWriterTests {
|
|||||||
"import com.example.One;", "import java.time.temporal.ChronoUnit;",
|
"import com.example.One;", "import java.time.temporal.ChronoUnit;",
|
||||||
"import org.springframework.test.TestApplication;", "",
|
"import org.springframework.test.TestApplication;", "",
|
||||||
"@TestApplication(target = One.class, unit = ChronoUnit.NANOS)",
|
"@TestApplication(target = One.class, unit = ChronoUnit.NANOS)",
|
||||||
"public class Test {", "", "}");
|
"class Test {", "", "}");
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<String> writeClassAnnotation(Annotation annotation) throws IOException {
|
private List<String> writeClassAnnotation(Annotation annotation) throws IOException {
|
||||||
@@ -208,8 +219,8 @@ class JavaSourceCodeWriterTests {
|
|||||||
test.addMethodDeclaration(method);
|
test.addMethodDeclaration(method);
|
||||||
List<String> lines = writeSingleType(sourceCode, "com/example/Test.java");
|
List<String> lines = writeSingleType(sourceCode, "com/example/Test.java");
|
||||||
assertThat(lines).containsExactly("package com.example;", "",
|
assertThat(lines).containsExactly("package com.example;", "",
|
||||||
"import com.example.test.TestAnnotation;", "", "public class Test {", "",
|
"import com.example.test.TestAnnotation;", "", "class Test {", "",
|
||||||
" @TestAnnotation", " public void something() {", " }", "", "}");
|
" @TestAnnotation", " void something() {", " }", "", "}");
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<String> writeSingleType(JavaSourceCode sourceCode, String location)
|
private List<String> writeSingleType(JavaSourceCode sourceCode, String location)
|
||||||
|
|||||||
@@ -62,6 +62,18 @@ class KotlinSourceCodeWriterTests {
|
|||||||
assertThat(lines).containsExactly("package com.example", "", "class Test");
|
assertThat(lines).containsExactly("package com.example", "", "class Test");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void emptyTypeDeclarationWithModifiers() throws IOException {
|
||||||
|
KotlinSourceCode sourceCode = new KotlinSourceCode();
|
||||||
|
KotlinCompilationUnit compilationUnit = sourceCode
|
||||||
|
.createCompilationUnit("com.example", "Test");
|
||||||
|
KotlinTypeDeclaration test = compilationUnit.createTypeDeclaration("Test");
|
||||||
|
test.modifiers(KotlinModifier.PUBLIC, KotlinModifier.ABSTRACT);
|
||||||
|
List<String> lines = writeSingleType(sourceCode, "com/example/Test.kt");
|
||||||
|
assertThat(lines).containsExactly("package com.example", "",
|
||||||
|
"abstract class Test");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void emptyTypeDeclarationWithSuperClass() throws IOException {
|
void emptyTypeDeclarationWithSuperClass() throws IOException {
|
||||||
KotlinSourceCode sourceCode = new KotlinSourceCode();
|
KotlinSourceCode sourceCode = new KotlinSourceCode();
|
||||||
|
|||||||
Reference in New Issue
Block a user