fix(serialize-generator): more checks to prevent double declarations
ci/woodpecker/push/woodpecker Pipeline was successful
Details
ci/woodpecker/push/woodpecker Pipeline was successful
Details
This commit is contained in:
parent
5a9c3ee58f
commit
78ec439ccb
|
@ -50,41 +50,43 @@ public class ArrayAdapter extends Adapter<ArrayAdapter.Hydrated> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void generateRead() {
|
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;
|
String methodName = "deserialize$" + name;
|
||||||
klazz.addMethod(
|
if (klazz.methodSpecs.stream().noneMatch(s -> s.name.equals(methodName))) {
|
||||||
MethodSpec.methodBuilder(methodName)
|
CodeBlock.Builder kode = CodeBlock.builder();
|
||||||
.addModifiers(Modifier.PRIVATE, Modifier.STATIC)
|
// Coerce
|
||||||
.returns(typeName)
|
kode.beginControlFlow("if (reader.isLenient() && reader.peek() != $T.BEGIN_ARRAY)", Cl.GSON_TOKEN)
|
||||||
.addTypeVariable(TypeVariableName.get("TEx", Exception.class))
|
.add("return new $T[] { ", componentType);
|
||||||
.addTypeVariable(TypeVariableName.get("Reader", ParameterizedTypeName.get(Cl.SERIALIZE_READER, TypeVariableName.get("TEx"), TypeVariableName.get("Reader"))))
|
generateRead(kode, componentType, argName, componentType.getAnnotationMirrors());
|
||||||
.addParameter(TypeVariableName.get("Reader"), "reader")
|
kode.add(" };\n").endControlFlow();
|
||||||
.addException(TypeVariableName.get("TEx"))
|
|
||||||
.addException(Cl.MALFORMED_DATA_EXCEPTION)
|
kode.addStatement("$T<$T> list = new $T<>()", List.class, componentType, ArrayList.class)
|
||||||
.addCode(kode.build())
|
.addStatement("reader.beginArray()")
|
||||||
.build()
|
.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);
|
code.add("$N(reader)", methodName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,41 +78,43 @@ public class CollectionAdapter extends Adapter<CollectionAdapter.Hydrated> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void generateRead() {
|
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;
|
String methodName = "read$" + name;
|
||||||
klazz.addMethod(
|
if (klazz.methodSpecs.stream().noneMatch(s -> s.name.equals(methodName))) {
|
||||||
MethodSpec.methodBuilder(methodName)
|
CodeBlock.Builder kode = CodeBlock.builder();
|
||||||
.addModifiers(Modifier.PRIVATE, Modifier.STATIC)
|
kode.addStatement("$T list = new $T<>()", typeName, implType);
|
||||||
.returns(typeName)
|
// Coerce
|
||||||
.addTypeVariable(TypeVariableName.get("TEx", Exception.class))
|
kode.beginControlFlow("if (reader.isLenient() && reader.peek() != $T.BEGIN_ARRAY)", Cl.GSON_TOKEN)
|
||||||
.addTypeVariable(TypeVariableName.get("Reader", ParameterizedTypeName.get(Cl.SERIALIZE_READER, TypeVariableName.get("TEx"), TypeVariableName.get("Reader"))))
|
.add("list.add(");
|
||||||
.addParameter(TypeVariableName.get("Reader"), "reader")
|
generateRead(kode, componentType, argName, componentType.getAnnotationMirrors());
|
||||||
.addException(TypeVariableName.get("TEx"))
|
kode.add(");\n").addStatement("return list").endControlFlow();
|
||||||
.addException(Cl.MALFORMED_DATA_EXCEPTION)
|
|
||||||
.addCode(kode.build())
|
kode.addStatement("reader.beginArray()")
|
||||||
.build()
|
.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);
|
code.add("$N(reader)", methodName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,15 +32,7 @@ public class DateAdapter extends Adapter<DateAdapter.Hydrated> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void generateRead() {
|
public void generateRead() {
|
||||||
boolean found = false;
|
if (klazz.methodSpecs.stream().noneMatch(s -> s.name.equals("parseDate"))) {
|
||||||
for (MethodSpec spec : klazz.methodSpecs) {
|
|
||||||
if (spec.name.equals("parseDate")) {
|
|
||||||
found = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!found) {
|
|
||||||
klazz.addMethod(
|
klazz.addMethod(
|
||||||
MethodSpec.methodBuilder("parseDate")
|
MethodSpec.methodBuilder("parseDate")
|
||||||
.addModifiers(Modifier.PRIVATE, Modifier.STATIC)
|
.addModifiers(Modifier.PRIVATE, Modifier.STATIC)
|
||||||
|
|
|
@ -44,21 +44,23 @@ public class EnumAdapter extends Adapter<EnumAdapter.Hydrated> {
|
||||||
@Override
|
@Override
|
||||||
public void generateRead() {
|
public void generateRead() {
|
||||||
String methodName = "read$" + name;
|
String methodName = "read$" + name;
|
||||||
klazz.addMethod(
|
if (klazz.methodSpecs.stream().noneMatch(s -> s.name.equals(methodName))) {
|
||||||
MethodSpec.methodBuilder(methodName)
|
klazz.addMethod(
|
||||||
.addModifiers(Modifier.PRIVATE, Modifier.STATIC)
|
MethodSpec.methodBuilder(methodName)
|
||||||
.returns(TypeName.get(tel))
|
.addModifiers(Modifier.PRIVATE, Modifier.STATIC)
|
||||||
.addParameter(String.class, "value")
|
.returns(TypeName.get(tel))
|
||||||
.addCode(
|
.addParameter(String.class, "value")
|
||||||
CodeBlock.builder()
|
.addCode(
|
||||||
.beginControlFlow("for ($1T t : $1T.values())", tel)
|
CodeBlock.builder()
|
||||||
.addStatement("if (t.name().equals(value)) return t")
|
.beginControlFlow("for ($1T t : $1T.values())", tel)
|
||||||
.endControlFlow()
|
.addStatement("if (t.name().equals(value)) return t")
|
||||||
.addStatement("return null")
|
.endControlFlow()
|
||||||
.build()
|
.addStatement("return null")
|
||||||
)
|
.build()
|
||||||
.build()
|
)
|
||||||
);
|
.build()
|
||||||
|
);
|
||||||
|
}
|
||||||
code.add("$N(reader.nextString())", methodName);
|
code.add("$N(reader.nextString())", methodName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -156,41 +156,43 @@ public class MapAdapter extends Adapter<MapAdapter.Hydrated> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void generateRead() {
|
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;
|
String methodName = "read$" + name;
|
||||||
klazz.addMethod(
|
if (klazz.methodSpecs.stream().noneMatch(s -> s.name.equals(methodName))) {
|
||||||
MethodSpec.methodBuilder(methodName)
|
CodeBlock.Builder kode = CodeBlock.builder();
|
||||||
.addModifiers(Modifier.PRIVATE, Modifier.STATIC)
|
kode.addStatement("$T map = new $T<>()", typeName, implType);
|
||||||
.returns(typeName)
|
|
||||||
.addTypeVariable(TypeVariableName.get("TEx", Exception.class))
|
kode.addStatement("reader.beginObject()")
|
||||||
.addTypeVariable(TypeVariableName.get("Reader", ParameterizedTypeName.get(Cl.SERIALIZE_READER, TypeVariableName.get("TEx"), TypeVariableName.get("Reader"))))
|
.beginControlFlow("while (reader.hasNext())")
|
||||||
.addParameter(TypeVariableName.get("Reader"), "reader")
|
.addStatement("String name = reader.nextName()")
|
||||||
.addException(TypeVariableName.get("TEx"))
|
.beginControlFlow("if (reader.peek() == $T.NULL)", Cl.GSON_TOKEN)
|
||||||
.addException(Cl.MALFORMED_DATA_EXCEPTION)
|
.addStatement("reader.nextNull()")
|
||||||
.addCode(kode.build())
|
.add("map.put(");
|
||||||
.build()
|
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);
|
code.add("$N(reader)", methodName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue