From ef42f022c7eec4734609a0aea1c9afb269505e7f Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 2 May 2020 00:51:42 -0400 Subject: [PATCH] Cleanup --- .../mindustry/annotations/Annotations.java | 8 +++ .../mindustry/annotations/BaseProcessor.java | 15 +++++ .../mutate/MultilineProcessor.java | 59 +++++++++++++++++++ core/src/mindustry/content/UnitTypes.java | 28 ++++----- core/src/mindustry/entities/GroupDefs.java | 44 +++----------- 5 files changed, 103 insertions(+), 51 deletions(-) create mode 100644 annotations/src/main/java/mindustry/annotations/mutate/MultilineProcessor.java diff --git a/annotations/src/main/java/mindustry/annotations/Annotations.java b/annotations/src/main/java/mindustry/annotations/Annotations.java index 38b48a25a7..d5308f9d55 100644 --- a/annotations/src/main/java/mindustry/annotations/Annotations.java +++ b/annotations/src/main/java/mindustry/annotations/Annotations.java @@ -87,6 +87,14 @@ public class Annotations{ //endregion //region misc. utility + @Target(ElementType.FIELD) + @Retention(RetentionPolicy.SOURCE) + public @interface Multiline { + boolean trim() default true; + boolean merge() default false; + char mergeChar() default ' '; + } + @Target(ElementType.TYPE) @Retention(RetentionPolicy.SOURCE) public @interface StyleDefaults{ diff --git a/annotations/src/main/java/mindustry/annotations/BaseProcessor.java b/annotations/src/main/java/mindustry/annotations/BaseProcessor.java index 37cbff235f..00c5295947 100644 --- a/annotations/src/main/java/mindustry/annotations/BaseProcessor.java +++ b/annotations/src/main/java/mindustry/annotations/BaseProcessor.java @@ -3,9 +3,14 @@ package mindustry.annotations; import arc.files.*; import arc.struct.Array; import arc.util.*; +import arc.util.Log; import arc.util.Log.*; import com.squareup.javapoet.*; import com.sun.source.util.*; +import com.sun.tools.javac.model.*; +import com.sun.tools.javac.processing.*; +import com.sun.tools.javac.tree.*; +import com.sun.tools.javac.util.*; import mindustry.annotations.util.*; import javax.annotation.processing.*; @@ -19,6 +24,7 @@ import java.io.*; import java.lang.annotation.*; import java.lang.reflect.*; import java.util.*; +import java.util.List; @SupportedSourceVersion(SourceVersion.RELEASE_8) public abstract class BaseProcessor extends AbstractProcessor{ @@ -36,6 +42,10 @@ public abstract class BaseProcessor extends AbstractProcessor{ protected RoundEnvironment env; protected Fi rootDirectory; + protected Context context; + protected JavacElements elementUtils; + protected TreeMaker maker; + public static String getMethodName(Element element){ return ((TypeElement)element.getEnclosingElement()).getQualifiedName().toString() + "." + element.getSimpleName(); } @@ -185,6 +195,11 @@ public abstract class BaseProcessor extends AbstractProcessor{ elementu = env.getElementUtils(); filer = env.getFiler(); messager = env.getMessager(); + context = ((JavacProcessingEnvironment)env).getContext(); + + JavacProcessingEnvironment javacProcessingEnv = (JavacProcessingEnvironment)env; + this.elementUtils = javacProcessingEnv.getElementUtils(); + this.maker = TreeMaker.instance(javacProcessingEnv.getContext()); Log.setLogLevel(LogLevel.info); diff --git a/annotations/src/main/java/mindustry/annotations/mutate/MultilineProcessor.java b/annotations/src/main/java/mindustry/annotations/mutate/MultilineProcessor.java new file mode 100644 index 0000000000..6233580512 --- /dev/null +++ b/annotations/src/main/java/mindustry/annotations/mutate/MultilineProcessor.java @@ -0,0 +1,59 @@ +package mindustry.annotations.mutate; + +import com.sun.tools.javac.tree.JCTree.*; +import mindustry.annotations.Annotations.*; +import mindustry.annotations.*; + +import javax.annotation.processing.*; +import javax.lang.model.element.*; +import java.io.*; +import java.util.*; + +//currently unused +@SupportedAnnotationTypes({"mindustry.annotations.Annotations.Multiline"}) +public final class MultilineProcessor extends BaseProcessor{ + + @Override + public void process(RoundEnvironment env){ + Set fields = env.getElementsAnnotatedWith(Multiline.class); + for(Element field : fields){ + String docComment = elementUtils.getDocComment(field); + if(null != docComment){ + JCVariableDecl fieldNode = (JCVariableDecl)elementUtils.getTree(field); + fieldNode.init = maker.Literal(toString(docComment, field.getAnnotation(Multiline.class))); + } + } + } + + static String toString(String value, Multiline annotation){ + if(!annotation.merge() && !annotation.trim()){ + return value; + } + + String crnl = System.getProperty("line.separator"); + try{ + BufferedReader reader = new BufferedReader(new StringReader(value)); + StringBuilder buf = new StringBuilder(); + String line = reader.readLine(); + while(line != null){ + if(annotation.trim()){ + line = line.trim(); + } + if(annotation.merge() && buf.length() > 0){ + if(annotation.mergeChar() != '\0'){ + buf.append(annotation.mergeChar()); + } + } + buf.append(line); + if(!annotation.merge()){ + buf.append(crnl); + } + + line = reader.readLine(); + } + return buf.toString(); + }catch(IOException ex){ + throw new RuntimeException("checked exceptions are disgusting", ex); + } + } +} \ No newline at end of file diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index b382915d5b..6b9f84b33a 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -7,29 +7,27 @@ import mindustry.gen.*; import mindustry.type.*; public class UnitTypes implements ContentList{ - //TODO reimplement - DO NOT USE - public static UnitType - ghoul, revenant, lich, - crawler, fortress, eruptor, chaosArray, eradicator; - //TODO this is awful - public static @EntityDef({Unitc.class, Legsc.class}) UnitType titan; - public static @EntityDef({Unitc.class, Legsc.class}) UnitType dagger; - public static @EntityDef({Unitc.class, WaterMovec.class}) UnitType vanguard; + //ground + public static @EntityDef({Unitc.class, Legsc.class}) UnitType titan, dagger, crawler, fortress, eruptor, chaosArray, eradicator; + + //air + public static @EntityDef({Unitc.class}) UnitType wraith, reaper, ghoul, revenant, lich; + + //mining public static @EntityDef({Unitc.class, Minerc.class}) UnitType draug; - public static @EntityDef({Unitc.class, Trailc.class}) UnitType wraith; - public static @EntityDef({Unitc.class}) UnitType reaper; - public static @EntityDef({Unitc.class}) UnitType spirit; - public static @EntityDef({Unitc.class, Builderc.class}) UnitType phantom; - //TODO remove - public static UnitType alpha, delta, tau, omega, dart, javelin, trident, glaive; - public static UnitType starter; + //building + public static @EntityDef({Unitc.class, Builderc.class}) UnitType phantom, spirit; + + //water + public static @EntityDef({Unitc.class, WaterMovec.class}) UnitType vanguard; @Override public void load(){ dagger = new UnitType("dagger"){{ + speed = 0.5f; drag = 0.3f; hitsize = 8f; diff --git a/core/src/mindustry/entities/GroupDefs.java b/core/src/mindustry/entities/GroupDefs.java index 979fb1aa24..a705f11eb5 100644 --- a/core/src/mindustry/entities/GroupDefs.java +++ b/core/src/mindustry/entities/GroupDefs.java @@ -3,40 +3,12 @@ package mindustry.entities; import mindustry.annotations.Annotations.*; import mindustry.gen.*; -class GroupDefs{ - - @GroupDef(value = Entityc.class, mapping = true) - class gall{ - - } - - @GroupDef(value = Playerc.class, mapping = true) - class gplayer{ - - } - - @GroupDef(value = Bulletc.class, spatial = true, collide = true) - class gbullet{ - - } - - @GroupDef(value = Unitc.class, spatial = true, mapping = true) - class gunit{ - - } - - @GroupDef(Tilec.class) - class gtile{ - - } - - @GroupDef(value = Syncc.class, mapping = true) - class gsync{ - - } - - @GroupDef(Drawc.class) - class gdraw{ - - } +class GroupDefs{ + @GroupDef(value = Entityc.class, mapping = true) G all; + @GroupDef(value = Playerc.class, mapping = true) G player; + @GroupDef(value = Bulletc.class, spatial = true, collide = true) G bullet; + @GroupDef(value = Unitc.class, spatial = true, mapping = true) G unit; + @GroupDef(value = Tilec.class) G tile; + @GroupDef(value = Syncc.class, mapping = true) G sync; + @GroupDef(value = Drawc.class) G draw; }