mirror of
https://gitee.com/dcren/initializr.git
synced 2025-04-24 18:04:58 +08:00
Rename SourceCodeStructure to SourceStructure
This commit generalizes the main and test structure so that it can be used for more use cases.
This commit is contained in:
parent
53a0484289
commit
dbd1198996
@ -77,7 +77,7 @@ public class MainSourceCodeProjectContributor<T extends TypeDeclaration, C exten
|
||||
customizeMainApplicationType(mainApplicationType);
|
||||
customizeMainCompilationUnit(compilationUnit);
|
||||
customizeMainSourceCode(sourceCode);
|
||||
this.sourceWriter.writeTo(this.projectDescription.getBuildSystem().getMainDirectory(projectRoot,
|
||||
this.sourceWriter.writeTo(this.projectDescription.getBuildSystem().getMainSource(projectRoot,
|
||||
this.projectDescription.getLanguage()), sourceCode);
|
||||
}
|
||||
|
||||
|
@ -72,7 +72,7 @@ public class TestSourceCodeProjectContributor<T extends TypeDeclaration, C exten
|
||||
T testApplicationType = compilationUnit.createTypeDeclaration(testName);
|
||||
customizeTestApplicationType(testApplicationType);
|
||||
customizeTestSourceCode(sourceCode);
|
||||
this.sourceWriter.writeTo(this.projectDescription.getBuildSystem().getTestDirectory(projectRoot,
|
||||
this.sourceWriter.writeTo(this.projectDescription.getBuildSystem().getTestSource(projectRoot,
|
||||
this.projectDescription.getLanguage()), sourceCode);
|
||||
}
|
||||
|
||||
|
@ -20,7 +20,7 @@ import java.nio.file.Path;
|
||||
import java.util.Objects;
|
||||
|
||||
import io.spring.initializr.generator.language.Language;
|
||||
import io.spring.initializr.generator.language.SourceCodeStructure;
|
||||
import io.spring.initializr.generator.language.SourceStructure;
|
||||
|
||||
import org.springframework.core.io.support.SpringFactoriesLoader;
|
||||
|
||||
@ -46,12 +46,24 @@ public interface BuildSystem {
|
||||
return null;
|
||||
}
|
||||
|
||||
default SourceCodeStructure getMainDirectory(Path projectRoot, Language language) {
|
||||
return new SourceCodeStructure(projectRoot.resolve("src/main/" + language.id()));
|
||||
/**
|
||||
* Returns a {@link SourceStructure} for main sources.
|
||||
* @param projectRoot the root of the project structure
|
||||
* @param language the language of the project
|
||||
* @return a {@link SourceStructure} for main assets
|
||||
*/
|
||||
default SourceStructure getMainSource(Path projectRoot, Language language) {
|
||||
return new SourceStructure(projectRoot.resolve("src/main/"), language.id());
|
||||
}
|
||||
|
||||
default SourceCodeStructure getTestDirectory(Path projectRoot, Language language) {
|
||||
return new SourceCodeStructure(projectRoot.resolve("src/test/" + language.id()));
|
||||
/**
|
||||
* Returns a {@link SourceStructure} for test sources.
|
||||
* @param projectRoot the root of the project structure
|
||||
* @param language the language of the project
|
||||
* @return a {@link SourceStructure} for test assets
|
||||
*/
|
||||
default SourceStructure getTestSource(Path projectRoot, Language language) {
|
||||
return new SourceStructure(projectRoot.resolve("src/test/"), language.id());
|
||||
}
|
||||
|
||||
static BuildSystem forId(String id) {
|
||||
|
@ -28,11 +28,11 @@ public interface SourceCodeWriter<S extends SourceCode<?, ?>> {
|
||||
|
||||
/**
|
||||
* Write, to the given {@code structure}, the given {@code sourceCode}.
|
||||
* @param structure the {@link SourceCodeStructure} beneath which the source code is
|
||||
* @param structure the {@link SourceStructure} beneath which the source code is
|
||||
* written
|
||||
* @param sourceCode the source code to write
|
||||
* @throws IOException if writing fails
|
||||
*/
|
||||
void writeTo(SourceCodeStructure structure, S sourceCode) throws IOException;
|
||||
void writeTo(SourceStructure structure, S sourceCode) throws IOException;
|
||||
|
||||
}
|
||||
|
@ -21,22 +21,38 @@ import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
|
||||
/**
|
||||
* Provide dedicated method for directories that hold code.
|
||||
* Provide dedicated method for directories that hold sources.
|
||||
*
|
||||
* @author Stephane Nicoll
|
||||
*/
|
||||
public class SourceCodeStructure {
|
||||
public class SourceStructure {
|
||||
|
||||
private final Path rootDirectory;
|
||||
|
||||
public SourceCodeStructure(Path rootDirectory) {
|
||||
private final Path sourcesDirectory;
|
||||
|
||||
public SourceStructure(Path rootDirectory, String sourcesDirectoryName) {
|
||||
this.rootDirectory = rootDirectory;
|
||||
this.sourcesDirectory = rootDirectory.resolve(sourcesDirectoryName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the root {@link Path} of this structure. Can be used to access additional
|
||||
* resources.
|
||||
* @return the root directory
|
||||
*/
|
||||
public Path getRootDirectory() {
|
||||
return this.rootDirectory;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the sources {@link Path} of this structure.
|
||||
* @return the source code directory
|
||||
*/
|
||||
public Path getSourcesDirectory() {
|
||||
return this.sourcesDirectory;
|
||||
}
|
||||
|
||||
/**
|
||||
* Resource a source file, creating its package structure if necessary.
|
||||
* @param packageName the name of the package
|
||||
@ -47,21 +63,22 @@ public class SourceCodeStructure {
|
||||
* structure
|
||||
*/
|
||||
public Path resolveSourceFile(String packageName, String file) throws IOException {
|
||||
return createPackage(packageName).resolve(file);
|
||||
return createPackage(this.sourcesDirectory, packageName).resolve(file);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the specified package if necessary.
|
||||
* @param srcDirectory the source directory for the package
|
||||
* @param packageName the name of the package to create
|
||||
* @return the directory where source code to this package should reside
|
||||
* @return the directory where source for this package should reside
|
||||
* @throws IOException if an error occurred while trying to create the directory
|
||||
* structure
|
||||
*/
|
||||
public Path createPackage(String packageName) throws IOException {
|
||||
if (!Files.exists(this.rootDirectory)) {
|
||||
Files.createDirectories(this.rootDirectory);
|
||||
protected Path createPackage(Path srcDirectory, String packageName) throws IOException {
|
||||
if (!Files.exists(srcDirectory)) {
|
||||
Files.createDirectories(srcDirectory);
|
||||
}
|
||||
Path directory = this.rootDirectory.resolve(packageName.replace('.', '/'));
|
||||
Path directory = srcDirectory.resolve(packageName.replace('.', '/'));
|
||||
Files.createDirectories(directory);
|
||||
return directory;
|
||||
}
|
@ -40,8 +40,8 @@ import io.spring.initializr.generator.language.Annotatable;
|
||||
import io.spring.initializr.generator.language.Annotation;
|
||||
import io.spring.initializr.generator.language.Parameter;
|
||||
import io.spring.initializr.generator.language.SourceCode;
|
||||
import io.spring.initializr.generator.language.SourceCodeStructure;
|
||||
import io.spring.initializr.generator.language.SourceCodeWriter;
|
||||
import io.spring.initializr.generator.language.SourceStructure;
|
||||
|
||||
/**
|
||||
* A {@link SourceCodeWriter} that writes {@link SourceCode} in Groovy.
|
||||
@ -88,13 +88,13 @@ public class GroovySourceCodeWriter implements SourceCodeWriter<GroovySourceCode
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeTo(SourceCodeStructure structure, GroovySourceCode sourceCode) throws IOException {
|
||||
public void writeTo(SourceStructure structure, GroovySourceCode sourceCode) throws IOException {
|
||||
for (GroovyCompilationUnit compilationUnit : sourceCode.getCompilationUnits()) {
|
||||
writeTo(structure, compilationUnit);
|
||||
}
|
||||
}
|
||||
|
||||
private void writeTo(SourceCodeStructure structure, GroovyCompilationUnit compilationUnit) throws IOException {
|
||||
private void writeTo(SourceStructure structure, GroovyCompilationUnit compilationUnit) throws IOException {
|
||||
Path output = structure.resolveSourceFile(compilationUnit.getPackageName(),
|
||||
compilationUnit.getName() + ".groovy");
|
||||
try (IndentingWriter writer = this.indentingWriterFactory.createIndentingWriter("groovy",
|
||||
|
@ -40,8 +40,8 @@ import io.spring.initializr.generator.language.Annotatable;
|
||||
import io.spring.initializr.generator.language.Annotation;
|
||||
import io.spring.initializr.generator.language.Parameter;
|
||||
import io.spring.initializr.generator.language.SourceCode;
|
||||
import io.spring.initializr.generator.language.SourceCodeStructure;
|
||||
import io.spring.initializr.generator.language.SourceCodeWriter;
|
||||
import io.spring.initializr.generator.language.SourceStructure;
|
||||
|
||||
/**
|
||||
* A {@link SourceCodeWriter} that writes {@link SourceCode} in Java.
|
||||
@ -89,13 +89,13 @@ public class JavaSourceCodeWriter implements SourceCodeWriter<JavaSourceCode> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeTo(SourceCodeStructure structure, JavaSourceCode sourceCode) throws IOException {
|
||||
public void writeTo(SourceStructure structure, JavaSourceCode sourceCode) throws IOException {
|
||||
for (JavaCompilationUnit compilationUnit : sourceCode.getCompilationUnits()) {
|
||||
writeTo(structure, compilationUnit);
|
||||
}
|
||||
}
|
||||
|
||||
private void writeTo(SourceCodeStructure structure, JavaCompilationUnit compilationUnit) throws IOException {
|
||||
private void writeTo(SourceStructure structure, JavaCompilationUnit compilationUnit) throws IOException {
|
||||
Path output = structure.resolveSourceFile(compilationUnit.getPackageName(),
|
||||
compilationUnit.getName() + ".java");
|
||||
Files.createDirectories(output.getParent());
|
||||
|
@ -36,8 +36,8 @@ import io.spring.initializr.generator.language.Annotatable;
|
||||
import io.spring.initializr.generator.language.Annotation;
|
||||
import io.spring.initializr.generator.language.Parameter;
|
||||
import io.spring.initializr.generator.language.SourceCode;
|
||||
import io.spring.initializr.generator.language.SourceCodeStructure;
|
||||
import io.spring.initializr.generator.language.SourceCodeWriter;
|
||||
import io.spring.initializr.generator.language.SourceStructure;
|
||||
|
||||
/**
|
||||
* A {@link SourceCodeWriter} that writes {@link SourceCode} in Kotlin.
|
||||
@ -54,13 +54,13 @@ public class KotlinSourceCodeWriter implements SourceCodeWriter<KotlinSourceCode
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeTo(SourceCodeStructure structure, KotlinSourceCode sourceCode) throws IOException {
|
||||
public void writeTo(SourceStructure structure, KotlinSourceCode sourceCode) throws IOException {
|
||||
for (KotlinCompilationUnit compilationUnit : sourceCode.getCompilationUnits()) {
|
||||
writeTo(structure, compilationUnit);
|
||||
}
|
||||
}
|
||||
|
||||
private void writeTo(SourceCodeStructure structure, KotlinCompilationUnit compilationUnit) throws IOException {
|
||||
private void writeTo(SourceStructure structure, KotlinCompilationUnit compilationUnit) throws IOException {
|
||||
Path output = structure.resolveSourceFile(compilationUnit.getPackageName(), compilationUnit.getName() + ".kt");
|
||||
Files.createDirectories(output.getParent());
|
||||
try (IndentingWriter writer = this.indentingWriterFactory.createIndentingWriter("kotlin",
|
||||
|
@ -20,7 +20,7 @@ import java.nio.file.Path;
|
||||
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleBuildSystem;
|
||||
import io.spring.initializr.generator.buildsystem.maven.MavenBuildSystem;
|
||||
import io.spring.initializr.generator.language.SourceCodeStructure;
|
||||
import io.spring.initializr.generator.language.SourceStructure;
|
||||
import io.spring.initializr.generator.language.java.JavaLanguage;
|
||||
import io.spring.initializr.generator.language.kotlin.KotlinLanguage;
|
||||
import org.junit.jupiter.api.Test;
|
||||
@ -54,16 +54,16 @@ class BuildSystemTests {
|
||||
|
||||
@Test
|
||||
void defaultMainDirectory(@TempDir Path directory) {
|
||||
SourceCodeStructure mainCodeStructure = BuildSystem.forId("gradle").getMainDirectory(directory,
|
||||
new JavaLanguage());
|
||||
assertThat(mainCodeStructure.getRootDirectory()).isEqualTo(directory.resolve("src/main/java"));
|
||||
SourceStructure mainCodeStructure = BuildSystem.forId("gradle").getMainSource(directory, new JavaLanguage());
|
||||
assertThat(mainCodeStructure.getRootDirectory()).isEqualTo(directory.resolve("src/main"));
|
||||
assertThat(mainCodeStructure.getSourcesDirectory()).isEqualTo(directory.resolve("src/main/java"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void defaultTestDirectory(@TempDir Path directory) {
|
||||
SourceCodeStructure testCodeStructure = BuildSystem.forId("gradle").getTestDirectory(directory,
|
||||
new KotlinLanguage());
|
||||
assertThat(testCodeStructure.getRootDirectory()).isEqualTo(directory.resolve("src/test/kotlin"));
|
||||
SourceStructure testCodeStructure = BuildSystem.forId("gradle").getTestSource(directory, new KotlinLanguage());
|
||||
assertThat(testCodeStructure.getRootDirectory()).isEqualTo(directory.resolve("src/test"));
|
||||
assertThat(testCodeStructure.getSourcesDirectory()).isEqualTo(directory.resolve("src/test/kotlin"));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -26,15 +26,15 @@ import org.junit.jupiter.api.io.TempDir;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Tests for {@link SourceCodeStructure}.
|
||||
* Tests for {@link SourceStructure}.
|
||||
*
|
||||
* @author Stephane Nicoll
|
||||
*/
|
||||
class SourceCodeStructureTests {
|
||||
class SourceStructureTests {
|
||||
|
||||
@Test
|
||||
void createPackage(@TempDir Path dir) throws IOException {
|
||||
Path target = new SourceCodeStructure(dir).createPackage("com.example.test");
|
||||
Path target = new SourceStructure(dir, "java").createPackage(dir, "com.example.test");
|
||||
assertThat(target).exists().isDirectory().isEqualByComparingTo(dir.resolve("com/example/test"));
|
||||
}
|
||||
|
||||
@ -43,28 +43,28 @@ class SourceCodeStructureTests {
|
||||
Path target = dir.resolve("com/example");
|
||||
Files.createDirectories(target);
|
||||
assertThat(target).exists().isDirectory();
|
||||
Path path = new SourceCodeStructure(dir).createPackage("com.example");
|
||||
Path path = new SourceStructure(dir, "java").createPackage(dir, "com.example");
|
||||
assertThat(path).isEqualByComparingTo(target);
|
||||
}
|
||||
|
||||
@Test
|
||||
void resolveSourceFile(@TempDir Path dir) throws IOException {
|
||||
Path rootDir = dir.resolve("com/example");
|
||||
Path rootDir = dir.resolve("src/main/java/com/example");
|
||||
assertThat(rootDir).doesNotExist();
|
||||
Path target = rootDir.resolve("Test.java");
|
||||
Path path = new SourceCodeStructure(dir).resolveSourceFile("com.example", "Test.java");
|
||||
Path path = new SourceStructure(dir, "src/main/java").resolveSourceFile("com.example", "Test.java");
|
||||
assertThat(path).doesNotExist().isEqualByComparingTo(target);
|
||||
assertThat(rootDir).exists().isDirectory();
|
||||
}
|
||||
|
||||
@Test
|
||||
void resolveSourceFileWithExistingPackage(@TempDir Path dir) throws IOException {
|
||||
Path rootDir = dir.resolve("com/example");
|
||||
Path rootDir = dir.resolve("src/main/java/com/example");
|
||||
Files.createDirectories(rootDir);
|
||||
assertThat(rootDir).exists().isDirectory();
|
||||
Path target = rootDir.resolve("Test.java");
|
||||
assertThat(target).doesNotExist();
|
||||
Path path = new SourceCodeStructure(dir).resolveSourceFile("com.example", "Test.java");
|
||||
Path path = new SourceStructure(dir, "src/main/java").resolveSourceFile("com.example", "Test.java");
|
||||
assertThat(path).doesNotExist().isEqualByComparingTo(target);
|
||||
}
|
||||
|
@ -18,15 +18,15 @@ package io.spring.initializr.generator.language.groovy;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import io.spring.initializr.generator.io.IndentingWriterFactory;
|
||||
import io.spring.initializr.generator.language.Annotation;
|
||||
import io.spring.initializr.generator.language.Parameter;
|
||||
import io.spring.initializr.generator.language.SourceCodeStructure;
|
||||
import io.spring.initializr.generator.language.SourceStructure;
|
||||
import io.spring.initializr.generator.test.io.TextTestUtils;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
@ -277,9 +277,9 @@ class GroovySourceCodeWriterTests {
|
||||
}
|
||||
|
||||
private Path writeSourceCode(GroovySourceCode sourceCode) throws IOException {
|
||||
Path projectDirectory = Files.createTempDirectory(this.directory, "project-");
|
||||
this.writer.writeTo(new SourceCodeStructure(projectDirectory), sourceCode);
|
||||
return projectDirectory;
|
||||
SourceStructure sourceStructure = new SourceStructure(this.directory, UUID.randomUUID().toString());
|
||||
this.writer.writeTo(sourceStructure, sourceCode);
|
||||
return sourceStructure.getSourcesDirectory();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -18,15 +18,15 @@ package io.spring.initializr.generator.language.java;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import io.spring.initializr.generator.io.IndentingWriterFactory;
|
||||
import io.spring.initializr.generator.language.Annotation;
|
||||
import io.spring.initializr.generator.language.Parameter;
|
||||
import io.spring.initializr.generator.language.SourceCodeStructure;
|
||||
import io.spring.initializr.generator.language.SourceStructure;
|
||||
import io.spring.initializr.generator.test.io.TextTestUtils;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
@ -278,9 +278,9 @@ class JavaSourceCodeWriterTests {
|
||||
}
|
||||
|
||||
private Path writeSourceCode(JavaSourceCode sourceCode) throws IOException {
|
||||
Path projectDirectory = Files.createTempDirectory(this.directory, "project-");
|
||||
this.writer.writeTo(new SourceCodeStructure(projectDirectory), sourceCode);
|
||||
return projectDirectory;
|
||||
SourceStructure sourceStructure = new SourceStructure(this.directory, UUID.randomUUID().toString());
|
||||
this.writer.writeTo(sourceStructure, sourceCode);
|
||||
return sourceStructure.getSourcesDirectory();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -17,15 +17,15 @@
|
||||
package io.spring.initializr.generator.language.kotlin;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import io.spring.initializr.generator.io.IndentingWriterFactory;
|
||||
import io.spring.initializr.generator.language.Annotation;
|
||||
import io.spring.initializr.generator.language.Parameter;
|
||||
import io.spring.initializr.generator.language.SourceCodeStructure;
|
||||
import io.spring.initializr.generator.language.SourceStructure;
|
||||
import io.spring.initializr.generator.test.io.TextTestUtils;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
@ -335,9 +335,9 @@ class KotlinSourceCodeWriterTests {
|
||||
}
|
||||
|
||||
private Path writeSourceCode(KotlinSourceCode sourceCode) throws IOException {
|
||||
Path projectDirectory = Files.createTempDirectory(this.directory, "project-");
|
||||
this.writer.writeTo(new SourceCodeStructure(projectDirectory), sourceCode);
|
||||
return projectDirectory;
|
||||
SourceStructure sourceStructure = new SourceStructure(this.directory, UUID.randomUUID().toString());
|
||||
this.writer.writeTo(sourceStructure, sourceCode);
|
||||
return sourceStructure.getSourcesDirectory();
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user