From a71ff9f72b2df20f11578528153db0228b3d037b Mon Sep 17 00:00:00 2001 From: mariofusco Date: Thu, 24 Oct 2024 18:16:50 +0200 Subject: [PATCH] Generating Jackson serializers for concrete classes only --- .../processor/JacksonCodeGenerator.java | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/extensions/resteasy-reactive/rest-jackson/deployment/src/main/java/io/quarkus/resteasy/reactive/jackson/deployment/processor/JacksonCodeGenerator.java b/extensions/resteasy-reactive/rest-jackson/deployment/src/main/java/io/quarkus/resteasy/reactive/jackson/deployment/processor/JacksonCodeGenerator.java index d282f8db034f00..8e96e45fa3f13b 100644 --- a/extensions/resteasy-reactive/rest-jackson/deployment/src/main/java/io/quarkus/resteasy/reactive/jackson/deployment/processor/JacksonCodeGenerator.java +++ b/extensions/resteasy-reactive/rest-jackson/deployment/src/main/java/io/quarkus/resteasy/reactive/jackson/deployment/processor/JacksonCodeGenerator.java @@ -70,7 +70,7 @@ public Collection create(Collection classInfos) { private Optional create(ClassInfo classInfo) { String beanClassName = classInfo.name().toString(); - if (vetoedClassName(beanClassName) || !generatedClassNames.add(beanClassName)) { + if (vetoedClass(classInfo, beanClassName) || !generatedClassNames.add(beanClassName)) { return Optional.empty(); } @@ -112,9 +112,9 @@ protected void classFields(ClassInfo classInfo, Collection fields) { protected T onSuperClass(ClassInfo classInfo, Function f) { Type superType = classInfo.superClassType(); - if (superType != null && !vetoedClassName(superType.name().toString())) { + if (superType != null) { ClassInfo superClassInfo = jandexIndex.getClassByName(superType.name()); - if (superClassInfo != null) { + if (superClassInfo != null && !vetoedClass(superClassInfo, superType.name().toString())) { return f.apply(superClassInfo); } } @@ -145,8 +145,9 @@ protected static String ucFirst(String name) { return name.substring(0, 1).toUpperCase() + name.substring(1); } - protected static boolean vetoedClassName(String className) { - return className.startsWith("java.") || className.startsWith("jakarta.") || className.startsWith("io.vertx.core.json."); + protected static boolean vetoedClass(ClassInfo classInfo, String className) { + return classInfo.isAbstract() || classInfo.isInterface() || className.startsWith("java.") + || className.startsWith("jakarta.") || className.startsWith("io.vertx.core.json."); } protected enum FieldKind { @@ -203,11 +204,9 @@ private void registerTypeToBeGenerated(Type type) { } private void registerTypeToBeGenerated(String typeName) { - if (!vetoedClassName(typeName)) { - ClassInfo classInfo = jandexIndex.getClassByName(typeName); - if (classInfo != null && shouldGenerateCodeFor(classInfo)) { - toBeGenerated.add(classInfo); - } + ClassInfo classInfo = jandexIndex.getClassByName(typeName); + if (classInfo != null && !vetoedClass(classInfo, typeName) && shouldGenerateCodeFor(classInfo)) { + toBeGenerated.add(classInfo); } } @@ -312,8 +311,14 @@ private String fieldNameFromMethod(MethodInfo methodInfo) { } boolean hasUnknownAnnotation() { - return annotations.keySet().stream() - .anyMatch(ann -> ann.startsWith("com.fasterxml.jackson.") && !ann.equals(JsonProperty.class.getName())); + return annotations.keySet().stream().anyMatch(FieldSpecs::isUnknownAnnotation); + } + + private static boolean isUnknownAnnotation(String ann) { + if (ann.startsWith("com.fasterxml.jackson.")) { + return !ann.equals(JsonProperty.class.getName()); + } + return false; } ResultHandle toValueWriterHandle(BytecodeCreator bytecode, ResultHandle valueHandle) {