package decompsource; import java.io.File; import java.io.Reader; import java.io.StringReader; import java.io.StringWriter; import java.io.Writer; import java.nio.charset.StandardCharsets; import java.util.regex.Pattern; import bytecode.BaseStreamingZipProcessor; import decompsource.com.github.abrarsyed.jastyle.ASFormatter; import decompsource.com.github.abrarsyed.jastyle.OptParser; import decompsource.net.minecraftforge.gradle.extrastuff.FmlCleanup; import decompsource.net.minecraftforge.gradle.extrastuff.GLConstantFixer; import decompsource.net.minecraftforge.gradle.extrastuff.McpCleanup; public class MCPCleanup extends BaseStreamingZipProcessor { public static void main(String[] args) { new MCPCleanup().go(args); } @Override public boolean hasConfig() { return true; } ASFormatter formatter = new ASFormatter(); @Override public void loadConfig(File file) throws Exception { new OptParser(formatter).parseOptionFile(file); } @Override protected boolean shouldProcess(String name) { return name.endsWith(".java"); } private static final Pattern BEFORE = Pattern.compile("(?m)((case|default).+(?:\\r\\n|\\r|\\n))(?:\\r\\n|\\r|\\n)"); private static final Pattern AFTER = Pattern.compile("(?m)(?:\\r\\n|\\r|\\n)((?:\\r\\n|\\r|\\n)[ \\t]+(case|default))"); GLConstantFixer fixer = new GLConstantFixer(); @Override protected byte[] process(byte[] in, String name) throws Exception { String text = new String(in, StandardCharsets.UTF_8); Reader reader; Writer writer; //System.err.println("processing comments"); text = McpCleanup.stripComments(text); //System.err.println("fixing imports comments"); text = McpCleanup.fixImports(text); //System.err.println("various other cleanup"); text = McpCleanup.cleanup(text); //System.err.println("fixing OGL constants"); text = fixer.fixOGL(text); //System.err.println("formatting source"); reader = new StringReader(text); writer = new StringWriter(); formatter.format(reader, writer); reader.close(); writer.flush(); writer.close(); text = writer.toString(); //System.err.println("applying FML transformations"); text = BEFORE.matcher(text).replaceAll("$1"); text = AFTER.matcher(text).replaceAll("$1"); text = FmlCleanup.renameClass(text); return text.getBytes(StandardCharsets.UTF_8); } }