From 1a436343da779c301b3dab5b549002bd5d5634a7 Mon Sep 17 00:00:00 2001 From: JFronny Date: Wed, 24 Apr 2024 13:11:54 +0200 Subject: [PATCH] fix(serialize-generator): initial support for some use cases with generics --- .../generator/SerializeGeneratorProcessor.java | 6 +++--- .../serialize/generator/gprocessor/GProcessor.java | 10 ++++++++++ .../generator/gprocessor/InstanceProcessor.java | 1 + 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/SerializeGeneratorProcessor.java b/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/SerializeGeneratorProcessor.java index ef7bc39..0016e12 100644 --- a/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/SerializeGeneratorProcessor.java +++ b/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/SerializeGeneratorProcessor.java @@ -232,8 +232,8 @@ public class SerializeGeneratorProcessor extends AbstractProcessor2 { TypeSpec.Builder spec = TypeSpec.classBuilder(toProcess.generatedClassName().simpleName()) .addOriginatingElement(toProcess.classElement()) - .addModifiers(Modifier.PUBLIC) - .addTypeVariables(typeVariables); + .addModifiers(Modifier.PUBLIC); +// .addTypeVariables(typeVariables); seen.put(toProcess.generatedClassName(), spec); @@ -245,7 +245,7 @@ public class SerializeGeneratorProcessor extends AbstractProcessor2 { if (toProcess.generateAdapter()) { generatedAdapters.add(processor.generateDelegatingAdapter(spec, classType, toProcess.generatedClassName())); } - processor.generateSerialisation(spec, toProcess, typeVariables, other); + processor.generateSerialisation(spec, toProcess, typeVariables, other); //TODO fix type annotations } processor.generateAuxiliary(spec, classType, toProcess.configure()); diff --git a/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/gprocessor/GProcessor.java b/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/gprocessor/GProcessor.java index 7c0528d..2a2160c 100644 --- a/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/gprocessor/GProcessor.java +++ b/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/gprocessor/GProcessor.java @@ -102,6 +102,14 @@ public abstract class GProcessor { } } + protected TypeName nonGeneric(TypeName from) { + if (from instanceof ParameterizedTypeName pn) { + //TODO be more clever + return ParameterizedTypeName.get(pn.rawType, pn.typeArguments.stream().map(s -> WildcardTypeName.subtypeOf(Object.class)).toArray(TypeName[]::new)).annotated(pn.annotations); + } + return from; + } + public void generateDelegateToAdapter(TypeSpec.Builder spec, TypeName classType, TypeMirror adapter, boolean isStatic) { if (!isStatic) { spec.addField( @@ -110,6 +118,7 @@ public abstract class GProcessor { .build() ); } + classType = nonGeneric(classType); spec.addMethod( extension(MethodSpec.methodBuilder("deserialize")) .addModifiers(Modifier.PUBLIC, Modifier.STATIC) @@ -136,6 +145,7 @@ public abstract class GProcessor { } public void generateAuxiliary(TypeSpec.Builder spec, TypeName classType, TypeMirror configure) { + classType = nonGeneric(classType); final UnaryOperator configureReader = cb -> { if (configure != null) cb.addStatement("$T.configure(reader)", configure); return cb; diff --git a/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/gprocessor/InstanceProcessor.java b/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/gprocessor/InstanceProcessor.java index e79084f..717a0bf 100644 --- a/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/gprocessor/InstanceProcessor.java +++ b/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/gprocessor/InstanceProcessor.java @@ -20,6 +20,7 @@ public class InstanceProcessor extends GProcessor { @Override public ClassName generateDelegatingAdapter(TypeSpec.Builder spec, TypeName classType, ClassName generatedClassName) { + classType = nonGeneric(classType); spec.addType( TypeSpec.classBuilder("Adapter") .addModifiers(Modifier.PUBLIC, Modifier.STATIC)