From 00fcd0550fcdda621c2e4662f6ddd55ce673b931 Mon Sep 17 00:00:00 2001 From: Gegy Date: Thu, 24 Jan 2019 14:48:32 +0200 Subject: [WIP] Mapping rework (#91) * Move packages * Mapping & entry refactor: first pass * Fix deobf -> obf tree remapping * Resolve various issues * Give all entries the potential for parents and treat inner classes as children * Deobf UI tree elements * Tests pass * Sort mapping output * Fix delta tracking * Index separation and first pass for #97 * Keep track of remapped jar index * Fix child entries not being remapped * Drop non-root entries * Track dropped mappings * Fix enigma mapping ordering * EntryTreeNode interface * Small tweaks * Naive full index remap on rename * Entries can resolve to more than one root entry * Support alternative resolution strategies * Bridge method resolution * Tests pass * Fix mappings being used where there are none * Fix methods with different descriptors being considered unique. closes #89 --- src/test/java/cuchaz/enigma/TestInnerClasses.java | 44 ++++++++--------------- 1 file changed, 14 insertions(+), 30 deletions(-) (limited to 'src/test/java/cuchaz/enigma/TestInnerClasses.java') diff --git a/src/test/java/cuchaz/enigma/TestInnerClasses.java b/src/test/java/cuchaz/enigma/TestInnerClasses.java index 843a63c..0319cf6 100644 --- a/src/test/java/cuchaz/enigma/TestInnerClasses.java +++ b/src/test/java/cuchaz/enigma/TestInnerClasses.java @@ -11,20 +11,16 @@ package cuchaz.enigma; -import cuchaz.enigma.analysis.JarIndex; import cuchaz.enigma.analysis.ParsedJar; -import cuchaz.enigma.mapping.entry.ClassEntry; -import cuchaz.enigma.mapping.entry.ReferencedEntryPool; +import cuchaz.enigma.analysis.index.JarIndex; +import cuchaz.enigma.translation.representation.entry.ClassEntry; import org.junit.Test; import java.util.jar.JarFile; import static cuchaz.enigma.TestEntryFactory.newClass; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsInAnyOrder; -import static org.hamcrest.Matchers.empty; import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.nullValue; public class TestInnerClasses { @@ -41,23 +37,19 @@ public class TestInnerClasses { public TestInnerClasses() throws Exception { - index = new JarIndex(new ReferencedEntryPool()); + index = JarIndex.empty(); ParsedJar jar = new ParsedJar(new JarFile("build/test-obf/innerClasses.jar")); - index.indexJar(jar, true); + index.indexJar(jar, s -> {}); deobfuscator = new Deobfuscator(jar); } @Test public void simple() { - assertThat(index.getOuterClass(SimpleInner), is(SimpleOuter)); - assertThat(index.getInnerClasses(SimpleOuter), containsInAnyOrder(SimpleInner)); decompile(SimpleOuter); } @Test public void constructorArgs() { - assertThat(index.getOuterClass(ConstructorArgsInner), is(ConstructorArgsOuter)); - assertThat(index.getInnerClasses(ConstructorArgsOuter), containsInAnyOrder(ConstructorArgsInner)); decompile(ConstructorArgsOuter); } @@ -65,33 +57,25 @@ public class TestInnerClasses { public void classTree() { // root level - assertThat(index.containsObfClass(ClassTreeRoot), is(true)); - assertThat(index.getOuterClass(ClassTreeRoot), is(nullValue())); - assertThat(index.getInnerClasses(ClassTreeRoot), containsInAnyOrder(ClassTreeLevel1)); + assertThat(index.getEntryIndex().hasClass(ClassTreeRoot), is(true)); // level 1 ClassEntry fullClassEntry = new ClassEntry(ClassTreeRoot.getName() - + "$" + ClassTreeLevel1.getInnermostClassName()); - assertThat(index.containsObfClass(fullClassEntry), is(true)); - assertThat(index.getOuterClass(ClassTreeLevel1), is(ClassTreeRoot)); - assertThat(index.getInnerClasses(ClassTreeLevel1), containsInAnyOrder(ClassTreeLevel2)); + + "$" + ClassTreeLevel1.getSimpleName()); + assertThat(index.getEntryIndex().hasClass(fullClassEntry), is(true)); // level 2 fullClassEntry = new ClassEntry(ClassTreeRoot.getName() - + "$" + ClassTreeLevel1.getInnermostClassName() - + "$" + ClassTreeLevel2.getInnermostClassName()); - assertThat(index.containsObfClass(fullClassEntry), is(true)); - assertThat(index.getOuterClass(ClassTreeLevel2), is(ClassTreeLevel1)); - assertThat(index.getInnerClasses(ClassTreeLevel2), containsInAnyOrder(ClassTreeLevel3)); + + "$" + ClassTreeLevel1.getSimpleName() + + "$" + ClassTreeLevel2.getSimpleName()); + assertThat(index.getEntryIndex().hasClass(fullClassEntry), is(true)); // level 3 fullClassEntry = new ClassEntry(ClassTreeRoot.getName() - + "$" + ClassTreeLevel1.getInnermostClassName() - + "$" + ClassTreeLevel2.getInnermostClassName() - + "$" + ClassTreeLevel3.getInnermostClassName()); - assertThat(index.containsObfClass(fullClassEntry), is(true)); - assertThat(index.getOuterClass(ClassTreeLevel3), is(ClassTreeLevel2)); - assertThat(index.getInnerClasses(ClassTreeLevel3), is(empty())); + + "$" + ClassTreeLevel1.getSimpleName() + + "$" + ClassTreeLevel2.getSimpleName() + + "$" + ClassTreeLevel3.getSimpleName()); + assertThat(index.getEntryIndex().hasClass(fullClassEntry), is(true)); } private void decompile(ClassEntry classEntry) { -- cgit v1.2.3