GH-406 - Improving the detection of Spring AOT classes.

We now inspect the classes for the newly introduced Spring AOT @Generated annotation instead of a name containing a double underscore.
This commit is contained in:
Oliver Drotbohm
2023-12-08 22:15:29 +01:00
parent 4043b2edee
commit c1f5630a72
2 changed files with 9 additions and 4 deletions

View File

@@ -17,6 +17,7 @@ package org.springframework.modulith.core;
import static com.tngtech.archunit.base.DescribedPredicate.*;
import static com.tngtech.archunit.core.domain.JavaClass.Predicates.*;
import static com.tngtech.archunit.core.domain.properties.CanBeAnnotated.Predicates.*;
import static com.tngtech.archunit.core.domain.properties.HasName.Predicates.*;
import static java.util.stream.Collectors.*;
@@ -33,6 +34,7 @@ import org.jgrapht.graph.DefaultDirectedGraph;
import org.jgrapht.graph.DefaultEdge;
import org.jgrapht.traverse.TopologicalOrderIterator;
import org.jmolecules.archunit.JMoleculesDddRules;
import org.springframework.aot.generate.Generated;
import org.springframework.core.annotation.AnnotationAwareOrderComparator;
import org.springframework.core.io.support.SpringFactoriesLoader;
import org.springframework.lang.Nullable;
@@ -44,6 +46,7 @@ import org.springframework.util.function.SingletonSupplier;
import com.tngtech.archunit.base.DescribedPredicate;
import com.tngtech.archunit.core.domain.JavaClass;
import com.tngtech.archunit.core.domain.JavaClasses;
import com.tngtech.archunit.core.domain.properties.CanBeAnnotated;
import com.tngtech.archunit.core.domain.properties.HasName;
import com.tngtech.archunit.core.importer.ClassFileImporter;
import com.tngtech.archunit.core.importer.ImportOption;
@@ -64,8 +67,8 @@ public class ApplicationModules implements Iterable<ApplicationModule> {
private static final ImportOption IMPORT_OPTION = new ImportOption.DoNotIncludeTests();
private static final boolean JGRAPHT_PRESENT = ClassUtils.isPresent("org.jgrapht.Graph",
ApplicationModules.class.getClassLoader());
private static final DescribedPredicate<HasName> IS_AOT_TYPE = nameContaining("__")
.or(nameContaining("$$SpringCGLIB$$"));
private static final DescribedPredicate<CanBeAnnotated> IS_AOT_TYPE = annotatedWith(Generated.class);
private static final DescribedPredicate<HasName> IS_SPRING_CGLIB_PROXY = nameContaining("$$SpringCGLIB$$");
static {
@@ -101,7 +104,7 @@ public class ApplicationModules implements Iterable<ApplicationModule> {
this.allClasses = new ClassFileImporter() //
.withImportOption(option) //
.importPackages(packages) //
.that(not(ignored.or(IS_AOT_TYPE)));
.that(not(ignored.or(IS_AOT_TYPE).or(IS_SPRING_CGLIB_PROXY)));
Classes classes = Classes.of(allClasses);

View File

@@ -15,10 +15,12 @@
*/
package com.acme.myproject.aot;
import org.springframework.aot.generate.Generated;
/**
*
* @author Oliver Drotbohm
*/
@Generated
public class Spring__Aot {
}