From f229dd496bccebd849e3b2276d7bb22ae330b5e9 Mon Sep 17 00:00:00 2001 From: JFronny Date: Wed, 24 Apr 2024 14:55:38 +0200 Subject: [PATCH] fix(serialize-generator): properly generate with SerializerFor --- .../SerializeGeneratorProcessor.java | 3 +++ .../adapter/impl/InferredAdapter.java | 17 ++++++++++++-- .../generator/test/ExampleAdapter2.java | 22 +++++++++++++++++++ .../serialize/generator/test/Main.java | 6 +++++ 4 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 commons-serialize-generator/src/test/java/io/gitlab/jfronny/commons/serialize/generator/test/ExampleAdapter2.java 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 388b2fa..83dfcfa 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 @@ -146,6 +146,9 @@ public class SerializeGeneratorProcessor extends AbstractProcessor2 { if (bld.nullSafe != null) throw new IllegalArgumentException("Duplicate annotation parameter: nullSafe"); bld.nullSafe = (Boolean) value.getValue(); } + case "hierarchical" -> { + // not relevant for this processor + } default -> throw new IllegalArgumentException("Unexpected annotation parameter: " + name); } }); diff --git a/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/adapter/impl/InferredAdapter.java b/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/adapter/impl/InferredAdapter.java index be9951e..0fbb533 100644 --- a/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/adapter/impl/InferredAdapter.java +++ b/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/adapter/impl/InferredAdapter.java @@ -1,13 +1,17 @@ package io.gitlab.jfronny.commons.serialize.generator.adapter.impl; import com.squareup.javapoet.ClassName; +import com.squareup.javapoet.CodeBlock; +import com.squareup.javapoet.FieldSpec; import com.squareup.javapoet.TypeName; import io.gitlab.jfronny.commons.serialize.generator.AdapterRef; import io.gitlab.jfronny.commons.serialize.generator.adapter.AdapterAdapter; import io.gitlab.jfronny.commons.tuple.Tuple; +import javax.lang.model.element.Modifier; import javax.lang.model.element.TypeElement; import javax.lang.model.type.TypeMirror; +import javax.tools.Diagnostic; import java.util.Set; public class InferredAdapter extends AdapterAdapter { @@ -29,13 +33,22 @@ public class InferredAdapter extends AdapterAdapter { var tmp = findTypeAdapterClass(type, refs); // Ignore nullSafe for now if (tmp != null) { + message.printMessage(Diagnostic.Kind.WARNING, "Inferred type adapter for " + type + " to " + tmp.left() + " (nullSafe: " + tmp.right() + ")"); this.typeAdapterClass = tmp.left(); } } @Override - protected TypeName createAdapter(String typeAdapterName) { - return ClassName.get(typeAdapterClass); + protected String createAdapter(String typeAdapterName) { + CodeBlock.Builder block = CodeBlock.builder(); + block.add("new $T()", typeAdapterClass); + klazz.addField( + FieldSpec.builder(ClassName.get(typeAdapterClass), typeAdapterName) + .addModifiers(Modifier.PRIVATE, Modifier.STATIC, Modifier.FINAL) + .initializer(block.build()) + .build() + ); + return typeAdapterName; } private static Tuple findTypeAdapterClass(TypeMirror type, Set refs) { diff --git a/commons-serialize-generator/src/test/java/io/gitlab/jfronny/commons/serialize/generator/test/ExampleAdapter2.java b/commons-serialize-generator/src/test/java/io/gitlab/jfronny/commons/serialize/generator/test/ExampleAdapter2.java new file mode 100644 index 0000000..cab4c33 --- /dev/null +++ b/commons-serialize-generator/src/test/java/io/gitlab/jfronny/commons/serialize/generator/test/ExampleAdapter2.java @@ -0,0 +1,22 @@ +package io.gitlab.jfronny.commons.serialize.generator.test; + +import io.gitlab.jfronny.commons.serialize.MalformedDataException; +import io.gitlab.jfronny.commons.serialize.SerializeReader; +import io.gitlab.jfronny.commons.serialize.SerializeWriter; +import io.gitlab.jfronny.commons.serialize.databind.api.SerializerFor; +import io.gitlab.jfronny.commons.serialize.databind.api.TypeAdapter; + +@SerializerFor(targets = Main.CustomValue.class) +public class ExampleAdapter2 extends TypeAdapter { + @Override + public > void serialize(Main.CustomValue value, Writer writer) throws TEx, MalformedDataException { + writer.value(value.nein); + } + + @Override + public > Main.CustomValue deserialize(Reader reader) throws TEx, MalformedDataException { + Main.CustomValue cv = new Main.CustomValue(); + cv.nein = reader.nextString(); + return cv; + } +} diff --git a/commons-serialize-generator/src/test/java/io/gitlab/jfronny/commons/serialize/generator/test/Main.java b/commons-serialize-generator/src/test/java/io/gitlab/jfronny/commons/serialize/generator/test/Main.java index 9e05fa8..54cf4c8 100644 --- a/commons-serialize-generator/src/test/java/io/gitlab/jfronny/commons/serialize/generator/test/Main.java +++ b/commons-serialize-generator/src/test/java/io/gitlab/jfronny/commons/serialize/generator/test/Main.java @@ -57,6 +57,8 @@ public class Main { public String getJoe() { return "A"; } + + public CustomValue cv; } @GSerializable(configure = Configuration.class) @@ -126,6 +128,10 @@ public class Main { public String maybe; } + public static class CustomValue { + public String nein; + } + public enum EeE { Yes, Yay, Aaee; }