GH-9 - Rename core, public abstractions from Module to ApplicationModule.

Remove obsolete @since tags and deprecations.
This commit is contained in:
Oliver Drotbohm
2022-07-19 15:15:29 +02:00
parent 8ba6c11e3d
commit 82c18fe509
60 changed files with 272 additions and 341 deletions

View File

@@ -28,14 +28,14 @@ import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
import org.springframework.boot.test.autoconfigure.filter.TypeExcludeFilters;
import org.springframework.boot.test.context.SpringBootTestContextBootstrapper;
import org.springframework.core.annotation.AliasFor;
import org.springframework.modulith.model.Module.DependencyDepth;
import org.springframework.modulith.model.ApplicationModule.DependencyDepth;
import org.springframework.test.context.BootstrapWith;
import org.springframework.test.context.TestConstructor;
import org.springframework.test.context.TestConstructor.AutowireMode;
import org.springframework.test.context.junit.jupiter.SpringExtension;
/**
* Bootstraps the module containing the package of the test class annotated with {@link ModuleTest}. Will apply the
* Bootstraps the module containing the package of the test class annotated with {@link ApplicationModuleTest}. Will apply the
* following modifications to the Spring Boot configuration:
* <ul>
* <li>Restricts the component scanning to the module's package.
@@ -54,7 +54,7 @@ import org.springframework.test.context.junit.jupiter.SpringExtension;
@ExtendWith(PublishedEventsParameterResolver.class)
@TestInstance(Lifecycle.PER_CLASS)
@TestConstructor(autowireMode = AutowireMode.ALL)
public @interface ModuleTest {
public @interface ApplicationModuleTest {
@AliasFor("mode")
BootstrapMode value() default BootstrapMode.STANDALONE;

View File

@@ -28,8 +28,8 @@ import java.util.stream.Stream;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.annotation.AnnotatedElementUtils;
import org.springframework.modulith.model.Module;
import org.springframework.modulith.model.Modules;
import org.springframework.modulith.model.ApplicationModule;
import org.springframework.modulith.model.ApplicationModules;
import org.springframework.test.context.ContextConfigurationAttributes;
import org.springframework.test.context.ContextCustomizer;
import org.springframework.test.context.ContextCustomizerFactory;
@@ -48,7 +48,7 @@ class ModuleContextCustomizerFactory implements ContextCustomizerFactory {
public ContextCustomizer createContextCustomizer(Class<?> testClass,
List<ContextConfigurationAttributes> configAttributes) {
ModuleTest moduleTest = AnnotatedElementUtils.getMergedAnnotation(testClass, ModuleTest.class);
ApplicationModuleTest moduleTest = AnnotatedElementUtils.getMergedAnnotation(testClass, ApplicationModuleTest.class);
return moduleTest == null ? null : new ModuleContextCustomizer(testClass);
}
@@ -86,8 +86,8 @@ class ModuleContextCustomizerFactory implements ContextCustomizerFactory {
private static void logModules(ModuleTestExecution execution) {
Module module = execution.getModule();
Modules modules = execution.getModules();
ApplicationModule module = execution.getModule();
ApplicationModules modules = execution.getModules();
String moduleName = module.getDisplayName();
String bootstrapMode = execution.getBootstrapMode().name();
@@ -99,7 +99,7 @@ class ModuleContextCustomizerFactory implements ContextCustomizerFactory {
Arrays.stream(module.toString(modules).split("\n")).forEach(LOG::info);
List<Module> extraIncludes = execution.getExtraIncludes();
List<ApplicationModule> extraIncludes = execution.getExtraIncludes();
if (!extraIncludes.isEmpty()) {
@@ -108,7 +108,7 @@ class ModuleContextCustomizerFactory implements ContextCustomizerFactory {
extraIncludes.forEach(it -> LOG.info("> ".concat(it.getName())));
}
Set<Module> sharedModules = modules.getSharedModules();
Set<ApplicationModule> sharedModules = modules.getSharedModules();
if (!sharedModules.isEmpty()) {
@@ -117,13 +117,13 @@ class ModuleContextCustomizerFactory implements ContextCustomizerFactory {
sharedModules.forEach(it -> LOG.info("> ".concat(it.getName())));
}
List<Module> dependencies = execution.getDependencies();
List<ApplicationModule> dependencies = execution.getDependencies();
if (!dependencies.isEmpty() || !sharedModules.isEmpty()) {
logHeadline("Included dependencies:", message);
Stream<Module> dependenciesPlusMissingSharedOnes = //
Stream<ApplicationModule> dependenciesPlusMissingSharedOnes = //
Stream.concat(dependencies.stream(), sharedModules.stream() //
.filter(it -> !dependencies.contains(it)));

View File

@@ -34,9 +34,9 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.test.context.AnnotatedClassFinder;
import org.springframework.core.annotation.AnnotatedElementUtils;
import org.springframework.modulith.model.JavaPackage;
import org.springframework.modulith.model.Module;
import org.springframework.modulith.model.Modules;
import org.springframework.modulith.test.ModuleTest.BootstrapMode;
import org.springframework.modulith.model.ApplicationModule;
import org.springframework.modulith.model.ApplicationModules;
import org.springframework.modulith.test.ApplicationModuleTest.BootstrapMode;
import com.tngtech.archunit.thirdparty.com.google.common.base.Supplier;
import com.tngtech.archunit.thirdparty.com.google.common.base.Suppliers;
@@ -46,7 +46,7 @@ import com.tngtech.archunit.thirdparty.com.google.common.base.Suppliers;
*/
@Slf4j
@EqualsAndHashCode(of = "key")
public class ModuleTestExecution implements Iterable<Module> {
public class ModuleTestExecution implements Iterable<ApplicationModule> {
private static Map<Class<?>, Class<?>> MODULITH_TYPES = new HashMap<>();
private static Map<Key, ModuleTestExecution> EXECUTIONS = new HashMap<>();
@@ -54,14 +54,14 @@ public class ModuleTestExecution implements Iterable<Module> {
private final Key key;
private final @Getter BootstrapMode bootstrapMode;
private final @Getter Module module;
private final @Getter Modules modules;
private final @Getter List<Module> extraIncludes;
private final @Getter ApplicationModule module;
private final @Getter ApplicationModules modules;
private final @Getter List<ApplicationModule> extraIncludes;
private final Supplier<List<JavaPackage>> basePackages;
private final Supplier<List<Module>> dependencies;
private final Supplier<List<ApplicationModule>> dependencies;
private ModuleTestExecution(ModuleTest annotation, Modules modules, Module module) {
private ModuleTestExecution(ApplicationModuleTest annotation, ApplicationModules modules, ApplicationModule module) {
this.key = Key.of(module.getBasePackage().getName(), annotation);
this.modules = modules;
@@ -74,7 +74,7 @@ public class ModuleTestExecution implements Iterable<Module> {
Stream<JavaPackage> moduleBasePackages = module.getBasePackages(modules, bootstrapMode.getDepth());
Stream<JavaPackage> sharedBasePackages = modules.getSharedModules().stream().map(it -> it.getBasePackage());
Stream<JavaPackage> extraPackages = extraIncludes.stream().map(Module::getBasePackage);
Stream<JavaPackage> extraPackages = extraIncludes.stream().map(ApplicationModule::getBasePackage);
Stream<JavaPackage> intermediate = Stream.concat(moduleBasePackages, extraPackages);
@@ -83,7 +83,7 @@ public class ModuleTestExecution implements Iterable<Module> {
this.dependencies = Suppliers.memoize(() -> {
Stream<Module> bootstrapDependencies = module.getBootstrapDependencies(modules, bootstrapMode.getDepth());
Stream<ApplicationModule> bootstrapDependencies = module.getBootstrapDependencies(modules, bootstrapMode.getDepth());
return Stream.concat(bootstrapDependencies, extraIncludes.stream()).collect(Collectors.toList());
});
@@ -96,13 +96,13 @@ public class ModuleTestExecution implements Iterable<Module> {
return () -> {
ModuleTest annotation = AnnotatedElementUtils.findMergedAnnotation(type, ModuleTest.class);
ApplicationModuleTest annotation = AnnotatedElementUtils.findMergedAnnotation(type, ApplicationModuleTest.class);
String packageName = type.getPackage().getName();
Class<?> modulithType = MODULITH_TYPES.computeIfAbsent(type,
it -> new AnnotatedClassFinder(SpringBootApplication.class).findFromPackage(packageName));
Modules modules = Modules.of(modulithType);
Module module = modules.getModuleForPackage(packageName) //
ApplicationModules modules = ApplicationModules.of(modulithType);
ApplicationModule module = modules.getModuleForPackage(packageName) //
.orElseThrow(
() -> new IllegalStateException(String.format("Package %s is not part of any module!", packageName)));
@@ -133,11 +133,11 @@ public class ModuleTestExecution implements Iterable<Module> {
}
/**
* Returns all module dependencies, based on the current {@link ModuleTest.BootstrapMode}.
* Returns all module dependencies, based on the current {@link ApplicationModuleTest.BootstrapMode}.
*
* @return
*/
public List<Module> getDependencies() {
public List<ApplicationModule> getDependencies() {
return dependencies.get();
}
@@ -160,11 +160,11 @@ public class ModuleTestExecution implements Iterable<Module> {
* @see java.lang.Iterable#iterator()
*/
@Override
public Iterator<Module> iterator() {
public Iterator<ApplicationModule> iterator() {
return modules.iterator();
}
private static Stream<Module> getExtraModules(ModuleTest annotation, Modules modules) {
private static Stream<ApplicationModule> getExtraModules(ApplicationModuleTest annotation, ApplicationModules modules) {
return Arrays.stream(annotation.extraIncludes()) //
.map(modules::getModuleByName) //
@@ -176,6 +176,6 @@ public class ModuleTestExecution implements Iterable<Module> {
private static class Key {
String moduleBasePackage;
ModuleTest annotation;
ApplicationModuleTest annotation;
}
}

View File

@@ -18,7 +18,7 @@ package org.springframework.modulith.test;
import org.junit.jupiter.api.extension.Extension;
/**
* JUnit 5 {@link Extension} for standalone usage without {@link ModuleTest}.
* JUnit 5 {@link Extension} for standalone usage without {@link ApplicationModuleTest}.
*
* @author Oliver Drotbohm
*/