mirror of
https://github.com/spring-projects/spring-boot.git
synced 2026-09-17 12:09:16 +00:00
Fix problems with auto-configuration architecture checks
Closes gh-48216
This commit is contained in:
+9
-2
@@ -421,6 +421,8 @@ final class ArchitectureRules {
|
||||
return ArchRuleDefinition.members()
|
||||
.that()
|
||||
.areDeclaredInClassesThat(areRegularAutoConfiguration())
|
||||
.and()
|
||||
.areDeclaredInClassesThat(areNotKotlinClasses())
|
||||
.and(areNotDefaultConstructors())
|
||||
.and(areNotConstants())
|
||||
.and(dontOverridePublicMethods())
|
||||
@@ -440,13 +442,18 @@ final class ArchitectureRules {
|
||||
}
|
||||
|
||||
static DescribedPredicate<JavaClass> areRegularAutoConfiguration() {
|
||||
return DescribedPredicate.describe("Regular @AutoConfiguration",
|
||||
return DescribedPredicate.describe("are regular @AutoConfiguration",
|
||||
(javaClass) -> javaClass.isAnnotatedWith(AUTOCONFIGURATION_ANNOTATION)
|
||||
&& !javaClass.getName().contains("TestAutoConfiguration") && !javaClass.isAnnotation());
|
||||
}
|
||||
|
||||
static DescribedPredicate<JavaClass> areNotKotlinClasses() {
|
||||
return DescribedPredicate.describe("are not Kotlin classes",
|
||||
(javaClass) -> !javaClass.isAnnotatedWith("kotlin.Metadata"));
|
||||
}
|
||||
|
||||
static DescribedPredicate<JavaClass> areTestAutoConfiguration() {
|
||||
return DescribedPredicate.describe("Test @AutoConfiguration",
|
||||
return DescribedPredicate.describe("are test @AutoConfiguration",
|
||||
(javaClass) -> javaClass.isAnnotatedWith(AUTOCONFIGURATION_ANNOTATION)
|
||||
&& javaClass.getName().contains("TestAutoConfiguration") && !javaClass.isAnnotation());
|
||||
}
|
||||
|
||||
+5
-1
@@ -31,12 +31,16 @@ import org.springframework.util.ReflectionUtils;
|
||||
/**
|
||||
* Finds all configurations from auto-configurations (either nested configurations or
|
||||
* imported ones) and checks that these classes don't contain public members.
|
||||
* <p>
|
||||
* Kotlin classes are ignored as Kotlin does not have package-private visibility and
|
||||
* {@code internal} isn't a good substitute.
|
||||
*
|
||||
* @author Moritz Halbritter
|
||||
*/
|
||||
class AutoConfigurationChecker {
|
||||
|
||||
private final DescribedPredicate<JavaClass> isAutoConfiguration = ArchitectureRules.areRegularAutoConfiguration();
|
||||
private final DescribedPredicate<JavaClass> isAutoConfiguration = ArchitectureRules.areRegularAutoConfiguration()
|
||||
.and(ArchitectureRules.areNotKotlinClasses());
|
||||
|
||||
EvaluationResult check(JavaClasses javaClasses) {
|
||||
AutoConfigurations autoConfigurations = new AutoConfigurations();
|
||||
|
||||
+2
-2
@@ -30,11 +30,11 @@ public final class MyAutoConfiguration {
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@ConditionalOnClass(SomeService.class)
|
||||
public static class SomeServiceConfiguration {
|
||||
static class SomeServiceConfiguration {
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
public SomeService someService() {
|
||||
SomeService someService() {
|
||||
return new SomeService();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user