diff options
| author | 2019-01-30 21:05:32 +0200 | |
|---|---|---|
| committer | 2019-01-30 21:05:32 +0200 | |
| commit | ba7a354efae7d49833c887cf147ac940c975a1fa (patch) | |
| tree | 02e14fda81dd5984e24f2df392c57c6e829fc875 /src/test/java | |
| parent | Rewrite the Jenkinsfile to use the new declarative pipeline syntax, lets hope... (diff) | |
| download | enigma-fork-ba7a354efae7d49833c887cf147ac940c975a1fa.tar.gz enigma-fork-ba7a354efae7d49833c887cf147ac940c975a1fa.tar.xz enigma-fork-ba7a354efae7d49833c887cf147ac940c975a1fa.zip | |
Remap sources (#106)
* Source remapping beginnings
* Fix navigation to remapped classes
* Translate identifier info reference
* Remap local variables with default names in source
* Caching translator
* Fix lack of highlighting for first opened class
* Fix unicode variable names
* Unicode checker shouldn't be checking just alphanumeric
* Fix package tree being built from obf names
* Don't index `this` as method call for method::reference
* Apply proposed names
* Fix source export issues
* Replace unicode var names at bytecode level uniquely
* Drop imports from editor source
* Class selector fixes
* Delta keep track of base mappings to enable lookup of old names
* Optimize source remapping by remapping source with a StringBuffer instead of copying
* Bump version
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/cuchaz/enigma/TestDeobfed.java | 45 | ||||
| -rw-r--r-- | src/test/java/cuchaz/enigma/TestDeobfuscator.java | 3 | ||||
| -rw-r--r-- | src/test/java/cuchaz/enigma/TestInnerClasses.java | 2 | ||||
| -rw-r--r-- | src/test/java/cuchaz/enigma/TestSourceIndex.java | 9 | ||||
| -rw-r--r-- | src/test/java/cuchaz/enigma/TokenChecker.java | 14 |
5 files changed, 40 insertions, 33 deletions
diff --git a/src/test/java/cuchaz/enigma/TestDeobfed.java b/src/test/java/cuchaz/enigma/TestDeobfed.java index 25cb60c..14b1418 100644 --- a/src/test/java/cuchaz/enigma/TestDeobfed.java +++ b/src/test/java/cuchaz/enigma/TestDeobfed.java | |||
| @@ -68,27 +68,28 @@ public class TestDeobfed { | |||
| 68 | public void decompile() | 68 | public void decompile() |
| 69 | throws Exception { | 69 | throws Exception { |
| 70 | Deobfuscator deobfuscator = new Deobfuscator(jar); | 70 | Deobfuscator deobfuscator = new Deobfuscator(jar); |
| 71 | deobfuscator.getSourceTree("a"); | 71 | SourceProvider sourceProvider = deobfuscator.getObfSourceProvider(); |
| 72 | deobfuscator.getSourceTree("b"); | 72 | sourceProvider.getSources("a"); |
| 73 | deobfuscator.getSourceTree("c"); | 73 | sourceProvider.getSources("b"); |
| 74 | deobfuscator.getSourceTree("d"); | 74 | sourceProvider.getSources("c"); |
| 75 | deobfuscator.getSourceTree("d$1"); | 75 | sourceProvider.getSources("d"); |
| 76 | deobfuscator.getSourceTree("e"); | 76 | sourceProvider.getSources("d$1"); |
| 77 | deobfuscator.getSourceTree("f"); | 77 | sourceProvider.getSources("e"); |
| 78 | deobfuscator.getSourceTree("g"); | 78 | sourceProvider.getSources("f"); |
| 79 | deobfuscator.getSourceTree("g$a"); | 79 | sourceProvider.getSources("g"); |
| 80 | deobfuscator.getSourceTree("g$a$a"); | 80 | sourceProvider.getSources("g$a"); |
| 81 | deobfuscator.getSourceTree("g$b"); | 81 | sourceProvider.getSources("g$a$a"); |
| 82 | deobfuscator.getSourceTree("g$b$a"); | 82 | sourceProvider.getSources("g$b"); |
| 83 | deobfuscator.getSourceTree("h"); | 83 | sourceProvider.getSources("g$b$a"); |
| 84 | deobfuscator.getSourceTree("h$a"); | 84 | sourceProvider.getSources("h"); |
| 85 | deobfuscator.getSourceTree("h$a$a"); | 85 | sourceProvider.getSources("h$a"); |
| 86 | deobfuscator.getSourceTree("h$b"); | 86 | sourceProvider.getSources("h$a$a"); |
| 87 | deobfuscator.getSourceTree("h$b$a"); | 87 | sourceProvider.getSources("h$b"); |
| 88 | deobfuscator.getSourceTree("h$b$a$a"); | 88 | sourceProvider.getSources("h$b$a"); |
| 89 | deobfuscator.getSourceTree("h$b$a$b"); | 89 | sourceProvider.getSources("h$b$a$a"); |
| 90 | deobfuscator.getSourceTree("i"); | 90 | sourceProvider.getSources("h$b$a$b"); |
| 91 | deobfuscator.getSourceTree("i$a"); | 91 | sourceProvider.getSources("i"); |
| 92 | deobfuscator.getSourceTree("i$b"); | 92 | sourceProvider.getSources("i$a"); |
| 93 | sourceProvider.getSources("i$b"); | ||
| 93 | } | 94 | } |
| 94 | } | 95 | } |
diff --git a/src/test/java/cuchaz/enigma/TestDeobfuscator.java b/src/test/java/cuchaz/enigma/TestDeobfuscator.java index 5f11721..e070b66 100644 --- a/src/test/java/cuchaz/enigma/TestDeobfuscator.java +++ b/src/test/java/cuchaz/enigma/TestDeobfuscator.java | |||
| @@ -51,6 +51,7 @@ public class TestDeobfuscator { | |||
| 51 | public void decompileClass() | 51 | public void decompileClass() |
| 52 | throws Exception { | 52 | throws Exception { |
| 53 | Deobfuscator deobfuscator = getDeobfuscator(); | 53 | Deobfuscator deobfuscator = getDeobfuscator(); |
| 54 | deobfuscator.getSource(deobfuscator.getSourceTree("a")); | 54 | SourceProvider sourceProvider = deobfuscator.getObfSourceProvider(); |
| 55 | sourceProvider.writeSourceToString(sourceProvider.getSources("a")); | ||
| 55 | } | 56 | } |
| 56 | } | 57 | } |
diff --git a/src/test/java/cuchaz/enigma/TestInnerClasses.java b/src/test/java/cuchaz/enigma/TestInnerClasses.java index 0319cf6..8738fd7 100644 --- a/src/test/java/cuchaz/enigma/TestInnerClasses.java +++ b/src/test/java/cuchaz/enigma/TestInnerClasses.java | |||
| @@ -79,6 +79,6 @@ public class TestInnerClasses { | |||
| 79 | } | 79 | } |
| 80 | 80 | ||
| 81 | private void decompile(ClassEntry classEntry) { | 81 | private void decompile(ClassEntry classEntry) { |
| 82 | deobfuscator.getSourceTree(classEntry.getName()); | 82 | deobfuscator.getObfSourceProvider().getSources(classEntry.getName()); |
| 83 | } | 83 | } |
| 84 | } | 84 | } |
diff --git a/src/test/java/cuchaz/enigma/TestSourceIndex.java b/src/test/java/cuchaz/enigma/TestSourceIndex.java index a5f5f71..ce5d631 100644 --- a/src/test/java/cuchaz/enigma/TestSourceIndex.java +++ b/src/test/java/cuchaz/enigma/TestSourceIndex.java | |||
| @@ -13,6 +13,7 @@ package cuchaz.enigma; | |||
| 13 | 13 | ||
| 14 | import com.google.common.collect.Sets; | 14 | import com.google.common.collect.Sets; |
| 15 | import com.strobel.decompiler.languages.java.ast.CompilationUnit; | 15 | import com.strobel.decompiler.languages.java.ast.CompilationUnit; |
| 16 | import cuchaz.enigma.analysis.SourceIndex; | ||
| 16 | import cuchaz.enigma.translation.representation.entry.ClassEntry; | 17 | import cuchaz.enigma.translation.representation.entry.ClassEntry; |
| 17 | import org.junit.Test; | 18 | import org.junit.Test; |
| 18 | 19 | ||
| @@ -50,11 +51,13 @@ public class TestSourceIndex { | |||
| 50 | } | 51 | } |
| 51 | } | 52 | } |
| 52 | 53 | ||
| 54 | SourceProvider sourceProvider = deobfuscator.getObfSourceProvider(); | ||
| 53 | for (ClassEntry obfClassEntry : classEntries) { | 55 | for (ClassEntry obfClassEntry : classEntries) { |
| 54 | try { | 56 | try { |
| 55 | CompilationUnit tree = deobfuscator.getSourceTree(obfClassEntry.getName()); | 57 | CompilationUnit tree = sourceProvider.getSources(obfClassEntry.getName()); |
| 56 | String source = deobfuscator.getSource(tree); | 58 | String source = sourceProvider.writeSourceToString(tree); |
| 57 | deobfuscator.getSourceIndex(tree, source); | 59 | |
| 60 | SourceIndex.buildIndex(source, tree, true); | ||
| 58 | } catch (Throwable t) { | 61 | } catch (Throwable t) { |
| 59 | throw new Error("Unable to index " + obfClassEntry, t); | 62 | throw new Error("Unable to index " + obfClassEntry, t); |
| 60 | } | 63 | } |
diff --git a/src/test/java/cuchaz/enigma/TokenChecker.java b/src/test/java/cuchaz/enigma/TokenChecker.java index aac2866..c4670a2 100644 --- a/src/test/java/cuchaz/enigma/TokenChecker.java +++ b/src/test/java/cuchaz/enigma/TokenChecker.java | |||
| @@ -34,11 +34,12 @@ public class TokenChecker { | |||
| 34 | 34 | ||
| 35 | protected String getDeclarationToken(Entry<?> entry) { | 35 | protected String getDeclarationToken(Entry<?> entry) { |
| 36 | // decompile the class | 36 | // decompile the class |
| 37 | CompilationUnit tree = deobfuscator.getSourceTree(entry.getContainingClass().getFullName()); | 37 | SourceProvider sourceProvider = deobfuscator.getObfSourceProvider(); |
| 38 | CompilationUnit tree = sourceProvider.getSources(entry.getContainingClass().getFullName()); | ||
| 38 | // DEBUG | 39 | // DEBUG |
| 39 | // tree.acceptVisitor( new TreeDumpVisitor( new File( "tree." + entry.getClassName().replace( '/', '.' ) + ".txt" ) ), null ); | 40 | // tree.acceptVisitor( new TreeDumpVisitor( new File( "tree." + entry.getClassName().replace( '/', '.' ) + ".txt" ) ), null ); |
| 40 | String source = deobfuscator.getSource(tree); | 41 | String source = sourceProvider.writeSourceToString(tree); |
| 41 | SourceIndex index = deobfuscator.getSourceIndex(tree, source); | 42 | SourceIndex index = SourceIndex.buildIndex(source, tree, true); |
| 42 | 43 | ||
| 43 | // get the token value | 44 | // get the token value |
| 44 | Token token = index.getDeclarationToken(entry); | 45 | Token token = index.getDeclarationToken(entry); |
| @@ -51,9 +52,10 @@ public class TokenChecker { | |||
| 51 | @SuppressWarnings("unchecked") | 52 | @SuppressWarnings("unchecked") |
| 52 | protected Collection<String> getReferenceTokens(EntryReference<? extends Entry<?>, ? extends Entry<?>> reference) { | 53 | protected Collection<String> getReferenceTokens(EntryReference<? extends Entry<?>, ? extends Entry<?>> reference) { |
| 53 | // decompile the class | 54 | // decompile the class |
| 54 | CompilationUnit tree = deobfuscator.getSourceTree(reference.context.getContainingClass().getFullName()); | 55 | SourceProvider sourceProvider = deobfuscator.getObfSourceProvider(); |
| 55 | String source = deobfuscator.getSource(tree); | 56 | CompilationUnit tree = sourceProvider.getSources(reference.context.getContainingClass().getFullName()); |
| 56 | SourceIndex index = deobfuscator.getSourceIndex(tree, source); | 57 | String source = sourceProvider.writeSourceToString(tree); |
| 58 | SourceIndex index = SourceIndex.buildIndex(source, tree, true); | ||
| 57 | 59 | ||
| 58 | // get the token values | 60 | // get the token values |
| 59 | List<String> values = Lists.newArrayList(); | 61 | List<String> values = Lists.newArrayList(); |