From 2e6b90d4d5e1c5965e8416965a6ba969e93f028f Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 12 Feb 2021 15:41:28 -0500 Subject: [PATCH] Serializable -> JsonSerializable --- core/assets/sounds/pew_.ogg | Bin 5621 -> 0 bytes core/src/mindustry/game/Rules.java | 2 +- core/src/mindustry/game/SpawnGroup.java | 2 +- core/src/mindustry/type/ItemSeq.java | 2 +- .../mindustry/world/blocks/Attributes.java | 2 +- gradle.properties | 2 +- .../mindustry/tools/BindingsGenerator.java | 59 +++++++++++++++--- 7 files changed, 57 insertions(+), 12 deletions(-) delete mode 100644 core/assets/sounds/pew_.ogg diff --git a/core/assets/sounds/pew_.ogg b/core/assets/sounds/pew_.ogg deleted file mode 100644 index 0c1df7f711cbf6e2481a5e5af301f188cba9f2ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5621 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, Serializable{ +public class ItemSeq implements Iterable, JsonSerializable{ protected final int[] values = new int[Vars.content.items().size]; public int total; diff --git a/core/src/mindustry/world/blocks/Attributes.java b/core/src/mindustry/world/blocks/Attributes.java index ff96a2bb63..38a39bd2e3 100644 --- a/core/src/mindustry/world/blocks/Attributes.java +++ b/core/src/mindustry/world/blocks/Attributes.java @@ -6,7 +6,7 @@ import mindustry.world.meta.*; import java.util.*; -public class Attributes implements Serializable{ +public class Attributes implements JsonSerializable{ private final float[] arr = new float[Attribute.all.length]; public void clear(){ diff --git a/gradle.properties b/gradle.properties index 75d98185c9..86948088f6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=eac865a8a0f4fde121fdcd8850d9f039f725b546 +archash=e00afb8e4fb58902255b782b074e2836c027df9a diff --git a/tools/src/mindustry/tools/BindingsGenerator.java b/tools/src/mindustry/tools/BindingsGenerator.java index 8363e4a857..b0fe2b358a 100644 --- a/tools/src/mindustry/tools/BindingsGenerator.java +++ b/tools/src/mindustry/tools/BindingsGenerator.java @@ -10,6 +10,8 @@ import static mindustry.tools.ScriptMainGenerator.*; //experimental public class BindingsGenerator{ + //list of touchy class names that lead to conflicts; all typedefs and procs containing these are ignored + static Seq ignored = Seq.with(".Entry", ".MapIterator"); public static void main(String[] args) throws Exception{ @@ -18,19 +20,28 @@ public class BindingsGenerator{ getClasses("mindustry"), getClasses("arc") ); - classes.sort(Structs.comparing(Class::getName)); classes.removeAll(type -> type.isSynthetic() || type.isAnonymousClass() || type.getCanonicalName() == null || Modifier.isPrivate(type.getModifiers()) || blacklist.contains(s -> type.getName().startsWith(s))); + classes.add(Enum.class); + classes.distinct(); - classes.sortComparing(Class::getName); + + classes = sorted(classes); + classes.removeAll(BindingsGenerator::ignore); StringBuilder result = new StringBuilder(); result.append("import jnim, jnim/java/lang\n\n{.experimental: \"codeReordering\".}\n\n"); for(Class type : classes){ - String name = type.getCanonicalName(); + result.append("jclassDef ").append(type.getCanonicalName()).append(" of `") + .append(repr(type.getSuperclass())).append("`\n"); + } + + result.append("\n"); + + for(Class type : classes){ Seq exec = new Seq<>(); @@ -38,14 +49,15 @@ public class BindingsGenerator{ exec.addAll(type.getDeclaredConstructors()); exec.removeAll(e -> !Modifier.isPublic(e.getModifiers())); + exec.removeAll(e -> Structs.contains(e.getParameterTypes(), BindingsGenerator::ignore)); Seq fields = Seq.select(type.getDeclaredFields(), f -> Modifier.isPublic(f.getModifiers())); - result.append("jclass ").append(name).append(" of `") - .append(type.getSuperclass() == null ? "JVMObject" : type.getSuperclass().getSimpleName()).append("`").append(exec.size + fields.size > 0 ? ":" : "").append("\n"); + result.append("jclassImpl ").append(type.getCanonicalName()).append(" of `") + .append(repr(type.getSuperclass())).append("`").append(exec.size + fields.size > 0 ? ":" : "").append("\n"); for(Field field : fields){ - result.append(" proc `").append(field.getName()).append("`*"); + result.append(" proc `").append(field.getName()).append("`"); result.append(": ").append(str(field.getType())); result.append(" {.prop"); if(Modifier.isStatic(field.getModifiers())) result.append(", `static`"); @@ -54,7 +66,7 @@ public class BindingsGenerator{ } for(Executable method : exec){ - String mname = method.getName().equals("") || method.getName().equals(type.getCanonicalName()) ? "new" : method.getName(); + String mname = method.getName().equals("") || method.getName().equals(type.getName()) ? "new" : method.getName(); result.append(" proc `").append(mname).append("`"); if(method.getParameterCount() > 0){ @@ -94,6 +106,39 @@ public class BindingsGenerator{ Log.info(result); } + static boolean ignore(Class type){ + if(type == null) return false; + return ignored.contains(s -> type.getCanonicalName().contains(s)) || ignore(type.getSuperclass()); + } + + static Seq> sorted(Seq> classes){ + ObjectSet> visited = new ObjectSet<>(); + Seq> result = new Seq<>(); + for(Class c : classes){ + if(!visited.contains(c)){ + topoSort(c, result, visited); + } + } + return result; + } + + static void topoSort(Class c, Seq> stack, ObjectSet> visited){ + visited.add(c); + for(Class sup : c.getInterfaces()){ + if(!visited.contains(sup)){ + topoSort(sup, stack, visited); + } + } + if(c.getSuperclass() != null && !c.getSuperclass().equals(Object.class) && !visited.contains(c.getSuperclass())){ + topoSort(c.getSuperclass(), stack, visited); + } + stack.add(c); + } + + static String repr(Class type){ + return type == null ? "JVMObject" : type.getSimpleName(); + } + static String str(Class type){ if(type.isArray()){ return "seq[" + str(type.getComponentType()) + "]";