mirror of
https://github.com/Anuken/Mindustry.git
synced 2025-03-09 20:29:06 +07:00
JSON read/write generation
This commit is contained in:
parent
75946b9d14
commit
6de4af727b
@ -50,8 +50,21 @@ public class SerializeAnnotationProcessor extends AbstractProcessor{
|
|||||||
classBuilder.addJavadoc(RemoteMethodAnnotationProcessor.autogenWarning);
|
classBuilder.addJavadoc(RemoteMethodAnnotationProcessor.autogenWarning);
|
||||||
MethodSpec.Builder method = MethodSpec.methodBuilder("init").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
|
MethodSpec.Builder method = MethodSpec.methodBuilder("init").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
|
||||||
|
|
||||||
|
TypeName jsonType = ClassName.bestGuess("io.anuke.arc.util.serialization.Json");
|
||||||
|
TypeName jsonValueType = ClassName.bestGuess("io.anuke.arc.util.serialization.JsonValue");
|
||||||
|
TypeName ubJsonWriterType = ClassName.bestGuess("io.anuke.arc.util.serialization.UBJsonWriter");
|
||||||
|
TypeName ubJsonReaderType = ClassName.bestGuess("io.anuke.arc.util.serialization.UBJsonReader");
|
||||||
|
|
||||||
|
classBuilder.addField(jsonType, "bjson", Modifier.STATIC, Modifier.PRIVATE);
|
||||||
|
classBuilder.addField(ubJsonReaderType, "bjsonReader", Modifier.STATIC, Modifier.PRIVATE);
|
||||||
|
classBuilder.addStaticBlock(CodeBlock.builder()
|
||||||
|
.addStatement("bjson = new " + jsonType + "()")
|
||||||
|
.addStatement("bjsonReader = new " + ubJsonReaderType + "()")
|
||||||
|
.build());
|
||||||
|
|
||||||
for(TypeElement elem : elements){
|
for(TypeElement elem : elements){
|
||||||
TypeName type = TypeName.get(elem.asType());
|
TypeName type = TypeName.get(elem.asType());
|
||||||
|
String simpleTypeName = type.toString().substring(type.toString().lastIndexOf('.') + 1);
|
||||||
|
|
||||||
TypeSpec.Builder serializer = TypeSpec.anonymousClassBuilder("")
|
TypeSpec.Builder serializer = TypeSpec.anonymousClassBuilder("")
|
||||||
.addSuperinterface(ParameterizedTypeName.get(
|
.addSuperinterface(ParameterizedTypeName.get(
|
||||||
@ -70,7 +83,19 @@ public class SerializeAnnotationProcessor extends AbstractProcessor{
|
|||||||
.addException(IOException.class)
|
.addException(IOException.class)
|
||||||
.addModifiers(Modifier.PUBLIC);
|
.addModifiers(Modifier.PUBLIC);
|
||||||
|
|
||||||
|
MethodSpec.Builder jsonWriteMethod = MethodSpec.methodBuilder("write" + simpleTypeName + "Json")
|
||||||
|
.returns(void.class)
|
||||||
|
.addParameter(jsonType, "json")
|
||||||
|
.addParameter(type, "object")
|
||||||
|
.addModifiers(Modifier.PUBLIC, Modifier.STATIC);
|
||||||
|
|
||||||
|
MethodSpec.Builder jsonReadMethod = MethodSpec.methodBuilder("read" + simpleTypeName + "Json")
|
||||||
|
.returns(type)
|
||||||
|
.addParameter(jsonValueType, "value")
|
||||||
|
.addModifiers(Modifier.PUBLIC, Modifier.STATIC);
|
||||||
|
|
||||||
readMethod.addStatement("$L object = new $L()", type, type);
|
readMethod.addStatement("$L object = new $L()", type, type);
|
||||||
|
jsonReadMethod.addStatement("$L object = new $L()", type, type);
|
||||||
|
|
||||||
List<VariableElement> fields = ElementFilter.fieldsIn(Utils.elementUtils.getAllMembers(elem));
|
List<VariableElement> fields = ElementFilter.fieldsIn(Utils.elementUtils.getAllMembers(elem));
|
||||||
for(VariableElement field : fields){
|
for(VariableElement field : fields){
|
||||||
@ -83,6 +108,9 @@ public class SerializeAnnotationProcessor extends AbstractProcessor{
|
|||||||
if(field.asType().getKind().isPrimitive()){
|
if(field.asType().getKind().isPrimitive()){
|
||||||
writeMethod.addStatement("stream.write" + capName + "(object." + name + ")");
|
writeMethod.addStatement("stream.write" + capName + "(object." + name + ")");
|
||||||
readMethod.addStatement("object." + name + "= stream.read" + capName + "()");
|
readMethod.addStatement("object." + name + "= stream.read" + capName + "()");
|
||||||
|
|
||||||
|
jsonWriteMethod.addStatement("json.writeValue(\"" + name + "\", object." + name +")");
|
||||||
|
jsonReadMethod.addStatement("if(value.has(\"" + name + "\")) object." + name + "= value.get" + capName + "(\"" + name + "\")");
|
||||||
}else{
|
}else{
|
||||||
writeMethod.addStatement("io.anuke.arc.Core.settings.getSerializer(" + typeName+ ".class).write(stream, object." + name + ")");
|
writeMethod.addStatement("io.anuke.arc.Core.settings.getSerializer(" + typeName+ ".class).write(stream, object." + name + ")");
|
||||||
readMethod.addStatement("object." + name + " = (" +typeName+")io.anuke.arc.Core.settings.getSerializer(" + typeName+ ".class).read(stream)");
|
readMethod.addStatement("object." + name + " = (" +typeName+")io.anuke.arc.Core.settings.getSerializer(" + typeName+ ".class).read(stream)");
|
||||||
@ -90,22 +118,47 @@ public class SerializeAnnotationProcessor extends AbstractProcessor{
|
|||||||
}
|
}
|
||||||
|
|
||||||
readMethod.addStatement("return object");
|
readMethod.addStatement("return object");
|
||||||
|
jsonReadMethod.addStatement("return object");
|
||||||
|
|
||||||
serializer.addMethod(writeMethod.build());
|
serializer.addMethod(writeMethod.build());
|
||||||
serializer.addMethod(readMethod.build());
|
serializer.addMethod(readMethod.build());
|
||||||
|
|
||||||
method.addStatement("io.anuke.arc.Core.settings.setSerializer($N, $L)", Utils.elementUtils.getBinaryName(elem).toString().replace('$', '.') + ".class", serializer.build());
|
method.addStatement("io.anuke.arc.Core.settings.setSerializer($N, $L)", Utils.elementUtils.getBinaryName(elem).toString().replace('$', '.') + ".class", serializer.build());
|
||||||
|
|
||||||
String sname = type.toString().substring(type.toString().lastIndexOf('.') + 1);
|
name(writeMethod, "write" + simpleTypeName);
|
||||||
|
name(readMethod, "read" + simpleTypeName);
|
||||||
name(writeMethod, "write" + sname);
|
|
||||||
name(readMethod, "read" + sname);
|
|
||||||
|
|
||||||
writeMethod.addModifiers(Modifier.STATIC);
|
writeMethod.addModifiers(Modifier.STATIC);
|
||||||
readMethod.addModifiers(Modifier.STATIC);
|
readMethod.addModifiers(Modifier.STATIC);
|
||||||
|
|
||||||
classBuilder.addMethod(writeMethod.build());
|
classBuilder.addMethod(writeMethod.build());
|
||||||
classBuilder.addMethod(readMethod.build());
|
classBuilder.addMethod(readMethod.build());
|
||||||
|
|
||||||
|
classBuilder.addMethod(jsonWriteMethod.build());
|
||||||
|
classBuilder.addMethod(jsonReadMethod.build());
|
||||||
|
|
||||||
|
MethodSpec.Builder binaryJsonWriteMethod = MethodSpec.methodBuilder("write" + simpleTypeName + "StreamJson")
|
||||||
|
.returns(void.class)
|
||||||
|
.addParameter(DataOutput.class, "stream")
|
||||||
|
.addParameter(type, "object")
|
||||||
|
.addException(IOException.class)
|
||||||
|
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
|
||||||
|
.addStatement("java.io.StringWriter output = new java.io.StringWriter()")
|
||||||
|
.addStatement("bjson.setWriter(output)")
|
||||||
|
.addStatement("bjson.writeObjectStart(" + type + ".class, " + type + ".class)")
|
||||||
|
.addStatement("write" + simpleTypeName + "Json(bjson, object)")
|
||||||
|
.addStatement("bjson.writeObjectEnd()")
|
||||||
|
.addStatement("stream.writeUTF(output.toString())");
|
||||||
|
|
||||||
|
MethodSpec.Builder binaryJsonReadMethod = MethodSpec.methodBuilder("read" + simpleTypeName + "StreamJson")
|
||||||
|
.returns(type)
|
||||||
|
.addParameter(DataInput.class, "stream")
|
||||||
|
.addException(IOException.class)
|
||||||
|
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
|
||||||
|
.addStatement("return read" + simpleTypeName + "Json(bjson.fromJson(null, stream.readUTF()))");
|
||||||
|
|
||||||
|
classBuilder.addMethod(binaryJsonWriteMethod.build());
|
||||||
|
classBuilder.addMethod(binaryJsonReadMethod.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
classBuilder.addMethod(method.build());
|
classBuilder.addMethod(method.build());
|
||||||
|
@ -730,7 +730,7 @@ public class Bullets implements ContentList{
|
|||||||
lifetime = 23f;
|
lifetime = 23f;
|
||||||
speed = 1f;
|
speed = 1f;
|
||||||
splashDamageRadius = 50f;
|
splashDamageRadius = 50f;
|
||||||
splashDamage = 20f;
|
splashDamage = 28f;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -75,7 +75,7 @@ public class SpawnGroup implements Serializable{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void write (Json json) {
|
public void write(Json json){
|
||||||
json.writeValue("type", type.name);
|
json.writeValue("type", type.name);
|
||||||
if(begin != 0) json.writeValue("begin", begin);
|
if(begin != 0) json.writeValue("begin", begin);
|
||||||
if(end != never) json.writeValue("end", end);
|
if(end != never) json.writeValue("end", end);
|
||||||
@ -87,7 +87,7 @@ public class SpawnGroup implements Serializable{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void read (Json json, JsonValue data) {
|
public void read(Json json, JsonValue data){
|
||||||
type = content.getByName(ContentType.unit, data.getString("type", "dagger"));
|
type = content.getByName(ContentType.unit, data.getString("type", "dagger"));
|
||||||
begin = data.getInt("begin", 0);
|
begin = data.getInt("begin", 0);
|
||||||
end = data.getInt("end", never);
|
end = data.getInt("end", never);
|
||||||
|
@ -36,7 +36,7 @@ public abstract class SaveFileVersion{
|
|||||||
long playtime = stream.readLong();
|
long playtime = stream.readLong();
|
||||||
int build = stream.readInt();
|
int build = stream.readInt();
|
||||||
|
|
||||||
Rules rules = Serialization.readRules(stream);
|
Rules rules = Serialization.readRulesStreamJson(stream);
|
||||||
String map = stream.readUTF();
|
String map = stream.readUTF();
|
||||||
int wave = stream.readInt();
|
int wave = stream.readInt();
|
||||||
return new SaveMeta(version, time, playtime, build, map, wave, rules);
|
return new SaveMeta(version, time, playtime, build, map, wave, rules);
|
||||||
|
@ -26,7 +26,7 @@ public class Save16 extends SaveFileVersion{
|
|||||||
stream.readInt(); //build
|
stream.readInt(); //build
|
||||||
|
|
||||||
//general state
|
//general state
|
||||||
state.rules = Serialization.readRules(stream);
|
state.rules = Serialization.readRulesStreamJson(stream);
|
||||||
String mapname = stream.readUTF();
|
String mapname = stream.readUTF();
|
||||||
Map map = world.maps.all().find(m -> m.name().equals(mapname));
|
Map map = world.maps.all().find(m -> m.name().equals(mapname));
|
||||||
if(map == null) map = new Map(customMapDirectory.child(mapname), 1, 1, new ObjectMap<>(), true);
|
if(map == null) map = new Map(customMapDirectory.child(mapname), 1, 1, new ObjectMap<>(), true);
|
||||||
@ -56,7 +56,7 @@ public class Save16 extends SaveFileVersion{
|
|||||||
stream.writeInt(Version.build); //build
|
stream.writeInt(Version.build); //build
|
||||||
|
|
||||||
//--GENERAL STATE--
|
//--GENERAL STATE--
|
||||||
Serialization.writeRules(stream, state.rules);
|
Serialization.writeRulesStreamJson(stream, state.rules);
|
||||||
stream.writeUTF(world.getMap().name()); //map name
|
stream.writeUTF(world.getMap().name()); //map name
|
||||||
|
|
||||||
stream.writeInt(state.wave); //wave
|
stream.writeInt(state.wave); //wave
|
||||||
|
Loading…
Reference in New Issue
Block a user