Browse Source

Polish "Improve testing of architecture checks"

See gh-48139
3.5.x
Stéphane Nicoll 2 weeks ago
parent
commit
d9bf31349a
  1. 28
      buildSrc/src/main/java/org/springframework/boot/build/architecture/ArchitectureCheck.java
  2. 44
      buildSrc/src/main/java/org/springframework/boot/build/architecture/ArchitectureCheckAnnotation.java
  3. 14
      buildSrc/src/test/java/org/springframework/boot/build/architecture/ArchitectureCheckTests.java

28
buildSrc/src/main/java/org/springframework/boot/build/architecture/ArchitectureCheck.java

@ -59,8 +59,6 @@ import org.gradle.api.tasks.SourceSet;
import org.gradle.api.tasks.TaskAction; import org.gradle.api.tasks.TaskAction;
import org.gradle.api.tasks.VerificationException; import org.gradle.api.tasks.VerificationException;
import org.springframework.boot.build.architecture.ArchitectureCheckAnnotations.Annotation;
/** /**
* {@link Task} that checks for architecture problems. * {@link Task} that checks for architecture problems.
* *
@ -77,22 +75,22 @@ public abstract class ArchitectureCheck extends DefaultTask {
public ArchitectureCheck() { public ArchitectureCheck() {
getOutputDirectory().convention(getProject().getLayout().getBuildDirectory().dir(getName())); getOutputDirectory().convention(getProject().getLayout().getBuildDirectory().dir(getName()));
getAnnotationClasses().convention(ArchitectureCheckAnnotations.asMap()); getAnnotationClasses().convention(ArchitectureCheckAnnotation.asMap());
getRules().addAll(getProhibitObjectsRequireNonNull().convention(true) getRules().addAll(getProhibitObjectsRequireNonNull().convention(true)
.map(whenTrue(ArchitectureRules::noClassesShouldCallObjectsRequireNonNull))); .map(whenTrue(ArchitectureRules::noClassesShouldCallObjectsRequireNonNull)));
getRules().addAll(ArchitectureRules.standard()); getRules().addAll(ArchitectureRules.standard());
getRules().addAll(whenMainSources(() -> ArchitectureRules.beanMethods( getRules().addAll(whenMainSources(() -> ArchitectureRules.beanMethods(ArchitectureCheckAnnotation
ArchitectureCheckAnnotations.classFor(getAnnotationClasses().get(), Annotation.CONDITIONAL_ON_CLASS)))); .classFor(getAnnotationClasses().get(), ArchitectureCheckAnnotation.CONDITIONAL_ON_CLASS))));
getRules().addAll(whenMainSources(() -> ArchitectureRules.conditionalOnMissingBean(ArchitectureCheckAnnotations getRules().addAll(whenMainSources(() -> ArchitectureRules.conditionalOnMissingBean(ArchitectureCheckAnnotation
.classFor(getAnnotationClasses().get(), Annotation.CONDITIONAL_ON_MISSING_BEAN)))); .classFor(getAnnotationClasses().get(), ArchitectureCheckAnnotation.CONDITIONAL_ON_MISSING_BEAN))));
getRules().addAll(whenMainSources(() -> ArchitectureRules.configurationProperties(ArchitectureCheckAnnotations getRules().addAll(whenMainSources(() -> ArchitectureRules.configurationProperties(ArchitectureCheckAnnotation
.classFor(getAnnotationClasses().get(), Annotation.CONFIGURATION_PROPERTIES)))); .classFor(getAnnotationClasses().get(), ArchitectureCheckAnnotation.CONFIGURATION_PROPERTIES))));
getRules() getRules().addAll(whenMainSources(
.addAll(whenMainSources(() -> ArchitectureRules.configurationPropertiesBinding(ArchitectureCheckAnnotations () -> ArchitectureRules.configurationPropertiesBinding(ArchitectureCheckAnnotation.classFor(
.classFor(getAnnotationClasses().get(), Annotation.CONFIGURATION_PROPERTIES_BINDING)))); getAnnotationClasses().get(), ArchitectureCheckAnnotation.CONFIGURATION_PROPERTIES_BINDING))));
getRules().addAll( getRules().addAll(whenMainSources(
whenMainSources(() -> ArchitectureRules.configurationPropertiesDeprecation(ArchitectureCheckAnnotations () -> ArchitectureRules.configurationPropertiesDeprecation(ArchitectureCheckAnnotation.classFor(
.classFor(getAnnotationClasses().get(), Annotation.DEPRECATED_CONFIGURATION_PROPERTY)))); getAnnotationClasses().get(), ArchitectureCheckAnnotation.DEPRECATED_CONFIGURATION_PROPERTY))));
getRuleDescriptions().set(getRules().map(this::asDescriptions)); getRuleDescriptions().set(getRules().map(this::asDescriptions));
} }

44
buildSrc/src/main/java/org/springframework/boot/build/architecture/ArchitectureCheckAnnotations.java → buildSrc/src/main/java/org/springframework/boot/build/architecture/ArchitectureCheckAnnotation.java

@ -23,35 +23,49 @@ import java.util.Map;
* tests. * tests.
* *
* @author Scott Frederick * @author Scott Frederick
* @author Stephane Nicoll
*/ */
public final class ArchitectureCheckAnnotations { public enum ArchitectureCheckAnnotation {
enum Annotation { /**
* Condition on class check.
*/
CONDITIONAL_ON_CLASS,
CONDITIONAL_ON_CLASS, CONDITIONAL_ON_MISSING_BEAN, CONFIGURATION_PROPERTIES, DEPRECATED_CONFIGURATION_PROPERTY, /**
CONFIGURATION_PROPERTIES_BINDING * Condition on missing bean check.
*/
CONDITIONAL_ON_MISSING_BEAN,
} /**
* Configuration properties bean.
*/
CONFIGURATION_PROPERTIES,
private ArchitectureCheckAnnotations() { /**
} * Deprecated configuration property.
*/
DEPRECATED_CONFIGURATION_PROPERTY,
/**
* Custom implementation to bind configuration properties.
*/
CONFIGURATION_PROPERTIES_BINDING;
private static final Map<String, String> annotationNameToClassName = Map.of(Annotation.CONDITIONAL_ON_CLASS.name(), private static final Map<String, String> annotationNameToClassName = Map.of(CONDITIONAL_ON_CLASS.name(),
"org.springframework.boot.autoconfigure.condition.ConditionalOnClass", "org.springframework.boot.autoconfigure.condition.ConditionalOnClass", CONDITIONAL_ON_MISSING_BEAN.name(),
Annotation.CONDITIONAL_ON_MISSING_BEAN.name(),
"org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean", "org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean",
Annotation.CONFIGURATION_PROPERTIES.name(), CONFIGURATION_PROPERTIES.name(), "org.springframework.boot.context.properties.ConfigurationProperties",
"org.springframework.boot.context.properties.ConfigurationProperties", DEPRECATED_CONFIGURATION_PROPERTY.name(),
Annotation.DEPRECATED_CONFIGURATION_PROPERTY.name(),
"org.springframework.boot.context.properties.DeprecatedConfigurationProperty", "org.springframework.boot.context.properties.DeprecatedConfigurationProperty",
Annotation.CONFIGURATION_PROPERTIES_BINDING.name(), CONFIGURATION_PROPERTIES_BINDING.name(),
"org.springframework.boot.context.properties.ConfigurationPropertiesBinding"); "org.springframework.boot.context.properties.ConfigurationPropertiesBinding");
static Map<String, String> asMap() { static Map<String, String> asMap() {
return annotationNameToClassName; return annotationNameToClassName;
} }
static String classFor(Map<String, String> annotationProperty, Annotation annotation) { static String classFor(Map<String, String> annotationProperty, ArchitectureCheckAnnotation annotation) {
String name = annotation.name(); String name = annotation.name();
return annotationProperty.getOrDefault(name, asMap().get(name)); return annotationProperty.getOrDefault(name, asMap().get(name));
} }

14
buildSrc/src/test/java/org/springframework/boot/build/architecture/ArchitectureCheckTests.java

@ -43,7 +43,6 @@ import org.junit.jupiter.api.io.TempDir;
import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.EnumSource; import org.junit.jupiter.params.provider.EnumSource;
import org.springframework.boot.build.architecture.ArchitectureCheckAnnotations.Annotation;
import org.springframework.boot.build.architecture.annotations.TestConditionalOnClass; import org.springframework.boot.build.architecture.annotations.TestConditionalOnClass;
import org.springframework.boot.build.architecture.annotations.TestConditionalOnMissingBean; import org.springframework.boot.build.architecture.annotations.TestConditionalOnMissingBean;
import org.springframework.boot.build.architecture.annotations.TestConfigurationProperties; import org.springframework.boot.build.architecture.annotations.TestConfigurationProperties;
@ -530,28 +529,31 @@ class ArchitectureCheckTests {
} }
GradleBuild withConditionalOnClassAnnotation() { GradleBuild withConditionalOnClassAnnotation() {
configureTasks(Annotation.CONDITIONAL_ON_CLASS.name(), TestConditionalOnClass.class.getName()); configureTasks(ArchitectureCheckAnnotation.CONDITIONAL_ON_CLASS.name(),
TestConditionalOnClass.class.getName());
return this; return this;
} }
GradleBuild withConditionalOnMissingBeanAnnotation() { GradleBuild withConditionalOnMissingBeanAnnotation() {
configureTasks(Annotation.CONDITIONAL_ON_MISSING_BEAN.name(), TestConditionalOnMissingBean.class.getName()); configureTasks(ArchitectureCheckAnnotation.CONDITIONAL_ON_MISSING_BEAN.name(),
TestConditionalOnMissingBean.class.getName());
return this; return this;
} }
GradleBuild withConfigurationPropertiesAnnotation() { GradleBuild withConfigurationPropertiesAnnotation() {
configureTasks(Annotation.CONFIGURATION_PROPERTIES.name(), TestConfigurationProperties.class.getName()); configureTasks(ArchitectureCheckAnnotation.CONFIGURATION_PROPERTIES.name(),
TestConfigurationProperties.class.getName());
return this; return this;
} }
GradleBuild withConfigurationPropertiesBindingAnnotation() { GradleBuild withConfigurationPropertiesBindingAnnotation() {
configureTasks(Annotation.CONFIGURATION_PROPERTIES_BINDING.name(), configureTasks(ArchitectureCheckAnnotation.CONFIGURATION_PROPERTIES_BINDING.name(),
TestConfigurationPropertiesBinding.class.getName()); TestConfigurationPropertiesBinding.class.getName());
return this; return this;
} }
GradleBuild withDeprecatedConfigurationPropertyAnnotation() { GradleBuild withDeprecatedConfigurationPropertyAnnotation() {
configureTasks(Annotation.DEPRECATED_CONFIGURATION_PROPERTY.name(), configureTasks(ArchitectureCheckAnnotation.DEPRECATED_CONFIGURATION_PROPERTY.name(),
TestDeprecatedConfigurationProperty.class.getName()); TestDeprecatedConfigurationProperty.class.getName());
return this; return this;
} }

Loading…
Cancel
Save