From ccccfa1786d783867daf91fbfa522d4a5c55dfdb Mon Sep 17 00:00:00 2001 From: liach Date: Thu, 2 Apr 2020 10:36:27 -0500 Subject: Support java 9+ and gradle 6+ (#206) * Support java 9+ and gradle 6+ * Update asm Signed-off-by: liach * Use asm 8 and move that to a constant * Bump version * fix version format Co-authored-by: liach --- build.gradle | 25 ++++++++++++---------- src/main/java/cuchaz/enigma/EnigmaProject.java | 3 ++- .../java/cuchaz/enigma/analysis/BuiltinPlugin.java | 3 ++- .../java/cuchaz/enigma/analysis/ClassCache.java | 3 ++- .../enigma/analysis/IndexSimpleVerifier.java | 3 ++- .../cuchaz/enigma/analysis/InterpreterPair.java | 3 ++- .../cuchaz/enigma/analysis/index/JarIndex.java | 5 +++-- .../translators/TranslationSignatureVisitor.java | 3 ++- src/main/java/cuchaz/enigma/gui/GuiController.java | 2 +- src/main/java/cuchaz/enigma/utils/Utils.java | 3 +++ src/test/resources/proguard-build.conf | 3 +-- src/test/resources/proguard-test.conf | 3 +-- 12 files changed, 35 insertions(+), 24 deletions(-) diff --git a/build.gradle b/build.gradle index 7d1e4196..34573cf0 100644 --- a/build.gradle +++ b/build.gradle @@ -19,14 +19,12 @@ apply plugin: 'com.github.johnrengelman.shadow' apply plugin: 'maven' group = 'cuchaz' -version = '0.15' +version = '0.15.1' def generatedSourcesDir = "$buildDir/generated-src" def ENV = System.getenv() -if (ENV.BUILD_NUMBER) { - version = version + "." + "${System.getenv().BUILD_NUMBER}" -} +version = version + "+" + (ENV.BUILD_NUMBER ? ("build." + ENV.BUILD_NUMBER) : "local") sourceCompatibility = 1.8 targetCompatibility = 1.8 @@ -60,6 +58,9 @@ repositories { ivy { name "darcula" artifactPattern "https://raw.githubusercontent.com/bulenkov/Darcula/master/build/[module].[ext]" + metadataSources { + artifact() + } } } @@ -73,10 +74,10 @@ configurations { dependencies { compile 'com.google.guava:guava:28.0-jre' compile 'com.google.code.gson:gson:2.8.5' - compile 'org.ow2.asm:asm:7.1' - compile 'org.ow2.asm:asm-commons:7.1' - compile 'org.ow2.asm:asm-tree:7.1' - compile 'org.ow2.asm:asm-util:7.1' + compile 'org.ow2.asm:asm:8.0' + compile 'org.ow2.asm:asm-commons:8.0' + compile 'org.ow2.asm:asm-tree:8.0' + compile 'org.ow2.asm:asm-util:8.0' compile 'net.sf.jopt-simple:jopt-simple:6.0-alpha-3' compile 'net.fabricmc:procyon-fabric-compilertools:0.5.35.+' @@ -88,9 +89,11 @@ dependencies { testCompile 'junit:junit:4.+' testCompile 'org.hamcrest:hamcrest-all:1.+' - proGuard 'net.sf.proguard:proguard-base:5.+' + proGuard 'net.sf.proguard:proguard-base:6.+' } +def libraryJarsArg = JavaVersion.current().java9Compatible ? "/jmods": "/lib/rt.jar" + // For each set of test inputs, create an output jar and obfuscate it. file('src/test/java/cuchaz/enigma/inputs').listFiles().each { theFile -> if (theFile.directory) { @@ -110,8 +113,8 @@ file('src/test/java/cuchaz/enigma/inputs').listFiles().each { theFile -> classpath configurations.proGuard args '@src/test/resources/proguard-test.conf', '-injars', file('build/test-inputs/' + - "${theFile.name}.jar"), '-outjars', file('build/test-obf/' + - "${theFile.name}.jar") + "${theFile.name}.jar"), '-libraryjars', libraryJarsArg, + '-outjars', file('build/test-obf/' + "${theFile.name}.jar") } test.dependsOn "${theFile.name}TestObf" diff --git a/src/main/java/cuchaz/enigma/EnigmaProject.java b/src/main/java/cuchaz/enigma/EnigmaProject.java index 78b49b57..852bfc49 100644 --- a/src/main/java/cuchaz/enigma/EnigmaProject.java +++ b/src/main/java/cuchaz/enigma/EnigmaProject.java @@ -18,6 +18,7 @@ import cuchaz.enigma.translation.representation.entry.LocalVariableEntry; import cuchaz.enigma.translation.representation.entry.MethodEntry; import cuchaz.enigma.utils.I18n; +import cuchaz.enigma.utils.Utils; import org.objectweb.asm.ClassWriter; import org.objectweb.asm.Opcodes; import org.objectweb.asm.tree.ClassNode; @@ -152,7 +153,7 @@ public class EnigmaProject { ClassNode node = classCache.getClassNode(entry.getFullName()); if (node != null) { ClassNode translatedNode = new ClassNode(); - node.accept(new TranslationClassVisitor(deobfuscator, Opcodes.ASM5, new SourceFixVisitor(Opcodes.ASM5, translatedNode, jarIndex))); + node.accept(new TranslationClassVisitor(deobfuscator, Utils.ASM_VERSION, new SourceFixVisitor(Utils.ASM_VERSION, translatedNode, jarIndex))); return translatedNode; } diff --git a/src/main/java/cuchaz/enigma/analysis/BuiltinPlugin.java b/src/main/java/cuchaz/enigma/analysis/BuiltinPlugin.java index fddd9a8e..dc3f5535 100644 --- a/src/main/java/cuchaz/enigma/analysis/BuiltinPlugin.java +++ b/src/main/java/cuchaz/enigma/analysis/BuiltinPlugin.java @@ -12,6 +12,7 @@ import cuchaz.enigma.translation.representation.entry.ClassEntry; import cuchaz.enigma.translation.representation.entry.Entry; import cuchaz.enigma.translation.representation.entry.FieldEntry; import cuchaz.enigma.utils.Pair; +import cuchaz.enigma.utils.Utils; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.FieldVisitor; @@ -69,7 +70,7 @@ public final class BuiltinPlugin implements EnigmaPlugin { private final List classInits = new ArrayList<>(); EnumFieldNameFindingVisitor(Map, String> mappings) { - super(Opcodes.ASM7); + super(Utils.ASM_VERSION); this.mappings = mappings; } diff --git a/src/main/java/cuchaz/enigma/analysis/ClassCache.java b/src/main/java/cuchaz/enigma/analysis/ClassCache.java index d97b2041..f694bf35 100644 --- a/src/main/java/cuchaz/enigma/analysis/ClassCache.java +++ b/src/main/java/cuchaz/enigma/analysis/ClassCache.java @@ -7,6 +7,7 @@ import cuchaz.enigma.ClassProvider; import cuchaz.enigma.ProgressListener; import cuchaz.enigma.analysis.index.JarIndex; import cuchaz.enigma.bytecode.translators.LocalVariableFixVisitor; +import cuchaz.enigma.utils.Utils; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.Opcodes; @@ -77,7 +78,7 @@ public final class ClassCache implements AutoCloseable, ClassProvider { ClassNode node = new ClassNode(); - LocalVariableFixVisitor visitor = new LocalVariableFixVisitor(Opcodes.ASM5, node); + LocalVariableFixVisitor visitor = new LocalVariableFixVisitor(Utils.ASM_VERSION, node); reader.accept(visitor, 0); return node; diff --git a/src/main/java/cuchaz/enigma/analysis/IndexSimpleVerifier.java b/src/main/java/cuchaz/enigma/analysis/IndexSimpleVerifier.java index da2b5efe..80a71546 100644 --- a/src/main/java/cuchaz/enigma/analysis/IndexSimpleVerifier.java +++ b/src/main/java/cuchaz/enigma/analysis/IndexSimpleVerifier.java @@ -5,6 +5,7 @@ import cuchaz.enigma.analysis.index.InheritanceIndex; import cuchaz.enigma.translation.representation.AccessFlags; import cuchaz.enigma.translation.representation.entry.ClassDefEntry; import cuchaz.enigma.translation.representation.entry.ClassEntry; +import cuchaz.enigma.utils.Utils; import org.objectweb.asm.Type; import org.objectweb.asm.tree.analysis.BasicValue; import org.objectweb.asm.tree.analysis.SimpleVerifier; @@ -17,7 +18,7 @@ public class IndexSimpleVerifier extends SimpleVerifier { private final InheritanceIndex inheritanceIndex; public IndexSimpleVerifier(EntryIndex entryIndex, InheritanceIndex inheritanceIndex) { - super(ASM7, null, null, null, false); + super(Utils.ASM_VERSION, null, null, null, false); this.entryIndex = entryIndex; this.inheritanceIndex = inheritanceIndex; } diff --git a/src/main/java/cuchaz/enigma/analysis/InterpreterPair.java b/src/main/java/cuchaz/enigma/analysis/InterpreterPair.java index af74c854..f2607291 100644 --- a/src/main/java/cuchaz/enigma/analysis/InterpreterPair.java +++ b/src/main/java/cuchaz/enigma/analysis/InterpreterPair.java @@ -1,5 +1,6 @@ package cuchaz.enigma.analysis; +import cuchaz.enigma.utils.Utils; import org.objectweb.asm.Opcodes; import org.objectweb.asm.Type; import org.objectweb.asm.tree.AbstractInsnNode; @@ -16,7 +17,7 @@ public class InterpreterPair extends Interpret private final Interpreter right; public InterpreterPair(Interpreter left, Interpreter right) { - super(Opcodes.ASM7); + super(Utils.ASM_VERSION); this.left = left; this.right = right; } diff --git a/src/main/java/cuchaz/enigma/analysis/index/JarIndex.java b/src/main/java/cuchaz/enigma/analysis/index/JarIndex.java index c96e7747..e401c2f7 100644 --- a/src/main/java/cuchaz/enigma/analysis/index/JarIndex.java +++ b/src/main/java/cuchaz/enigma/analysis/index/JarIndex.java @@ -22,6 +22,7 @@ import cuchaz.enigma.translation.representation.Lambda; import cuchaz.enigma.translation.representation.entry.*; import cuchaz.enigma.utils.I18n; +import cuchaz.enigma.utils.Utils; import org.objectweb.asm.ClassReader; import org.objectweb.asm.Opcodes; @@ -63,10 +64,10 @@ public class JarIndex implements JarIndexer { progress.init(4, I18n.translate("progress.jar.indexing")); progress.step(1, I18n.translate("progress.jar.indexing.entries")); - classCache.visit(() -> new IndexClassVisitor(this, Opcodes.ASM5), ClassReader.SKIP_CODE); + classCache.visit(() -> new IndexClassVisitor(this, Utils.ASM_VERSION), ClassReader.SKIP_CODE); progress.step(2, I18n.translate("progress.jar.indexing.references")); - classCache.visit(() -> new IndexReferenceVisitor(this, entryIndex, inheritanceIndex, Opcodes.ASM5), 0); + classCache.visit(() -> new IndexReferenceVisitor(this, entryIndex, inheritanceIndex, Utils.ASM_VERSION), 0); progress.step(3, I18n.translate("progress.jar.indexing.methods")); bridgeMethodIndex.findBridgeMethods(); diff --git a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationSignatureVisitor.java b/src/main/java/cuchaz/enigma/bytecode/translators/TranslationSignatureVisitor.java index e66b085f..8e7780e6 100644 --- a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationSignatureVisitor.java +++ b/src/main/java/cuchaz/enigma/bytecode/translators/TranslationSignatureVisitor.java @@ -1,5 +1,6 @@ package cuchaz.enigma.bytecode.translators; +import cuchaz.enigma.utils.Utils; import org.objectweb.asm.Opcodes; import org.objectweb.asm.signature.SignatureVisitor; @@ -13,7 +14,7 @@ public class TranslationSignatureVisitor extends SignatureVisitor { private final Stack classStack = new Stack<>(); public TranslationSignatureVisitor(Function remapper, SignatureVisitor sv) { - super(Opcodes.ASM5); + super(Utils.ASM_VERSION); this.remapper = remapper; this.sv = sv; } diff --git a/src/main/java/cuchaz/enigma/gui/GuiController.java b/src/main/java/cuchaz/enigma/gui/GuiController.java index 17c81dde..261238b7 100644 --- a/src/main/java/cuchaz/enigma/gui/GuiController.java +++ b/src/main/java/cuchaz/enigma/gui/GuiController.java @@ -111,7 +111,7 @@ public class GuiController { } ClassNode fixedNode = new ClassNode(); - node.accept(new SourceFixVisitor(Opcodes.ASM7, fixedNode, project.getJarIndex())); + node.accept(new SourceFixVisitor(Utils.ASM_VERSION, fixedNode, project.getJarIndex())); return fixedNode; }, new SourceSettings(true, true)); } diff --git a/src/main/java/cuchaz/enigma/utils/Utils.java b/src/main/java/cuchaz/enigma/utils/Utils.java index 17f6fb8f..b8f2ec23 100644 --- a/src/main/java/cuchaz/enigma/utils/Utils.java +++ b/src/main/java/cuchaz/enigma/utils/Utils.java @@ -12,6 +12,7 @@ package cuchaz.enigma.utils; import com.google.common.io.CharStreams; +import org.objectweb.asm.Opcodes; import javax.swing.*; import java.awt.*; @@ -30,6 +31,8 @@ import java.util.StringJoiner; import java.util.stream.Collectors; public class Utils { + + public static final int ASM_VERSION = Opcodes.ASM8; public static int combineHashesOrdered(Object... objs) { final int prime = 67; diff --git a/src/test/resources/proguard-build.conf b/src/test/resources/proguard-build.conf index 117180e6..ba3575ae 100644 --- a/src/test/resources/proguard-build.conf +++ b/src/test/resources/proguard-build.conf @@ -1,7 +1,6 @@ --libraryjars /lib/rt.jar -dontoptimize -dontobfuscate -dontwarn -keep class cuchaz.enigma.Main { static void main(java.lang.String[]); } -keep class cuchaz.enigma.CommandMain { static void main(java.lang.String[]); } --keep class de.sciss.syntaxpane.** { *; } \ No newline at end of file +-keep class de.sciss.syntaxpane.** { *; } diff --git a/src/test/resources/proguard-test.conf b/src/test/resources/proguard-test.conf index 0d3d60e9..9411d269 100644 --- a/src/test/resources/proguard-test.conf +++ b/src/test/resources/proguard-test.conf @@ -1,4 +1,3 @@ --libraryjars /lib/rt.jar -overloadaggressively -repackageclasses -allowaccessmodification @@ -6,4 +5,4 @@ -dontshrink -keepparameternames -keepattributes --keep class cuchaz.enigma.inputs.Keep \ No newline at end of file +-keep class cuchaz.enigma.inputs.Keep -- cgit v1.2.3