feat(serialize-generator): support getters and setters in StaticProcessor
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
parent
2b4b778a4a
commit
d129e6950d
@ -9,7 +9,9 @@ import io.gitlab.jfronny.commons.serialize.generator.core.value.*;
|
|||||||
|
|
||||||
import javax.annotation.processing.Messager;
|
import javax.annotation.processing.Messager;
|
||||||
import javax.lang.model.element.Modifier;
|
import javax.lang.model.element.Modifier;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class StaticProcessor extends GProcessor {
|
public class StaticProcessor extends GProcessor {
|
||||||
@ -95,11 +97,23 @@ public class StaticProcessor extends GProcessor {
|
|||||||
.addStatement("return")
|
.addStatement("return")
|
||||||
.endControlFlow();
|
.endControlFlow();
|
||||||
|
|
||||||
|
Map<Property<?>, Property<?>> altMap = new HashMap<>();
|
||||||
|
|
||||||
boolean isEmpty = true;
|
boolean isEmpty = true;
|
||||||
for (Property<?> param : properties.names) {
|
for (Property<?> param : properties.names) {
|
||||||
if (isIgnored(param) && getAlternative(properties, param) == null) continue;
|
if (isIgnored(param)) {
|
||||||
|
Property<?> alt = getAlternative(properties, param);
|
||||||
|
altMap.put(param, alt);
|
||||||
|
if (alt == null) continue;
|
||||||
|
param = alt;
|
||||||
|
}
|
||||||
isEmpty = false;
|
isEmpty = false;
|
||||||
|
if (param instanceof Property.Field) {
|
||||||
code.addStatement("$T.$N = $L", self.getTypeName(), param.getName(), TypeHelper.getDefaultValue(param.getType()));
|
code.addStatement("$T.$N = $L", self.getTypeName(), param.getName(), TypeHelper.getDefaultValue(param.getType()));
|
||||||
|
} else {
|
||||||
|
code.addStatement("$T _$N = $L", param.getType(), param.getName(), TypeHelper.getDefaultValue(param.getType()));
|
||||||
|
code.addStatement("boolean has_$N = false", param.getName());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (isEmpty) {
|
if (isEmpty) {
|
||||||
code.addStatement("reader.skipValue()");
|
code.addStatement("reader.skipValue()");
|
||||||
@ -108,21 +122,31 @@ public class StaticProcessor extends GProcessor {
|
|||||||
.beginControlFlow("while (reader.hasNext())")
|
.beginControlFlow("while (reader.hasNext())")
|
||||||
.beginControlFlow("switch (reader.nextName())");
|
.beginControlFlow("switch (reader.nextName())");
|
||||||
for (Property<?> param : properties.names) {
|
for (Property<?> param : properties.names) {
|
||||||
if (isIgnored(param) && getAlternative(properties, param) == null) continue;
|
if (altMap.containsKey(param)) {
|
||||||
|
param = altMap.get(param);
|
||||||
|
if (param == null) continue;
|
||||||
|
}
|
||||||
|
code.beginControlFlow("case $S ->", getSerializedName(param));
|
||||||
if (param.getType().getKind().isPrimitive()) {
|
if (param.getType().getKind().isPrimitive()) {
|
||||||
code.add("case $S -> $T.$N = ", getSerializedName(param), self.getTypeName(), param.getName());
|
if (param instanceof Property.Field) code.add("$T.$N = ", self.getTypeName(), param.getName());
|
||||||
|
else code.add("_$N = ", param.getName());
|
||||||
Adapters.generateRead(param, spec, code, typeVariables, otherAdapters, message);
|
Adapters.generateRead(param, spec, code, typeVariables, otherAdapters, message);
|
||||||
code.add(";\n");
|
code.add(";\n");
|
||||||
} else {
|
} else {
|
||||||
code.beginControlFlow("case $S ->", getSerializedName(param))
|
code.beginControlFlow("if (reader.peek() == $T.NULL)", Cl.GSON_TOKEN)
|
||||||
.beginControlFlow("if (reader.peek() == $T.NULL)", Cl.GSON_TOKEN)
|
.addStatement("reader.nextNull()");
|
||||||
.addStatement("reader.nextNull()")
|
if (param instanceof Property.Field) {
|
||||||
.addStatement("$T.$N = null", self.getTypeName(), param.getName());
|
code.addStatement("$T.$N = null", self.getTypeName(), param.getName());
|
||||||
code.unindent().add("} else $T.$N = ", self.getTypeName(), param.getName());
|
code.unindent().add("} else $T.$N = ", self.getTypeName(), param.getName());
|
||||||
Adapters.generateRead(param, spec, code, typeVariables, otherAdapters, message);
|
} else {
|
||||||
code.add(";\n")
|
code.addStatement("_$N = null", param.getName());
|
||||||
.endControlFlow();
|
code.unindent().add("} else _$N = ", param.getName());
|
||||||
}
|
}
|
||||||
|
Adapters.generateRead(param, spec, code, typeVariables, otherAdapters, message);
|
||||||
|
code.add(";\n");
|
||||||
|
}
|
||||||
|
if (!(param instanceof Property.Field)) code.addStatement("has_$N = true", param.getName());
|
||||||
|
code.endControlFlow();
|
||||||
}
|
}
|
||||||
code.add("default -> ")
|
code.add("default -> ")
|
||||||
.addStatement("reader.skipValue()");
|
.addStatement("reader.skipValue()");
|
||||||
@ -130,6 +154,11 @@ public class StaticProcessor extends GProcessor {
|
|||||||
code.endControlFlow()
|
code.endControlFlow()
|
||||||
.endControlFlow()
|
.endControlFlow()
|
||||||
.addStatement("reader.endObject()");
|
.addStatement("reader.endObject()");
|
||||||
|
|
||||||
|
for (Property.Setter setter : properties.setters) {
|
||||||
|
if (isIgnored(setter)) continue;
|
||||||
|
code.addStatement("if (has_$N) $T.$N(_$N)", setter.getName(), self.getTypeName(), setter.getCallableName(), setter.getName());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
spec.addMethod(extension(MethodSpec.methodBuilder("deserialize"))
|
spec.addMethod(extension(MethodSpec.methodBuilder("deserialize"))
|
||||||
|
@ -6,4 +6,12 @@ import io.gitlab.jfronny.commons.serialize.generator.annotations.GSerializable;
|
|||||||
public class Static {
|
public class Static {
|
||||||
public boolean nonStatic;
|
public boolean nonStatic;
|
||||||
public static boolean joe;
|
public static boolean joe;
|
||||||
|
|
||||||
|
public static void setNine(boolean nine) {
|
||||||
|
joe = !nine;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getSerde() {
|
||||||
|
return "serde? " + joe;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user