Skip to content

Commit 4b8db9b

Browse files
committed
Fix problems with auto-configuration architecture checks
Closes gh-48216
1 parent 85bbbc9 commit 4b8db9b

File tree

3 files changed

+16
-5
lines changed

3 files changed

+16
-5
lines changed

buildSrc/src/main/java/org/springframework/boot/build/architecture/ArchitectureRules.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,8 @@ private static ArchRule autoConfigurationClassesShouldHaveNoPublicMembers() {
421421
return ArchRuleDefinition.members()
422422
.that()
423423
.areDeclaredInClassesThat(areRegularAutoConfiguration())
424+
.and()
425+
.areDeclaredInClassesThat(areNotKotlinClasses())
424426
.and(areNotDefaultConstructors())
425427
.and(areNotConstants())
426428
.and(dontOverridePublicMethods())
@@ -440,13 +442,18 @@ static ArchRule shouldHaveNoPublicMembers() {
440442
}
441443

442444
static DescribedPredicate<JavaClass> areRegularAutoConfiguration() {
443-
return DescribedPredicate.describe("Regular @AutoConfiguration",
445+
return DescribedPredicate.describe("are regular @AutoConfiguration",
444446
(javaClass) -> javaClass.isAnnotatedWith(AUTOCONFIGURATION_ANNOTATION)
445447
&& !javaClass.getName().contains("TestAutoConfiguration") && !javaClass.isAnnotation());
446448
}
447449

450+
static DescribedPredicate<JavaClass> areNotKotlinClasses() {
451+
return DescribedPredicate.describe("are not Kotlin classes",
452+
(javaClass) -> !javaClass.isAnnotatedWith("kotlin.Metadata"));
453+
}
454+
448455
static DescribedPredicate<JavaClass> areTestAutoConfiguration() {
449-
return DescribedPredicate.describe("Test @AutoConfiguration",
456+
return DescribedPredicate.describe("are test @AutoConfiguration",
450457
(javaClass) -> javaClass.isAnnotatedWith(AUTOCONFIGURATION_ANNOTATION)
451458
&& javaClass.getName().contains("TestAutoConfiguration") && !javaClass.isAnnotation());
452459
}

buildSrc/src/main/java/org/springframework/boot/build/architecture/AutoConfigurationChecker.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,16 @@
3131
/**
3232
* Finds all configurations from auto-configurations (either nested configurations or
3333
* imported ones) and checks that these classes don't contain public members.
34+
* <p>
35+
* Kotlin classes are ignored as Kotlin does not have package-private visibility and
36+
* {@code internal} isn't a good substitute.
3437
*
3538
* @author Moritz Halbritter
3639
*/
3740
class AutoConfigurationChecker {
3841

39-
private final DescribedPredicate<JavaClass> isAutoConfiguration = ArchitectureRules.areRegularAutoConfiguration();
42+
private final DescribedPredicate<JavaClass> isAutoConfiguration = ArchitectureRules.areRegularAutoConfiguration()
43+
.and(ArchitectureRules.areNotKotlinClasses());
4044

4145
EvaluationResult check(JavaClasses javaClasses) {
4246
AutoConfigurations autoConfigurations = new AutoConfigurations();

documentation/spring-boot-docs/src/main/java/org/springframework/boot/docs/features/developingautoconfiguration/conditionannotations/classconditions/MyAutoConfiguration.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ public final class MyAutoConfiguration {
3030

3131
@Configuration(proxyBeanMethods = false)
3232
@ConditionalOnClass(SomeService.class)
33-
public static class SomeServiceConfiguration {
33+
static class SomeServiceConfiguration {
3434

3535
@Bean
3636
@ConditionalOnMissingBean
37-
public SomeService someService() {
37+
SomeService someService() {
3838
return new SomeService();
3939
}
4040

0 commit comments

Comments
 (0)