From 7fc299e44d54becc12f2dd6b9c577f2620264f10 Mon Sep 17 00:00:00 2001 From: producer Date: Wed, 4 Feb 2026 11:07:10 +0100 Subject: [PATCH] Remove reflection in AutoConfigurationChecker#getConfigurations Signed-off-by: producer Signed-off-by: Gaetano Cerciello --- .../AutoConfigurationChecker.java | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) 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 c1d7ee9d131c..828661fb404e 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,17 +16,13 @@ package org.springframework.boot.build.architecture; -import java.lang.reflect.Method; -import java.util.HashMap; -import java.util.Map; - import com.tngtech.archunit.base.DescribedPredicate; import com.tngtech.archunit.core.domain.JavaAnnotation; 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; +import java.util.HashMap; +import java.util.Map; /** * Finds all configurations from auto-configurations (either nested configurations or @@ -43,7 +39,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,8 +70,14 @@ private static final class AutoConfigurations { private static final String CONFIGURATION = "org.springframework.context.annotation.Configuration"; + private final JavaClasses allClasses; + private final Map classes = new HashMap<>(); + AutoConfigurations(JavaClasses allClasses) { + this.allClasses = allClasses; + } + void add(JavaClass autoConfiguration) { if (!autoConfiguration.isMetaAnnotatedWith(CONFIGURATION)) { return; @@ -87,10 +89,11 @@ void add(JavaClass autoConfiguration) { } 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()); + // Return a filtered view of the original JavaClasses containing only the + // configuration classes + DescribedPredicate inConfigurations = DescribedPredicate + .describe("is in configurations", c -> this.classes.containsKey(c.getName())); + return this.allClasses.that(inConfigurations); } private void processImports(JavaClass javaClass, Map result) {