diff --git a/buildSrc/src/main/java/org/springframework/boot/build/architecture/AutoConfigurationChecker.java b/buildSrc/src/main/java/org/springframework/boot/build/architecture/AutoConfigurationChecker.java index c1d7ee9d131..995cc172b22 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/architecture/AutoConfigurationChecker.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/architecture/AutoConfigurationChecker.java @@ -16,7 +16,6 @@ package org.springframework.boot.build.architecture; -import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; @@ -26,8 +25,6 @@ import com.tngtech.archunit.core.domain.JavaClass; import com.tngtech.archunit.core.domain.JavaClasses; import com.tngtech.archunit.lang.EvaluationResult; -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. @@ -43,7 +40,7 @@ class AutoConfigurationChecker { .and(ArchitectureRules.areNotKotlinClasses()); EvaluationResult check(JavaClasses javaClasses) { - AutoConfigurations autoConfigurations = new AutoConfigurations(); + AutoConfigurations autoConfigurations = new AutoConfigurations(javaClasses); for (JavaClass javaClass : javaClasses) { if (isAutoConfigurationOrEnclosedInAutoConfiguration(javaClass)) { autoConfigurations.add(javaClass); @@ -74,23 +71,28 @@ class AutoConfigurationChecker { private static final String CONFIGURATION = "org.springframework.context.annotation.Configuration"; - private final Map classes = new HashMap<>(); + private final JavaClasses classes; + + private final Map autoConfigurationClasses = new HashMap<>(); + + AutoConfigurations(JavaClasses classes) { + this.classes = classes; + } void add(JavaClass autoConfiguration) { if (!autoConfiguration.isMetaAnnotatedWith(CONFIGURATION)) { return; } - if (this.classes.putIfAbsent(autoConfiguration.getName(), autoConfiguration) != null) { + if (this.autoConfigurationClasses.putIfAbsent(autoConfiguration.getName(), autoConfiguration) != null) { return; } - processImports(autoConfiguration, this.classes); + processImports(autoConfiguration, this.autoConfigurationClasses); } JavaClasses getConfigurations() { - // TODO: Find a way without reflection - Method method = ReflectionUtils.findMethod(JavaClasses.class, "of", Iterable.class); - ReflectionUtils.makeAccessible(method); - return (JavaClasses) ReflectionUtils.invokeMethod(method, null, this.classes.values()); + DescribedPredicate isAutoConfiguration = DescribedPredicate.describe("is an auto-configuration", + (c) -> this.autoConfigurationClasses.containsKey(c.getName())); + return this.classes.that(isAutoConfiguration); } private void processImports(JavaClass javaClass, Map result) {