Browse Source

Merge pull request #49058 from GaetanoCerciello

* pr/49058:
  Polish "Remove reflection in AutoConfigurationChecker#getConfigurations"
  Remove reflection in AutoConfigurationChecker#getConfigurations

Closes gh-49058
pull/49222/head
Moritz Halbritter 1 month ago
parent
commit
72202ff35c
  1. 24
      buildSrc/src/main/java/org/springframework/boot/build/architecture/AutoConfigurationChecker.java

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

@ -16,7 +16,6 @@ @@ -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; @@ -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 { @@ -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 { @@ -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) {

Loading…
Cancel
Save