mirror of
https://github.com/spring-projects/spring-boot.git
synced 2026-09-29 13:39:16 +00:00
Merge pull request #49058 from GaetanoCerciello
* pr/49058: Polish "Remove reflection in AutoConfigurationChecker#getConfigurations" Remove reflection in AutoConfigurationChecker#getConfigurations Closes gh-49058
This commit is contained in:
+13
-11
@@ -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<String, JavaClass> classes = new HashMap<>();
|
||||
private final JavaClasses classes;
|
||||
|
||||
private final Map<String, JavaClass> 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<JavaClass> isAutoConfiguration = DescribedPredicate.describe("is an auto-configuration",
|
||||
(c) -> this.autoConfigurationClasses.containsKey(c.getName()));
|
||||
return this.classes.that(isAutoConfiguration);
|
||||
}
|
||||
|
||||
private void processImports(JavaClass javaClass, Map<String, JavaClass> result) {
|
||||
|
||||
Reference in New Issue
Block a user