From f0885819aeeb2edbfcfc0b23566cccb571166a02 Mon Sep 17 00:00:00 2001 From: Runemoro Date: Mon, 6 Jul 2020 06:34:10 -0400 Subject: Make class loading more flexible (#277) --- .../cuchaz/enigma/PackageVisibilityIndexTest.java | 10 ++++---- .../src/test/java/cuchaz/enigma/TestDeobfed.java | 27 +++++++++------------- .../test/java/cuchaz/enigma/TestDeobfuscator.java | 5 ++-- .../test/java/cuchaz/enigma/TestInnerClasses.java | 13 +++++++---- .../enigma/TestJarIndexConstructorReferences.java | 10 +++++--- .../cuchaz/enigma/TestJarIndexInheritanceTree.java | 13 +++++++---- .../java/cuchaz/enigma/TestJarIndexLoneClass.java | 9 ++++++-- .../src/test/java/cuchaz/enigma/TokenChecker.java | 9 ++++---- .../mapping/TestTinyV2InnerClasses.java | 3 ++- 9 files changed, 57 insertions(+), 42 deletions(-) (limited to 'enigma/src/test') diff --git a/enigma/src/test/java/cuchaz/enigma/PackageVisibilityIndexTest.java b/enigma/src/test/java/cuchaz/enigma/PackageVisibilityIndexTest.java index 1dc9748..1251535 100644 --- a/enigma/src/test/java/cuchaz/enigma/PackageVisibilityIndexTest.java +++ b/enigma/src/test/java/cuchaz/enigma/PackageVisibilityIndexTest.java @@ -11,12 +11,13 @@ package cuchaz.enigma; -import cuchaz.enigma.analysis.ClassCache; import cuchaz.enigma.analysis.index.JarIndex; import cuchaz.enigma.analysis.index.PackageVisibilityIndex; +import cuchaz.enigma.classprovider.JarClassProvider; import cuchaz.enigma.translation.representation.entry.ClassEntry; import org.junit.Test; +import java.nio.file.Path; import java.nio.file.Paths; import static cuchaz.enigma.TestEntryFactory.newClass; @@ -25,7 +26,7 @@ import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.containsInAnyOrder; public class PackageVisibilityIndexTest { - + public static final Path JAR = Paths.get("build/test-obf/packageAccess.jar"); private static final ClassEntry KEEP = newClass("cuchaz/enigma/inputs/Keep"); private static final ClassEntry BASE = newClass("a"); private static final ClassEntry SAME_PACKAGE_CHILD = newClass("b"); @@ -35,8 +36,9 @@ public class PackageVisibilityIndexTest { private final JarIndex jarIndex; public PackageVisibilityIndexTest() throws Exception { - ClassCache classCache = ClassCache.of(Paths.get("build/test-obf/packageAccess.jar")); - jarIndex = classCache.index(ProgressListener.none()); + JarClassProvider jcp = new JarClassProvider(JAR); + jarIndex = JarIndex.empty(); + jarIndex.indexJar(jcp.getClassNames(), jcp, ProgressListener.none()); } @Test diff --git a/enigma/src/test/java/cuchaz/enigma/TestDeobfed.java b/enigma/src/test/java/cuchaz/enigma/TestDeobfed.java index 494d959..6daa293 100644 --- a/enigma/src/test/java/cuchaz/enigma/TestDeobfed.java +++ b/enigma/src/test/java/cuchaz/enigma/TestDeobfed.java @@ -11,8 +11,7 @@ package cuchaz.enigma; -import cuchaz.enigma.analysis.ClassCache; -import cuchaz.enigma.analysis.index.JarIndex; +import cuchaz.enigma.classprovider.ClasspathClassProvider; import cuchaz.enigma.source.Decompiler; import cuchaz.enigma.source.Decompilers; import cuchaz.enigma.source.SourceSettings; @@ -28,27 +27,24 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.containsInAnyOrder; public class TestDeobfed { - private static Enigma enigma; - private static ClassCache classCache; - private static JarIndex index; + public static final Path OBF = Paths.get("build/test-obf/translation.jar"); + public static final Path DEOBF = Paths.get("build/test-deobf/translation.jar"); + private static EnigmaProject deobfProject; @BeforeClass public static void beforeClass() throws Exception { - enigma = Enigma.create(); + Enigma enigma = Enigma.create(); - Path obf = Paths.get("build/test-obf/translation.jar"); - Path deobf = Paths.get("build/test-deobf/translation.jar"); - Files.createDirectories(deobf.getParent()); - EnigmaProject project = enigma.openJar(obf, ProgressListener.none()); - project.exportRemappedJar(ProgressListener.none()).write(deobf, ProgressListener.none()); + Files.createDirectories(DEOBF.getParent()); + EnigmaProject obfProject = enigma.openJar(OBF, new ClasspathClassProvider(), ProgressListener.none()); + obfProject.exportRemappedJar(ProgressListener.none()).write(DEOBF, ProgressListener.none()); - classCache = ClassCache.of(deobf); - index = classCache.index(ProgressListener.none()); + deobfProject = enigma.openJar(DEOBF, new ClasspathClassProvider(), ProgressListener.none()); } @Test public void obfEntries() { - assertThat(index.getEntryIndex().getClasses(), containsInAnyOrder( + assertThat(deobfProject.getJarIndex().getEntryIndex().getClasses(), containsInAnyOrder( newClass("cuchaz/enigma/inputs/Keep"), newClass("a"), newClass("b"), @@ -77,8 +73,7 @@ public class TestDeobfed { @Test public void decompile() { - EnigmaProject project = new EnigmaProject(enigma, classCache, index, new byte[20]); - Decompiler decompiler = Decompilers.PROCYON.create(project.getClassCache(), new SourceSettings(false, false)); + Decompiler decompiler = Decompilers.PROCYON.create(deobfProject.getClassProvider(), new SourceSettings(false, false)); decompiler.getSource("a"); decompiler.getSource("b"); diff --git a/enigma/src/test/java/cuchaz/enigma/TestDeobfuscator.java b/enigma/src/test/java/cuchaz/enigma/TestDeobfuscator.java index 6619d26..ae42235 100644 --- a/enigma/src/test/java/cuchaz/enigma/TestDeobfuscator.java +++ b/enigma/src/test/java/cuchaz/enigma/TestDeobfuscator.java @@ -11,6 +11,7 @@ package cuchaz.enigma; +import cuchaz.enigma.classprovider.ClasspathClassProvider; import cuchaz.enigma.source.Decompiler; import cuchaz.enigma.source.Decompilers; import cuchaz.enigma.source.SourceSettings; @@ -22,7 +23,7 @@ import java.nio.file.Paths; public class TestDeobfuscator { private EnigmaProject openProject() throws IOException { Enigma enigma = Enigma.create(); - return enigma.openJar(Paths.get("build/test-obf/loneClass.jar"), ProgressListener.none()); + return enigma.openJar(Paths.get("build/test-obf/loneClass.jar"), new ClasspathClassProvider(), ProgressListener.none()); } @Test @@ -34,7 +35,7 @@ public class TestDeobfuscator { @Test public void decompileClass() throws Exception { EnigmaProject project = openProject(); - Decompiler decompiler = Decompilers.PROCYON.create(project.getClassCache(), new SourceSettings(false, false)); + Decompiler decompiler = Decompilers.PROCYON.create(project.getClassProvider(), new SourceSettings(false, false)); decompiler.getSource("a").asString(); } diff --git a/enigma/src/test/java/cuchaz/enigma/TestInnerClasses.java b/enigma/src/test/java/cuchaz/enigma/TestInnerClasses.java index 85c72f8..6b60994 100644 --- a/enigma/src/test/java/cuchaz/enigma/TestInnerClasses.java +++ b/enigma/src/test/java/cuchaz/enigma/TestInnerClasses.java @@ -11,14 +11,16 @@ package cuchaz.enigma; -import cuchaz.enigma.analysis.ClassCache; import cuchaz.enigma.analysis.index.JarIndex; +import cuchaz.enigma.classprovider.CachingClassProvider; +import cuchaz.enigma.classprovider.JarClassProvider; import cuchaz.enigma.source.Decompiler; import cuchaz.enigma.source.Decompilers; import cuchaz.enigma.source.SourceSettings; import cuchaz.enigma.translation.representation.entry.ClassEntry; import org.junit.Test; +import java.nio.file.Path; import java.nio.file.Paths; import static cuchaz.enigma.TestEntryFactory.newClass; @@ -35,13 +37,16 @@ public class TestInnerClasses { private static final ClassEntry ClassTreeLevel1 = newClass("f$a"); private static final ClassEntry ClassTreeLevel2 = newClass("f$a$a"); private static final ClassEntry ClassTreeLevel3 = newClass("f$a$a$a"); + public static final Path JAR = Paths.get("build/test-obf/innerClasses.jar"); private final JarIndex index; private final Decompiler decompiler; public TestInnerClasses() throws Exception { - ClassCache classCache = ClassCache.of(Paths.get("build/test-obf/innerClasses.jar")); - index = classCache.index(ProgressListener.none()); - decompiler = Decompilers.PROCYON.create(classCache, new SourceSettings(false, false)); + JarClassProvider jcp = new JarClassProvider(JAR); + CachingClassProvider classProvider = new CachingClassProvider(jcp); + index = JarIndex.empty(); + index.indexJar(jcp.getClassNames(), classProvider, ProgressListener.none()); + decompiler = Decompilers.PROCYON.create(classProvider, new SourceSettings(false, false)); } @Test diff --git a/enigma/src/test/java/cuchaz/enigma/TestJarIndexConstructorReferences.java b/enigma/src/test/java/cuchaz/enigma/TestJarIndexConstructorReferences.java index 48975c8..0790193 100644 --- a/enigma/src/test/java/cuchaz/enigma/TestJarIndexConstructorReferences.java +++ b/enigma/src/test/java/cuchaz/enigma/TestJarIndexConstructorReferences.java @@ -11,14 +11,16 @@ package cuchaz.enigma; -import cuchaz.enigma.analysis.ClassCache; import cuchaz.enigma.analysis.EntryReference; import cuchaz.enigma.analysis.index.JarIndex; +import cuchaz.enigma.classprovider.CachingClassProvider; +import cuchaz.enigma.classprovider.JarClassProvider; import cuchaz.enigma.translation.representation.entry.ClassEntry; import cuchaz.enigma.translation.representation.entry.MethodDefEntry; import cuchaz.enigma.translation.representation.entry.MethodEntry; import org.junit.Test; +import java.nio.file.Path; import java.nio.file.Paths; import java.util.Collection; @@ -28,6 +30,7 @@ import static org.hamcrest.Matchers.*; public class TestJarIndexConstructorReferences { + public static final Path JAR = Paths.get("build/test-obf/constructors.jar"); private JarIndex index; private ClassEntry baseClass = newClass("a"); @@ -37,8 +40,9 @@ public class TestJarIndexConstructorReferences { private ClassEntry callerClass = newClass("b"); public TestJarIndexConstructorReferences() throws Exception { - ClassCache classCache = ClassCache.of(Paths.get("build/test-obf/constructors.jar")); - index = classCache.index(ProgressListener.none()); + JarClassProvider jcp = new JarClassProvider(JAR); + index = JarIndex.empty(); + index.indexJar(jcp.getClassNames(), new CachingClassProvider(jcp), ProgressListener.none()); } @Test diff --git a/enigma/src/test/java/cuchaz/enigma/TestJarIndexInheritanceTree.java b/enigma/src/test/java/cuchaz/enigma/TestJarIndexInheritanceTree.java index 76e379c..a9045f9 100644 --- a/enigma/src/test/java/cuchaz/enigma/TestJarIndexInheritanceTree.java +++ b/enigma/src/test/java/cuchaz/enigma/TestJarIndexInheritanceTree.java @@ -11,11 +11,12 @@ package cuchaz.enigma; -import cuchaz.enigma.analysis.ClassCache; import cuchaz.enigma.analysis.EntryReference; import cuchaz.enigma.analysis.index.EntryIndex; import cuchaz.enigma.analysis.index.InheritanceIndex; import cuchaz.enigma.analysis.index.JarIndex; +import cuchaz.enigma.classprovider.CachingClassProvider; +import cuchaz.enigma.classprovider.JarClassProvider; import cuchaz.enigma.translation.mapping.EntryResolver; import cuchaz.enigma.translation.mapping.IndexEntryResolver; import cuchaz.enigma.translation.representation.AccessFlags; @@ -26,6 +27,7 @@ import cuchaz.enigma.translation.representation.entry.MethodEntry; import org.junit.Test; import org.objectweb.asm.Opcodes; +import java.nio.file.Path; import java.nio.file.Paths; import java.util.Collection; @@ -35,6 +37,7 @@ import static org.hamcrest.Matchers.*; public class TestJarIndexInheritanceTree { + public static final Path JAR = Paths.get("build/test-obf/inheritanceTree.jar"); private JarIndex index; private ClassEntry baseClass = newClass("a"); @@ -44,10 +47,10 @@ public class TestJarIndexInheritanceTree { private FieldEntry nameField = newField(baseClass, "a", "Ljava/lang/String;"); private FieldEntry numThingsField = newField(subClassB, "a", "I"); - public TestJarIndexInheritanceTree() - throws Exception { - ClassCache classCache = ClassCache.of(Paths.get("build/test-obf/inheritanceTree.jar")); - index = classCache.index(ProgressListener.none()); + public TestJarIndexInheritanceTree() throws Exception { + JarClassProvider jcp = new JarClassProvider(JAR); + index = JarIndex.empty(); + index.indexJar(jcp.getClassNames(), new CachingClassProvider(jcp), ProgressListener.none()); } @Test diff --git a/enigma/src/test/java/cuchaz/enigma/TestJarIndexLoneClass.java b/enigma/src/test/java/cuchaz/enigma/TestJarIndexLoneClass.java index 103c366..6e3755c 100644 --- a/enigma/src/test/java/cuchaz/enigma/TestJarIndexLoneClass.java +++ b/enigma/src/test/java/cuchaz/enigma/TestJarIndexLoneClass.java @@ -15,6 +15,8 @@ import cuchaz.enigma.analysis.*; import cuchaz.enigma.analysis.index.EntryIndex; import cuchaz.enigma.analysis.index.InheritanceIndex; import cuchaz.enigma.analysis.index.JarIndex; +import cuchaz.enigma.classprovider.CachingClassProvider; +import cuchaz.enigma.classprovider.JarClassProvider; import cuchaz.enigma.translation.VoidTranslator; import cuchaz.enigma.translation.representation.AccessFlags; import cuchaz.enigma.translation.representation.entry.ClassEntry; @@ -23,6 +25,7 @@ import cuchaz.enigma.translation.representation.entry.MethodDefEntry; import cuchaz.enigma.translation.representation.entry.MethodEntry; import org.junit.Test; +import java.nio.file.Path; import java.nio.file.Paths; import java.util.Collection; import java.util.List; @@ -33,11 +36,13 @@ import static org.hamcrest.Matchers.*; public class TestJarIndexLoneClass { + public static final Path JAR = Paths.get("build/test-obf/loneClass.jar"); private JarIndex index; public TestJarIndexLoneClass() throws Exception { - ClassCache classCache = ClassCache.of(Paths.get("build/test-obf/loneClass.jar")); - index = classCache.index(ProgressListener.none()); + JarClassProvider jcp = new JarClassProvider(JAR); + index = JarIndex.empty(); + index.indexJar(jcp.getClassNames(), new CachingClassProvider(jcp), ProgressListener.none()); } @Test diff --git a/enigma/src/test/java/cuchaz/enigma/TokenChecker.java b/enigma/src/test/java/cuchaz/enigma/TokenChecker.java index 96fc6da..feef272 100644 --- a/enigma/src/test/java/cuchaz/enigma/TokenChecker.java +++ b/enigma/src/test/java/cuchaz/enigma/TokenChecker.java @@ -12,11 +12,10 @@ package cuchaz.enigma; import com.google.common.collect.Lists; -import cuchaz.enigma.analysis.ClassCache; import cuchaz.enigma.analysis.EntryReference; -import cuchaz.enigma.source.SourceIndex; +import cuchaz.enigma.classprovider.CachingClassProvider; +import cuchaz.enigma.classprovider.JarClassProvider; import cuchaz.enigma.source.*; -import cuchaz.enigma.source.Token; import cuchaz.enigma.translation.representation.entry.Entry; import java.io.IOException; @@ -28,8 +27,8 @@ public class TokenChecker { private final Decompiler decompiler; protected TokenChecker(Path path) throws IOException { - ClassCache classCache = ClassCache.of(path); - decompiler = Decompilers.PROCYON.create(classCache, new SourceSettings(false, false)); + CachingClassProvider classProvider = new CachingClassProvider(new JarClassProvider(path)); + decompiler = Decompilers.PROCYON.create(classProvider, new SourceSettings(false, false)); } protected String getDeclarationToken(Entry entry) { diff --git a/enigma/src/test/java/cuchaz/enigma/translation/mapping/TestTinyV2InnerClasses.java b/enigma/src/test/java/cuchaz/enigma/translation/mapping/TestTinyV2InnerClasses.java index 65941e5..60c70b7 100644 --- a/enigma/src/test/java/cuchaz/enigma/translation/mapping/TestTinyV2InnerClasses.java +++ b/enigma/src/test/java/cuchaz/enigma/translation/mapping/TestTinyV2InnerClasses.java @@ -14,6 +14,7 @@ package cuchaz.enigma.translation.mapping; import cuchaz.enigma.Enigma; import cuchaz.enigma.EnigmaProject; import cuchaz.enigma.ProgressListener; +import cuchaz.enigma.classprovider.ClasspathClassProvider; import cuchaz.enigma.translation.mapping.serde.enigma.EnigmaMappingsReader; import java.nio.file.Path; @@ -30,7 +31,7 @@ public final class TestTinyV2InnerClasses { // @Test public void testMappings() throws Exception { - EnigmaProject project = Enigma.create().openJar(jar, ProgressListener.none()); + EnigmaProject project = Enigma.create().openJar(jar, new ClasspathClassProvider(), ProgressListener.none()); project.setMappings(EnigmaMappingsReader.DIRECTORY.read(mappings, ProgressListener.none(), project.getEnigma().getProfile().getMappingSaveParameters())); } -- cgit v1.2.3