summaryrefslogtreecommitdiff
path: root/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java
diff options
context:
space:
mode:
authorGravatar Modmuss502018-07-18 13:46:00 +0100
committerGravatar GitHub2018-07-18 13:46:00 +0100
commit1ebe691c12f68beea378b133ddc4bcbde7f3f795 (patch)
treefb051d9fde5644bd144a7e9d7bcecc70a256359c /src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java
parentRecursively rebuild method names (diff)
parentUpdate version number (diff)
downloadenigma-fork-1ebe691c12f68beea378b133ddc4bcbde7f3f795.tar.gz
enigma-fork-1ebe691c12f68beea378b133ddc4bcbde7f3f795.tar.xz
enigma-fork-1ebe691c12f68beea378b133ddc4bcbde7f3f795.zip
Merge pull request #62 from OpenModLoader/asm
ASM based class translator
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}