From 1d7c1ff6e022dffd6ef0027a0c327a7a021ae839 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Wed, 7 Dec 2022 13:09:00 +0100 Subject: [PATCH] Exclude synthetic constructors from AOT inspection. Java8 bytecode may contain synthetic constructors that refer to anonymous classes which should not be inspected. Eg. the following construct results in bytecode as listed further down below. public enum Outer { INSTANCE { @Override public Inner getInnerType() { return Inner.STANDALONE; } }, public abstract Inner getInnerType(); } synthetic Outer(java.lang.String arg0, int arg1, Inner$1 arg2) See: #2744 Original pull request: #2746 --- .../java/org/springframework/data/util/TypeCollector.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/org/springframework/data/util/TypeCollector.java b/src/main/java/org/springframework/data/util/TypeCollector.java index ae934d2c2..818bb35e3 100644 --- a/src/main/java/org/springframework/data/util/TypeCollector.java +++ b/src/main/java/org/springframework/data/util/TypeCollector.java @@ -127,6 +127,10 @@ public class TypeCollector { } 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);