Skip to content

Commit 72202ff

Browse files
committed
Merge pull request spring-projects#49058 from GaetanoCerciello
* pr/49058: Polish "Remove reflection in AutoConfigurationChecker#getConfigurations" Remove reflection in AutoConfigurationChecker#getConfigurations Closes spring-projectsgh-49058
2 parents dfd4b85 + 73df7fa commit 72202ff

1 file changed

Lines changed: 13 additions & 11 deletions

File tree

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

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
package org.springframework.boot.build.architecture;
1818

19-
import java.lang.reflect.Method;
2019
import java.util.HashMap;
2120
import java.util.Map;
2221

@@ -26,8 +25,6 @@
2625
import com.tngtech.archunit.core.domain.JavaClasses;
2726
import 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

Comments
 (0)