diff --git a/pom.xml b/pom.xml index 13bf0377b4..f068127bea 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-commons - 3.1.0-SNAPSHOT + 3.1.x-2744-SNAPSHOT Spring Data Core Core Spring concepts underpinning every Spring Data module. 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 3184ae28a7..cc1bdf3044 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 @@ protected void contribute(AotRepositoryContext repositoryContext, GenerationCont 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 @@ private static boolean isSpringDataManagedAnnotation(@Nullable MergedAnnotation< || 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 4d18f61fa8..1d978f0fb8 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(); @@ -125,6 +127,10 @@ Set visitConstructorsOfType(ResolvableType type) { } Set discoveredTypes = new LinkedHashSet<>(); for (Constructor constructor : type.toClass().getDeclaredConstructors()) { + + if (constructor.isSynthetic()) { + continue; + } for (Class signatureType : TypeUtils.resolveTypesInSignature(type.toClass(), constructor)) { if (typeFilter.test(signatureType)) { discoveredTypes.add(signatureType); diff --git a/src/test/java/org/springframework/data/aot/TypeCollectorUnitTests.java b/src/test/java/org/springframework/data/aot/TypeCollectorUnitTests.java index 5a8b6b0620..49cc6ca356 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 @@ void includesDeclaredClassesInInspection() { WithDeclaredClass.SomeEnum.class); } + @Test // GH-2744 + void skipsCoreFrameworkType() { + assertThat(TypeCollector.inspect(org.springframework.core.AliasRegistry.class).list()).isEmpty(); + } + }