TypeIO resolution
This commit is contained in:
@@ -3,15 +3,18 @@ package mindustry.annotations.entity;
|
|||||||
import com.squareup.javapoet.*;
|
import com.squareup.javapoet.*;
|
||||||
import com.squareup.javapoet.MethodSpec.*;
|
import com.squareup.javapoet.MethodSpec.*;
|
||||||
import mindustry.annotations.*;
|
import mindustry.annotations.*;
|
||||||
|
import mindustry.annotations.util.TypeIOResolver.*;
|
||||||
|
|
||||||
import static mindustry.annotations.BaseProcessor.instanceOf;
|
import static mindustry.annotations.BaseProcessor.instanceOf;
|
||||||
|
|
||||||
public class EntityIO{
|
public class EntityIO{
|
||||||
final MethodSpec.Builder builder;
|
final MethodSpec.Builder builder;
|
||||||
final boolean write;
|
final boolean write;
|
||||||
|
final ClassSerializer serializer;
|
||||||
|
|
||||||
EntityIO(Builder builder, boolean write){
|
EntityIO(Builder builder, boolean write, ClassSerializer serializer){
|
||||||
this.builder = builder;
|
this.builder = builder;
|
||||||
|
this.serializer = serializer;
|
||||||
this.write = write;
|
this.write = write;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -19,14 +22,18 @@ public class EntityIO{
|
|||||||
|
|
||||||
if(type.isPrimitive()){
|
if(type.isPrimitive()){
|
||||||
s(type == TypeName.BOOLEAN ? "bool" : type.toString().charAt(0) + "", field);
|
s(type == TypeName.BOOLEAN ? "bool" : type.toString().charAt(0) + "", field);
|
||||||
}else if(type.toString().equals("java.lang.String")){
|
//}else if(type.toString().equals("java.lang.String")){
|
||||||
s("str", field);
|
// s("str", field);
|
||||||
}else if(instanceOf(type.toString(), "mindustry.ctype.Content")){
|
}else if(instanceOf(type.toString(), "mindustry.ctype.Content")){
|
||||||
if(write){
|
if(write){
|
||||||
s("s", field + ".id");
|
s("s", field + ".id");
|
||||||
}else{
|
}else{
|
||||||
st(field + " = mindustry.Vars.content.getByID(mindustry.ctype.ContentType.$L, read.s())", BaseProcessor.simpleName(type.toString()).toLowerCase().replace("type", ""));
|
st(field + " = mindustry.Vars.content.getByID(mindustry.ctype.ContentType.$L, read.s())", BaseProcessor.simpleName(type.toString()).toLowerCase().replace("type", ""));
|
||||||
}
|
}
|
||||||
|
}else if(serializer.writers.containsKey(type.toString()) && write){
|
||||||
|
st("$L(write, $L)", serializer.writers.get(type.toString()), field);
|
||||||
|
}else if(serializer.readers.containsKey(type.toString()) && !write){
|
||||||
|
st("$L = $L(read)", field, serializer.readers.get(type.toString()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import com.squareup.javapoet.TypeSpec.*;
|
|||||||
import com.sun.source.tree.*;
|
import com.sun.source.tree.*;
|
||||||
import mindustry.annotations.Annotations.*;
|
import mindustry.annotations.Annotations.*;
|
||||||
import mindustry.annotations.*;
|
import mindustry.annotations.*;
|
||||||
|
import mindustry.annotations.util.TypeIOResolver.*;
|
||||||
import mindustry.annotations.util.*;
|
import mindustry.annotations.util.*;
|
||||||
|
|
||||||
import javax.annotation.processing.*;
|
import javax.annotation.processing.*;
|
||||||
@@ -23,7 +24,8 @@ import java.lang.annotation.*;
|
|||||||
"mindustry.annotations.Annotations.EntityDef",
|
"mindustry.annotations.Annotations.EntityDef",
|
||||||
"mindustry.annotations.Annotations.GroupDef",
|
"mindustry.annotations.Annotations.GroupDef",
|
||||||
"mindustry.annotations.Annotations.EntityInterface",
|
"mindustry.annotations.Annotations.EntityInterface",
|
||||||
"mindustry.annotations.Annotations.BaseComponent"
|
"mindustry.annotations.Annotations.BaseComponent",
|
||||||
|
"mindustry.annotations.Annotations.TypeIOHandler"
|
||||||
})
|
})
|
||||||
public class EntityProcess extends BaseProcessor{
|
public class EntityProcess extends BaseProcessor{
|
||||||
Array<EntityDefinition> definitions = new Array<>();
|
Array<EntityDefinition> definitions = new Array<>();
|
||||||
@@ -38,6 +40,7 @@ public class EntityProcess extends BaseProcessor{
|
|||||||
Array<Selement> allGroups = new Array<>();
|
Array<Selement> allGroups = new Array<>();
|
||||||
Array<Selement> allDefs = new Array<>();
|
Array<Selement> allDefs = new Array<>();
|
||||||
Array<Stype> allInterfaces = new Array<>();
|
Array<Stype> allInterfaces = new Array<>();
|
||||||
|
ClassSerializer serializer;
|
||||||
|
|
||||||
{
|
{
|
||||||
rounds = 3;
|
rounds = 3;
|
||||||
@@ -51,6 +54,7 @@ public class EntityProcess extends BaseProcessor{
|
|||||||
|
|
||||||
//round 1: generate component interfaces
|
//round 1: generate component interfaces
|
||||||
if(round == 1){
|
if(round == 1){
|
||||||
|
serializer = TypeIOResolver.resolve(this);
|
||||||
baseComponents = types(BaseComponent.class);
|
baseComponents = types(BaseComponent.class);
|
||||||
Array<Stype> allComponents = types(Component.class);
|
Array<Stype> allComponents = types(Component.class);
|
||||||
|
|
||||||
@@ -330,7 +334,7 @@ public class EntityProcess extends BaseProcessor{
|
|||||||
if((first.name().equals("read") || first.name().equals("write")) && ann.genio()){
|
if((first.name().equals("read") || first.name().equals("write")) && ann.genio()){
|
||||||
Array<FieldSpec> fields = Array.with(builder.fieldSpecs).select(spec -> !spec.hasModifier(Modifier.TRANSIENT) && !spec.hasModifier(Modifier.STATIC) && !spec.hasModifier(Modifier.FINAL));
|
Array<FieldSpec> fields = Array.with(builder.fieldSpecs).select(spec -> !spec.hasModifier(Modifier.TRANSIENT) && !spec.hasModifier(Modifier.STATIC) && !spec.hasModifier(Modifier.FINAL));
|
||||||
fields.sortComparing(f -> f.name); //sort to keep order
|
fields.sortComparing(f -> f.name); //sort to keep order
|
||||||
EntityIO writer = new EntityIO(mbuilder, first.name().equals("write"));
|
EntityIO writer = new EntityIO(mbuilder, first.name().equals("write"), serializer);
|
||||||
//subclasses *have* to call this method
|
//subclasses *have* to call this method
|
||||||
mbuilder.addAnnotation(CallSuper.class);
|
mbuilder.addAnnotation(CallSuper.class);
|
||||||
//write or read each non-transient field
|
//write or read each non-transient field
|
||||||
|
|||||||
@@ -3,7 +3,8 @@ package mindustry.annotations.remote;
|
|||||||
import com.squareup.javapoet.*;
|
import com.squareup.javapoet.*;
|
||||||
import mindustry.annotations.*;
|
import mindustry.annotations.*;
|
||||||
import mindustry.annotations.Annotations.*;
|
import mindustry.annotations.Annotations.*;
|
||||||
import mindustry.annotations.remote.TypeIOResolver.*;
|
import mindustry.annotations.util.*;
|
||||||
|
import mindustry.annotations.util.TypeIOResolver.*;
|
||||||
|
|
||||||
import javax.annotation.processing.*;
|
import javax.annotation.processing.*;
|
||||||
import javax.lang.model.element.*;
|
import javax.lang.model.element.*;
|
||||||
@@ -14,8 +15,7 @@ import java.util.stream.*;
|
|||||||
/** The annotation processor for generating remote method call code. */
|
/** The annotation processor for generating remote method call code. */
|
||||||
@SupportedAnnotationTypes({
|
@SupportedAnnotationTypes({
|
||||||
"mindustry.annotations.Annotations.Remote",
|
"mindustry.annotations.Annotations.Remote",
|
||||||
"mindustry.annotations.Annotations.WriteClass",
|
"mindustry.annotations.Annotations.TypeIOHandler"
|
||||||
"mindustry.annotations.Annotations.ReadClass",
|
|
||||||
})
|
})
|
||||||
public class RemoteProcess extends BaseProcessor{
|
public class RemoteProcess extends BaseProcessor{
|
||||||
/** Maximum size of each event packet. */
|
/** Maximum size of each event packet. */
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package mindustry.annotations.remote;
|
|||||||
import arc.util.io.*;
|
import arc.util.io.*;
|
||||||
import com.squareup.javapoet.*;
|
import com.squareup.javapoet.*;
|
||||||
import mindustry.annotations.*;
|
import mindustry.annotations.*;
|
||||||
import mindustry.annotations.remote.TypeIOResolver.*;
|
import mindustry.annotations.util.TypeIOResolver.*;
|
||||||
|
|
||||||
import javax.lang.model.element.Modifier;
|
import javax.lang.model.element.Modifier;
|
||||||
import javax.lang.model.element.*;
|
import javax.lang.model.element.*;
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import arc.util.io.*;
|
|||||||
import com.squareup.javapoet.*;
|
import com.squareup.javapoet.*;
|
||||||
import mindustry.annotations.Annotations.*;
|
import mindustry.annotations.Annotations.*;
|
||||||
import mindustry.annotations.*;
|
import mindustry.annotations.*;
|
||||||
import mindustry.annotations.remote.TypeIOResolver.*;
|
import mindustry.annotations.util.TypeIOResolver.*;
|
||||||
|
|
||||||
import javax.lang.model.element.*;
|
import javax.lang.model.element.*;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
package mindustry.annotations.remote;
|
package mindustry.annotations.util;
|
||||||
|
|
||||||
import arc.struct.*;
|
import arc.struct.*;
|
||||||
import mindustry.annotations.Annotations.*;
|
import mindustry.annotations.Annotations.*;
|
||||||
import mindustry.annotations.*;
|
import mindustry.annotations.*;
|
||||||
import mindustry.annotations.util.*;
|
|
||||||
|
|
||||||
import javax.lang.model.element.*;
|
import javax.lang.model.element.*;
|
||||||
|
|
||||||
@@ -114,7 +114,7 @@ public class TypeIO{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void writeTeam(Writes write, Team reason){
|
public static void writeTeam(Writes write, Team reason){
|
||||||
write.b((byte) (int)reason.id);
|
write.b(reason.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Team readTeam(Reads read){
|
public static Team readTeam(Reads read){
|
||||||
|
|||||||
Reference in New Issue
Block a user