1616
1717package org .springframework .boot .build .architecture ;
1818
19- import java .lang .reflect .Method ;
2019import java .util .HashMap ;
2120import java .util .Map ;
2221
2625import com .tngtech .archunit .core .domain .JavaClasses ;
2726import com .tngtech .archunit .lang .EvaluationResult ;
2827
29- import org .springframework .util .ReflectionUtils ;
30-
3128/**
3229 * Finds all configurations from auto-configurations (either nested configurations or
3330 * imported ones) and checks that these classes don't contain public members.
@@ -43,7 +40,7 @@ class AutoConfigurationChecker {
4340 .and (ArchitectureRules .areNotKotlinClasses ());
4441
4542 EvaluationResult check (JavaClasses javaClasses ) {
46- AutoConfigurations autoConfigurations = new AutoConfigurations ();
43+ AutoConfigurations autoConfigurations = new AutoConfigurations (javaClasses );
4744 for (JavaClass javaClass : javaClasses ) {
4845 if (isAutoConfigurationOrEnclosedInAutoConfiguration (javaClass )) {
4946 autoConfigurations .add (javaClass );
@@ -74,23 +71,28 @@ private static final class AutoConfigurations {
7471
7572 private static final String CONFIGURATION = "org.springframework.context.annotation.Configuration" ;
7673
77- private final Map <String , JavaClass > classes = new HashMap <>();
74+ private final JavaClasses classes ;
75+
76+ private final Map <String , JavaClass > autoConfigurationClasses = new HashMap <>();
77+
78+ AutoConfigurations (JavaClasses classes ) {
79+ this .classes = classes ;
80+ }
7881
7982 void add (JavaClass autoConfiguration ) {
8083 if (!autoConfiguration .isMetaAnnotatedWith (CONFIGURATION )) {
8184 return ;
8285 }
83- if (this .classes .putIfAbsent (autoConfiguration .getName (), autoConfiguration ) != null ) {
86+ if (this .autoConfigurationClasses .putIfAbsent (autoConfiguration .getName (), autoConfiguration ) != null ) {
8487 return ;
8588 }
86- processImports (autoConfiguration , this .classes );
89+ processImports (autoConfiguration , this .autoConfigurationClasses );
8790 }
8891
8992 JavaClasses getConfigurations () {
90- // TODO: Find a way without reflection
91- Method method = ReflectionUtils .findMethod (JavaClasses .class , "of" , Iterable .class );
92- ReflectionUtils .makeAccessible (method );
93- return (JavaClasses ) ReflectionUtils .invokeMethod (method , null , this .classes .values ());
93+ DescribedPredicate <JavaClass > isAutoConfiguration = DescribedPredicate .describe ("is an auto-configuration" ,
94+ (c ) -> this .autoConfigurationClasses .containsKey (c .getName ()));
95+ return this .classes .that (isAutoConfiguration );
9496 }
9597
9698 private void processImports (JavaClass javaClass , Map <String , JavaClass > result ) {
0 commit comments