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 zcmeZIPY-5bVt|4vrh8;SOzF0{F^qDIW%)%(nZ+OhMwc}pih-fQf)UKv!3fp~W`hWj zPLPb)8RHth^8ZMnkr`qPF9QREPhwe`shOUMfu5m(Au9s|0~Z4WgJV#LXK;w^``!CF z85kHsJVSh3VH`&vr%+!Ihnsok!#>n8nz@Snrq2;!;Sgb`r$|*qdv5eEX>^G85K7vg$Mn2J} zRf{JmE?MBz5v|d9VL~VaNJG10g-A=6BZp#(s%^xiW_4Q*#g-1s3XzsfkeGlIhhhtu zaJ9^s)U58vA=~oUz=Egwsl^YO7FWv%fo65b7YZ%>PCI5bud(D%Y*8`w2xw-rd?C|v zNJpcq>4?D&u@)9njh?0_1}CmGb31j+YW6h!A=Q%ZSRn?nL&ec!LNlA=35gar$B0SI zY?eDjT24EzkZRGgFVB#EX<37dZd`Rf^ZMnCRQ1rA^Nw9VY z1_psknQ1H8It-X4*}(C@!NAZU*ky2}0T##&5?*|ZIM-UA_Mt(MQ{u&&MQo8`UH^7$N(os~hey+LBdAfv#EKY2aDH8%g zCMR`hE}v7xrL_VQoC=_*VPNq8By&+v7J)v>oEKCL6jBWo(!FeCdO6rNv^4elw9?4! zwb3_PW53tl{a$cjwA4rx1o1i(1A{_~fD_2NAP>!B62)gMU#LtGfO(UHfq|hw z#2uX8JU6L$Us5@HNyq=QiNCOIpor^blhBKzv4Q5ffo7?fO=E-2Vnf4n!>8p&Z!5h$ zJ@xkY+WSZ-mL2RxAqEDkNy?g&lr$$jw&+vwbjUcN#o)jO%8^}i-$nX_KboTs%4tb{=Tqy$tJbuFvtT3OMxqN49b$E1vz(^jmUrG0AIn_cT(6GGhJ z1g^rsP@>{qq~ac=;u@slUIY%^1|Cr8${aRSaV^q0eaQsk$BV+YmxEoyOCW^?Gy)hH zcusB*Iek&aS4j10kZx$O?$sdItHGg!fbV4!Uttd3NKR0Oy%1G=X6^Jo#}{j+pU_yc z;JTmXvnAKhXf(}vE?}5E<9LvvGtaSUjxAGIot(p17y=m>8VpYu9+4?J=lM#-^_-=a z?9yYF?kg8x3G~{yEXvwz>9&yU$8#262|T5-G|GFm?9!0zRT~)?8W`9a8W^}2UYH=t z=pe$t(8v?SrP(?q>73^C2|=eUpUEV3SuUTGe9ls1?vzuO>T@RxX)c|Ud`|QEoGIr# zpUs(k$y0-YLE!)+gTetP4U-gC1_5=32L&>|lTCa@RDFeA{Y7H03%g#OYI4@ZG%zI8 zSH$;fNNA*(Z|F2tUt?cikW;Ay_0TT{=Q5*s_cG&UkF`g`l;($d(esrSQEBfqD{9=}$4|GUrSZNAs9mR=4m zy??Fr>CD{QKU_nvmWEDijh~u&|9b1g%DlVc^8!Ol?@o!04^NF0&x<#|wJ*nv(pb7R zz^i-ZQmN={Q@0++6LTg{vQ%F>1uSvKQfqGW6e|wRrBkAGG>=ADs;f5ld9f=lo#f@C zx>UkhYva@@NjjQGZ$#znJUXLTW9iXJUOB2uBcgpQw@DQDfh<=CTfTH_P*C>N;vg#y z%~U=wEzP45US5X9ejuaxoV-+*N(6gtYz<1%*1Q_wm9_EcjAC!YYXL#ss!Jujy$rWW z6z6Sxdd)FIcZpE4hUzh~F_wGC8z+V zJCEMT&fWQSR`G?ETcd(~c7j~BlQpvV-QMO4Q5s8+26*+X-5M3$W7!V1yld;x8O7Nf zzXf>ps4k80_A=cjk=3*|lUw z1_ow61_nm8DUD9fVN9TW&!XsM$hOe2!|?eM6Ar^?bEb3|K37;0WcW;`CCKQx!jwrt zAXX69(j}9EvKLMX3d&l`z|g=1%J3S>@yvI#T^y;-Jn^0UiD zlhCW%WWgf7p<8oLLqtkT?}F8Ymd3_@cL_8Ny;_M(rSC&>s{}EANpv0oPps33p>LC zCh0JD3r#6*9k8ny85|^NJFxYvNABpSTHcKNI0rXhKeOF<`kD}0Hk5jMW%&E!@Q3&Ffa(PFmP~iG8i}n7%(&N@Cn$l zJE}VrY++>Ja7t#d`#C6W)C^xjzsI0-Zf9C^gR z<#FI3r@76?HuXCXSmrJYVh8nF7z!8|_!$_EvkC}alyPf2#^&CBoZZ6%)RC)7w`wGBQ|A`}2NH{4NGFh6V=%hz-H$P?t{e603dhn~YCy#MAwJ0ma#-^FB3ET%Ho<5+56%D_xJbr^FDhf_prdE zeg3KhCWZ^=CKNvVAhi4c)k~5L2W+(%_SL6;uD7WAqG89v@UKsL@*)O?Z+d$IWv{An zHrR^(f9Jt7c@e`Kr>BN<8YU(~=>#s+(2XdGh`kfhOMcuR8 z+hF{Fp?)vB@yG5vzk0uvvog&1Iw9ct?M@$)d7hp+8_wOnkhlHzTgJ2RWwXCn{I9pX zZt+k5e8r=c@Bi2TUSa06Nmxio&b^m$qs3+U@t5>IY zaqZglAyjwPRniWrf#U2m89@S{BgBh^u5W4IgWjt@Zp`#{+r)h!k65(S}8Ws zI#KX{D8sbFEnAnAY`wqY!9)LW#yGEQ@vD#BeLFWz5YZ3*gIuYCXi|A&WD z;`N^gWpAC!%yP7P+YM%Q^N>}m3;Ulvi+fX8ch&s&wCR&w!wbWm&2`>auVMfH;Ex0U z^Sf97E?@mAb%~Xoonn6ezOB>ZkE?ZBzmLiPb^X%GM;wzQr-vsL&DN`a^|s^bzMwgu zHon=nG^tr*om<;XqBkVx|ekKi-m6dDrSA{MTVUUxWCcnG3qObN{d-$bq|6-oX z^E}_e#IWGCEc1f&lNy{|2d(@W4n$W?*RN}TWT<6sn(noE(&`6KPHmq1&XB?2^|yrm zA*)RaN*4TaK6NeU-^o>M>pvfTx@}tT^Rlg0ALh8#7Ei9pUGx3H*Fx3R%cq-a3$`k7 zT@`=X@?A1hVQuvCEg$Cl1axlVQQGP)Jo(?8Dr=#(?9@X=jehI7Km5JtcIN2TwCg!G zyKMQbo?f0-=QT^4XT^3c?JH{Gyus59Hi)vCy^-Gjed)@AJ^ydpX9{Q@ozSzoitMk}S5^GKU;FO!S*_XO;r%XeKTNHi`1RYKL&@_F{`B*82;8T ztPJMLY>PSje#Ys$_bLy>ALI}?aVK2*;^p77kGGjDxEo@>HtWO1#rI!dtc@&x`s2b1 zWr@g(+ouVbW%51#ffNsKVB`nmYp#b=i_#ec=mc;;7Z?Rssg z>ZC`hJ6@e*V>z(p^vN}|KTn8D@4vKSrMmZX+bs<9P9FXBvYqefpA%~D*?zjVoY=s` z;G@RywQY^@s%a{XrA!PL`PfPs4t;VzT~rl(D`Ex1+S~i=7qB%{?XL+AR~9H*78%*O zee;x}E4L>e+nu%em*@J&AETTmSo<>OKmVd{*>U6ZY?rA!c4P+4>6)awFEIM*#I4_d znSNcq(d_Q*%X(s^mT!;9AATaX`$_qq$cdoughp`~`0Z}hBP+H!5uggc)Z z>oSr~w!Z(f>_zcLsesPP@@Z}Mms+@TsyAimiB6vX^7(U*obb=zzH@$_mRLSNfypj& z?#(~8ZO%)hb_mpcG~QIQSd@W5!P;?IkBTSLYo-TLUJduorymngxXzH!wDwNO_2}YC zi!ZN_?b|6g?e3|}aK$wqo;kIqYO=pwi&wu?=9+)X>N=}?mZ{TC%Hi_k6&$gLzU8{F~{_b(U?f1|7 z|8Fk{YvBBFd#~Jeu7GUT8S8B9>i#bKy=TuFZ~e%#_qThPUfZ{8731qw%kuZV7Z#gt z-uv`vQbb-_=~wfduS`?ZZ|U9>*SH>4Q@pMFn&_F`pH0s8s`4Am-Bu9i=cm?K`Loh4 z>siqohWGDJq(;5}w8@Fd;pA6E2H_j>@&|;T?JlljGMSv0>u8^Khv{Ex&9}eS#i?;B zo3`Emcq5_5&}~!kfpZLd&uMhdJjl?$>))frwu!xl7i_OZZ$FY=#`0;YVWhUh+ENo0 z6Y06py&)eoUcWY%{`TeH#QWJ34!jZz+}e05>hoE*#M~QSx36BfYfJVC)%aubwb}CW zn`i#{cX8T%E#ZhdnQ!jdr%%3@Kj%LG=esRWH+`FQ;8M|cnaP?D4@a7@{$N^sfG79t WN=YB~*(^SCuO2@<*Db}s#|Hq~?4Uyc diff --git a/core/src/mindustry/game/Rules.java b/core/src/mindustry/game/Rules.java index 7a0bbdae7e..eb34bab55f 100644 --- a/core/src/mindustry/game/Rules.java +++ b/core/src/mindustry/game/Rules.java @@ -137,7 +137,7 @@ public class Rules{ } /** A simple map for storing TeamRules in an efficient way without hashing. */ - public static class TeamRules implements Serializable{ + public static class TeamRules implements JsonSerializable{ final TeamRule[] values = new TeamRule[Team.all.length]; public TeamRule get(Team team){ diff --git a/core/src/mindustry/game/SpawnGroup.java b/core/src/mindustry/game/SpawnGroup.java index 86ba7b6324..2b7e8625c9 100644 --- a/core/src/mindustry/game/SpawnGroup.java +++ b/core/src/mindustry/game/SpawnGroup.java @@ -18,7 +18,7 @@ import static mindustry.Vars.*; * weapon equipped, ammo used, and status effects. * Each spawn group can have multiple sub-groups spawned in different areas of the map. */ -public class SpawnGroup implements Serializable{ +public class SpawnGroup implements JsonSerializable{ public static final int never = Integer.MAX_VALUE; /** The unit type spawned */ diff --git a/core/src/mindustry/type/ItemSeq.java b/core/src/mindustry/type/ItemSeq.java index 4fb7409796..a02f29bdb6 100644 --- a/core/src/mindustry/type/ItemSeq.java +++ b/core/src/mindustry/type/ItemSeq.java @@ -10,7 +10,7 @@ import mindustry.world.modules.ItemModule.*; import java.util.*; -public class ItemSeq implements Iterable, 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()) + "]";