diff --git a/src/main/java/org/springframework/data/repository/config/RepositoryRegistrationAotProcessor.java b/src/main/java/org/springframework/data/repository/config/RepositoryRegistrationAotProcessor.java index f518bdda5..7b19a34fc 100644 --- a/src/main/java/org/springframework/data/repository/config/RepositoryRegistrationAotProcessor.java +++ b/src/main/java/org/springframework/data/repository/config/RepositoryRegistrationAotProcessor.java @@ -82,11 +82,11 @@ public class RepositoryRegistrationAotProcessor implements BeanRegistrationAotPr repositoryContext.getResolvedTypes().stream() .filter(it -> !RepositoryRegistrationAotContribution.isJavaOrPrimitiveType(it)) - .forEach(it -> RepositoryRegistrationAotProcessor.contributeType(it, generationContext)); + .forEach(it -> contributeType(it, generationContext)); repositoryContext.getResolvedAnnotations().stream() .filter(RepositoryRegistrationAotProcessor::isSpringDataManagedAnnotation).map(MergedAnnotation::getType) - .forEach(it -> RepositoryRegistrationAotProcessor.contributeType(it, generationContext)); + .forEach(it -> contributeType(it, generationContext)); } private boolean isRepositoryBean(RegisteredBean bean) { @@ -167,7 +167,7 @@ public class RepositoryRegistrationAotProcessor implements BeanRegistrationAotPr || annotation.getMetaTypes().stream().anyMatch(RepositoryRegistrationAotProcessor::isInSpringDataNamespace)); } - private static void contributeType(Class type, GenerationContext generationContext) { + protected void contributeType(Class type, GenerationContext generationContext) { TypeContributor.contribute(type, it -> true, generationContext); } diff --git a/src/main/java/org/springframework/data/util/TypeCollector.java b/src/main/java/org/springframework/data/util/TypeCollector.java index 1fe74ea6a..ae934d2c2 100644 --- a/src/main/java/org/springframework/data/util/TypeCollector.java +++ b/src/main/java/org/springframework/data/util/TypeCollector.java @@ -48,16 +48,18 @@ public class TypeCollector { private static final Log logger = LogFactory.getLog(TypeCollector.class); - static final Set EXCLUDED_DOMAINS = new HashSet<>(Arrays.asList("java", "sun.", "jdk.", "reactor.", - "kotlinx.", "kotlin.", "org.springframework.core.", "org.springframework.data.mapping.", - "org.springframework.data.repository.", "org.springframework.boot.", "org.springframework.core.")); + static final Set EXCLUDED_DOMAINS = new HashSet<>( + Arrays.asList("java", "sun.", "jdk.", "reactor.", "kotlinx.", "kotlin.", "org.springframework.core.", + "org.springframework.data.mapping.", "org.springframework.data.repository.", "org.springframework.boot.", + "org.springframework.context.", "org.springframework.beans.")); private final Predicate> excludedDomainsFilter = type -> { - String packageName = type.getPackageName(); + String packageName = type.getPackageName() + "."; return EXCLUDED_DOMAINS.stream().noneMatch(packageName::startsWith); }; - private Predicate> typeFilter = excludedDomainsFilter; + private Predicate> typeFilter = excludedDomainsFilter + .and(it -> !it.isLocalClass() && !it.isAnonymousClass()); private final Predicate methodFilter = createMethodFilter(); diff --git a/src/test/java/org/springframework/data/aot/TypeCollectorUnitTests.java b/src/test/java/org/springframework/data/aot/TypeCollectorUnitTests.java index c2bfd8bc5..a81f28ef3 100644 --- a/src/test/java/org/springframework/data/aot/TypeCollectorUnitTests.java +++ b/src/test/java/org/springframework/data/aot/TypeCollectorUnitTests.java @@ -61,4 +61,9 @@ public class TypeCollectorUnitTests { WithDeclaredClass.SomeEnum.class); } + @Test // GH-2744 + void skipsCoreFrameworkType() { + assertThat(TypeCollector.inspect(org.springframework.core.AliasRegistry.class).list()).isEmpty(); + } + }