summaryrefslogtreecommitdiff
path: root/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java
diff options
context:
space:
mode:
authorGravatar gegy10002018-07-17 19:14:08 +0200
committerGravatar GitHub2018-07-17 19:14:08 +0200
commita88175ffc95792b88a8724f66db6dda2b8cc32ee (patch)
tree65895bbc6cf1766f4ca01e1257619ab1993e71dc /src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java
parentMerge pull request #3 from thiakil/src-jar (diff)
downloadenigma-fork-a88175ffc95792b88a8724f66db6dda2b8cc32ee.tar.gz
enigma-fork-a88175ffc95792b88a8724f66db6dda2b8cc32ee.tar.xz
enigma-fork-a88175ffc95792b88a8724f66db6dda2b8cc32ee.zip
ASM Based Class Translator (#1)
* Initial port to ASM * Package updates * Annotation + inner class translation * Fix inner class mapping * More bytecode translation * Signature refactoring * Fix highlighting of mapped names * Fix parameter name offset * Fix anonymous class generation * Fix issues with inner class signature transformation * Fix bridged method detection * Fix compile issues * Resolve all failed tests * Apply deobfuscated name to transformed classes * Fix class signatures not being translated * Fix frame array type translation * Fix frame array type translation * Fix array translation in method calls * Fix method reference and bridge detection * Fix handling of null deobf mappings * Parameter translation in interfaces * Fix enum parameter index offset * Fix parsed local variable indexing * Fix stackoverflow on rebuilding method names * Ignore invalid decompiled variable indices * basic source jar * Output directly to file on source export * Make decompile parallel * fix incorrect super calls * Use previous save state to delete old mapping files * Fix old mappings not properly being removed * Fix old mappings not properly being removed * make isMethodProvider public (cherry picked from commit ebad6a9) * speed up Deobfuscator's getSources by using a single TranslatingTypeloader and caching the ClassLoaderTypeloader * ignore .idea project folders * move SynchronizedTypeLoader to a non-inner * fix signature remap of inners for now * index & resolve method/field references for usages view * Allow reader/writer subclasses to provide the underlying file operations * fix giving obf classes a name not removing them from the panel * buffer the ParsedJar class entry inputstream, allow use with a jarinputstream * make CachingClasspathTypeLoader public * make CachingClasspathTypeLoader public * support enum switches with obfuscated SwitchMaps
Diffstat (limited to 'src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java')
-rw-r--r--src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java94
1 files changed, 94 insertions, 0 deletions
diff --git a/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java b/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java
new file mode 100644
index 0000000..76c73c1
--- /dev/null
+++ b/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java
@@ -0,0 +1,94 @@
1/*******************************************************************************
2 * Copyright (c) 2015 Jeff Martin.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the GNU Lesser General Public
5 * License v3.0 which accompanies this distribution, and is available at
6 * http://www.gnu.org/licenses/lgpl.html
7 * <p>
8 * Contributors:
9 * Jeff Martin - initial API and implementation
10 ******************************************************************************/
11
12package cuchaz.enigma.analysis;
13
14import com.google.common.collect.Sets;
15import cuchaz.enigma.mapping.*;
16import cuchaz.enigma.mapping.entry.Entry;
17import cuchaz.enigma.mapping.entry.MethodDefEntry;
18import cuchaz.enigma.mapping.entry.MethodEntry;
19
20import javax.swing.tree.DefaultMutableTreeNode;
21import javax.swing.tree.TreeNode;
22import java.util.Set;
23
24public class MethodReferenceTreeNode extends DefaultMutableTreeNode
25 implements ReferenceTreeNode<MethodEntry, MethodDefEntry> {
26
27 private Translator deobfuscatingTranslator;
28 private MethodEntry entry;
29 private EntryReference<MethodEntry, MethodDefEntry> reference;
30 private Access access;
31
32 public MethodReferenceTreeNode(Translator deobfuscatingTranslator, MethodEntry entry) {
33 this.deobfuscatingTranslator = deobfuscatingTranslator;
34 this.entry = entry;
35 this.reference = null;
36 }
37
38 public MethodReferenceTreeNode(Translator deobfuscatingTranslator,
39 EntryReference<MethodEntry, MethodDefEntry> reference, Access access) {
40 this.deobfuscatingTranslator = deobfuscatingTranslator;
41 this.entry = reference.entry;
42 this.reference = reference;
43 this.access = access;
44 }
45
46 @Override
47 public MethodEntry getEntry() {
48 return this.entry;
49 }
50
51 @Override
52 public EntryReference<MethodEntry, MethodDefEntry> getReference() {
53 return this.reference;
54 }
55
56 @Override
57 public String toString() {
58 if (this.reference != null) {
59 return String.format("%s (%s)", this.deobfuscatingTranslator.getTranslatedMethodDef(this.reference.context),
60 this.access);
61 }
62 return this.deobfuscatingTranslator.getTranslatedMethod(this.entry).getName();
63 }
64
65 public void load(JarIndex index, boolean recurse) {
66 // get all the child nodes
67 for (EntryReference<MethodEntry, MethodDefEntry> reference : index.getMethodsReferencing(this.entry)) {
68 add(new MethodReferenceTreeNode(this.deobfuscatingTranslator, reference, index.getAccess(this.entry)));
69 }
70
71 if (recurse && this.children != null) {
72 for (Object child : this.children) {
73 if (child instanceof MethodReferenceTreeNode) {
74 MethodReferenceTreeNode node = (MethodReferenceTreeNode) child;
75
76 // don't recurse into ancestor
77 Set<Entry> ancestors = Sets.newHashSet();
78 TreeNode n = node;
79 while (n.getParent() != null) {
80 n = n.getParent();
81 if (n instanceof MethodReferenceTreeNode) {
82 ancestors.add(((MethodReferenceTreeNode) n).getEntry());
83 }
84 }
85 if (ancestors.contains(node.getEntry())) {
86 continue;
87 }
88
89 node.load(index, true);
90 }
91 }
92 }
93 }
94}