From 78ec439ccb1a472ee7a17a033f112ad93da408cb Mon Sep 17 00:00:00 2001 From: JFronny Date: Wed, 24 Apr 2024 10:35:03 +0200 Subject: [PATCH] fix(serialize-generator): more checks to prevent double declarations --- .../generator/adapter/impl/ArrayAdapter.java | 70 ++++++++++--------- .../adapter/impl/CollectionAdapter.java | 70 ++++++++++--------- .../generator/adapter/impl/DateAdapter.java | 10 +-- .../generator/adapter/impl/EnumAdapter.java | 32 +++++---- .../generator/adapter/impl/MapAdapter.java | 70 ++++++++++--------- 5 files changed, 126 insertions(+), 126 deletions(-) diff --git a/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/adapter/impl/ArrayAdapter.java b/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/adapter/impl/ArrayAdapter.java index 7b5a6ba..3c565a5 100644 --- a/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/adapter/impl/ArrayAdapter.java +++ b/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/adapter/impl/ArrayAdapter.java @@ -50,41 +50,43 @@ public class ArrayAdapter extends Adapter { @Override public void generateRead() { - CodeBlock.Builder kode = CodeBlock.builder(); - // Coerce - kode.beginControlFlow("if (reader.isLenient() && reader.peek() != $T.BEGIN_ARRAY)", Cl.GSON_TOKEN) - .add("return new $T[] { ", componentType); - generateRead(kode, componentType, argName, componentType.getAnnotationMirrors()); - kode.add(" };\n").endControlFlow(); - - kode.addStatement("$T<$T> list = new $T<>()", List.class, componentType, ArrayList.class) - .addStatement("reader.beginArray()") - .beginControlFlow("while (reader.hasNext())") - .beginControlFlow("if (reader.peek() == $T.NULL)", Cl.GSON_TOKEN) - .addStatement("reader.nextNull()") - .addStatement("list.add(null)") - .nextControlFlow("else") - .add("list.add("); - generateRead(kode, componentType, argName, componentType.getAnnotationMirrors()); - kode.add(");\n") - .endControlFlow() - .endControlFlow() - .addStatement("reader.endArray()") - .addStatement("return list.toArray($T[]::new)", componentType); - String methodName = "deserialize$" + name; - klazz.addMethod( - MethodSpec.methodBuilder(methodName) - .addModifiers(Modifier.PRIVATE, Modifier.STATIC) - .returns(typeName) - .addTypeVariable(TypeVariableName.get("TEx", Exception.class)) - .addTypeVariable(TypeVariableName.get("Reader", ParameterizedTypeName.get(Cl.SERIALIZE_READER, TypeVariableName.get("TEx"), TypeVariableName.get("Reader")))) - .addParameter(TypeVariableName.get("Reader"), "reader") - .addException(TypeVariableName.get("TEx")) - .addException(Cl.MALFORMED_DATA_EXCEPTION) - .addCode(kode.build()) - .build() - ); + if (klazz.methodSpecs.stream().noneMatch(s -> s.name.equals(methodName))) { + CodeBlock.Builder kode = CodeBlock.builder(); + // Coerce + kode.beginControlFlow("if (reader.isLenient() && reader.peek() != $T.BEGIN_ARRAY)", Cl.GSON_TOKEN) + .add("return new $T[] { ", componentType); + generateRead(kode, componentType, argName, componentType.getAnnotationMirrors()); + kode.add(" };\n").endControlFlow(); + + kode.addStatement("$T<$T> list = new $T<>()", List.class, componentType, ArrayList.class) + .addStatement("reader.beginArray()") + .beginControlFlow("while (reader.hasNext())") + .beginControlFlow("if (reader.peek() == $T.NULL)", Cl.GSON_TOKEN) + .addStatement("reader.nextNull()") + .addStatement("list.add(null)") + .nextControlFlow("else") + .add("list.add("); + generateRead(kode, componentType, argName, componentType.getAnnotationMirrors()); + kode.add(");\n") + .endControlFlow() + .endControlFlow() + .addStatement("reader.endArray()") + .addStatement("return list.toArray($T[]::new)", componentType); + + klazz.addMethod( + MethodSpec.methodBuilder(methodName) + .addModifiers(Modifier.PRIVATE, Modifier.STATIC) + .returns(typeName) + .addTypeVariable(TypeVariableName.get("TEx", Exception.class)) + .addTypeVariable(TypeVariableName.get("Reader", ParameterizedTypeName.get(Cl.SERIALIZE_READER, TypeVariableName.get("TEx"), TypeVariableName.get("Reader")))) + .addParameter(TypeVariableName.get("Reader"), "reader") + .addException(TypeVariableName.get("TEx")) + .addException(Cl.MALFORMED_DATA_EXCEPTION) + .addCode(kode.build()) + .build() + ); + } code.add("$N(reader)", methodName); } } diff --git a/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/adapter/impl/CollectionAdapter.java b/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/adapter/impl/CollectionAdapter.java index 572f0c4..f5b8d6b 100644 --- a/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/adapter/impl/CollectionAdapter.java +++ b/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/adapter/impl/CollectionAdapter.java @@ -78,41 +78,43 @@ public class CollectionAdapter extends Adapter { @Override public void generateRead() { - CodeBlock.Builder kode = CodeBlock.builder(); - kode.addStatement("$T list = new $T<>()", typeName, implType); - // Coerce - kode.beginControlFlow("if (reader.isLenient() && reader.peek() != $T.BEGIN_ARRAY)", Cl.GSON_TOKEN) - .add("list.add("); - generateRead(kode, componentType, argName, componentType.getAnnotationMirrors()); - kode.add(");\n").addStatement("return list").endControlFlow(); - - kode.addStatement("reader.beginArray()") - .beginControlFlow("while (reader.hasNext())") - .beginControlFlow("if (reader.peek() == $T.NULL)", Cl.GSON_TOKEN) - .addStatement("reader.nextNull()") - .addStatement("list.add(null)") - .nextControlFlow("else") - .add("list.add("); - generateRead(kode, componentType, argName, componentType.getAnnotationMirrors()); - kode.add(");\n") - .endControlFlow() - .endControlFlow() - .addStatement("reader.endArray()") - .addStatement("return list"); - String methodName = "read$" + name; - klazz.addMethod( - MethodSpec.methodBuilder(methodName) - .addModifiers(Modifier.PRIVATE, Modifier.STATIC) - .returns(typeName) - .addTypeVariable(TypeVariableName.get("TEx", Exception.class)) - .addTypeVariable(TypeVariableName.get("Reader", ParameterizedTypeName.get(Cl.SERIALIZE_READER, TypeVariableName.get("TEx"), TypeVariableName.get("Reader")))) - .addParameter(TypeVariableName.get("Reader"), "reader") - .addException(TypeVariableName.get("TEx")) - .addException(Cl.MALFORMED_DATA_EXCEPTION) - .addCode(kode.build()) - .build() - ); + if (klazz.methodSpecs.stream().noneMatch(s -> s.name.equals(methodName))) { + CodeBlock.Builder kode = CodeBlock.builder(); + kode.addStatement("$T list = new $T<>()", typeName, implType); + // Coerce + kode.beginControlFlow("if (reader.isLenient() && reader.peek() != $T.BEGIN_ARRAY)", Cl.GSON_TOKEN) + .add("list.add("); + generateRead(kode, componentType, argName, componentType.getAnnotationMirrors()); + kode.add(");\n").addStatement("return list").endControlFlow(); + + kode.addStatement("reader.beginArray()") + .beginControlFlow("while (reader.hasNext())") + .beginControlFlow("if (reader.peek() == $T.NULL)", Cl.GSON_TOKEN) + .addStatement("reader.nextNull()") + .addStatement("list.add(null)") + .nextControlFlow("else") + .add("list.add("); + generateRead(kode, componentType, argName, componentType.getAnnotationMirrors()); + kode.add(");\n") + .endControlFlow() + .endControlFlow() + .addStatement("reader.endArray()") + .addStatement("return list"); + + klazz.addMethod( + MethodSpec.methodBuilder(methodName) + .addModifiers(Modifier.PRIVATE, Modifier.STATIC) + .returns(typeName) + .addTypeVariable(TypeVariableName.get("TEx", Exception.class)) + .addTypeVariable(TypeVariableName.get("Reader", ParameterizedTypeName.get(Cl.SERIALIZE_READER, TypeVariableName.get("TEx"), TypeVariableName.get("Reader")))) + .addParameter(TypeVariableName.get("Reader"), "reader") + .addException(TypeVariableName.get("TEx")) + .addException(Cl.MALFORMED_DATA_EXCEPTION) + .addCode(kode.build()) + .build() + ); + } code.add("$N(reader)", methodName); } } diff --git a/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/adapter/impl/DateAdapter.java b/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/adapter/impl/DateAdapter.java index d0c3b7b..44e347e 100644 --- a/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/adapter/impl/DateAdapter.java +++ b/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/adapter/impl/DateAdapter.java @@ -32,15 +32,7 @@ public class DateAdapter extends Adapter { @Override public void generateRead() { - boolean found = false; - for (MethodSpec spec : klazz.methodSpecs) { - if (spec.name.equals("parseDate")) { - found = true; - break; - } - } - - if (!found) { + if (klazz.methodSpecs.stream().noneMatch(s -> s.name.equals("parseDate"))) { klazz.addMethod( MethodSpec.methodBuilder("parseDate") .addModifiers(Modifier.PRIVATE, Modifier.STATIC) diff --git a/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/adapter/impl/EnumAdapter.java b/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/adapter/impl/EnumAdapter.java index 998a02d..c00bd7e 100644 --- a/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/adapter/impl/EnumAdapter.java +++ b/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/adapter/impl/EnumAdapter.java @@ -44,21 +44,23 @@ public class EnumAdapter extends Adapter { @Override public void generateRead() { String methodName = "read$" + name; - klazz.addMethod( - MethodSpec.methodBuilder(methodName) - .addModifiers(Modifier.PRIVATE, Modifier.STATIC) - .returns(TypeName.get(tel)) - .addParameter(String.class, "value") - .addCode( - CodeBlock.builder() - .beginControlFlow("for ($1T t : $1T.values())", tel) - .addStatement("if (t.name().equals(value)) return t") - .endControlFlow() - .addStatement("return null") - .build() - ) - .build() - ); + if (klazz.methodSpecs.stream().noneMatch(s -> s.name.equals(methodName))) { + klazz.addMethod( + MethodSpec.methodBuilder(methodName) + .addModifiers(Modifier.PRIVATE, Modifier.STATIC) + .returns(TypeName.get(tel)) + .addParameter(String.class, "value") + .addCode( + CodeBlock.builder() + .beginControlFlow("for ($1T t : $1T.values())", tel) + .addStatement("if (t.name().equals(value)) return t") + .endControlFlow() + .addStatement("return null") + .build() + ) + .build() + ); + } code.add("$N(reader.nextString())", methodName); } } diff --git a/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/adapter/impl/MapAdapter.java b/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/adapter/impl/MapAdapter.java index f79ebf5..7b36321 100644 --- a/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/adapter/impl/MapAdapter.java +++ b/commons-serialize-generator/src/main/java/io/gitlab/jfronny/commons/serialize/generator/adapter/impl/MapAdapter.java @@ -156,41 +156,43 @@ public class MapAdapter extends Adapter { @Override public void generateRead() { - CodeBlock.Builder kode = CodeBlock.builder(); - kode.addStatement("$T map = new $T<>()", typeName, implType); - - kode.addStatement("reader.beginObject()") - .beginControlFlow("while (reader.hasNext())") - .addStatement("String name = reader.nextName()") - .beginControlFlow("if (reader.peek() == $T.NULL)", Cl.GSON_TOKEN) - .addStatement("reader.nextNull()") - .add("map.put("); - generateConvertKey(kode); - kode.addStatement(", null)") - .nextControlFlow("else") - .add("map.put("); - generateConvertKey(kode); - kode.add(", "); - generateRead(kode, componentType2, argName, componentType2.getAnnotationMirrors()); - kode.addStatement(")") - .endControlFlow() - .endControlFlow() - .addStatement("reader.endObject()") - .addStatement("return map"); - String methodName = "read$" + name; - klazz.addMethod( - MethodSpec.methodBuilder(methodName) - .addModifiers(Modifier.PRIVATE, Modifier.STATIC) - .returns(typeName) - .addTypeVariable(TypeVariableName.get("TEx", Exception.class)) - .addTypeVariable(TypeVariableName.get("Reader", ParameterizedTypeName.get(Cl.SERIALIZE_READER, TypeVariableName.get("TEx"), TypeVariableName.get("Reader")))) - .addParameter(TypeVariableName.get("Reader"), "reader") - .addException(TypeVariableName.get("TEx")) - .addException(Cl.MALFORMED_DATA_EXCEPTION) - .addCode(kode.build()) - .build() - ); + if (klazz.methodSpecs.stream().noneMatch(s -> s.name.equals(methodName))) { + CodeBlock.Builder kode = CodeBlock.builder(); + kode.addStatement("$T map = new $T<>()", typeName, implType); + + kode.addStatement("reader.beginObject()") + .beginControlFlow("while (reader.hasNext())") + .addStatement("String name = reader.nextName()") + .beginControlFlow("if (reader.peek() == $T.NULL)", Cl.GSON_TOKEN) + .addStatement("reader.nextNull()") + .add("map.put("); + generateConvertKey(kode); + kode.addStatement(", null)") + .nextControlFlow("else") + .add("map.put("); + generateConvertKey(kode); + kode.add(", "); + generateRead(kode, componentType2, argName, componentType2.getAnnotationMirrors()); + kode.addStatement(")") + .endControlFlow() + .endControlFlow() + .addStatement("reader.endObject()") + .addStatement("return map"); + + klazz.addMethod( + MethodSpec.methodBuilder(methodName) + .addModifiers(Modifier.PRIVATE, Modifier.STATIC) + .returns(typeName) + .addTypeVariable(TypeVariableName.get("TEx", Exception.class)) + .addTypeVariable(TypeVariableName.get("Reader", ParameterizedTypeName.get(Cl.SERIALIZE_READER, TypeVariableName.get("TEx"), TypeVariableName.get("Reader")))) + .addParameter(TypeVariableName.get("Reader"), "reader") + .addException(TypeVariableName.get("TEx")) + .addException(Cl.MALFORMED_DATA_EXCEPTION) + .addCode(kode.build()) + .build() + ); + } code.add("$N(reader)", methodName); } }