summaryrefslogtreecommitdiff
path: root/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java
diff options
context:
space:
mode:
authorGravatar gegy10002018-05-19 17:02:46 +0200
committerGravatar gegy10002018-05-19 17:02:46 +0200
commit2b2249e873c4adfd2dd6e8f1f2489ccd9f6aa021 (patch)
tree14c8b1e806449ace1641a1dbafae162855f79670 /src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java
parentFix build (diff)
downloadenigma-fork-2b2249e873c4adfd2dd6e8f1f2489ccd9f6aa021.tar.gz
enigma-fork-2b2249e873c4adfd2dd6e8f1f2489ccd9f6aa021.tar.xz
enigma-fork-2b2249e873c4adfd2dd6e8f1f2489ccd9f6aa021.zip
Initial port to ASM
Diffstat (limited to 'src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java')
-rw-r--r--src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java91
1 files changed, 91 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..37b4073
--- /dev/null
+++ b/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java
@@ -0,0 +1,91 @@
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.*;
16
17import javax.swing.tree.DefaultMutableTreeNode;
18import javax.swing.tree.TreeNode;
19import java.util.Set;
20
21public class MethodReferenceTreeNode extends DefaultMutableTreeNode
22 implements ReferenceTreeNode<MethodEntry, MethodDefEntry> {
23
24 private Translator deobfuscatingTranslator;
25 private MethodEntry entry;
26 private EntryReference<MethodEntry, MethodDefEntry> reference;
27 private Access access;
28
29 public MethodReferenceTreeNode(Translator deobfuscatingTranslator, MethodEntry entry) {
30 this.deobfuscatingTranslator = deobfuscatingTranslator;
31 this.entry = entry;
32 this.reference = null;
33 }
34
35 public MethodReferenceTreeNode(Translator deobfuscatingTranslator,
36 EntryReference<MethodEntry, MethodDefEntry> reference, Access access) {
37 this.deobfuscatingTranslator = deobfuscatingTranslator;
38 this.entry = reference.entry;
39 this.reference = reference;
40 this.access = access;
41 }
42
43 @Override
44 public MethodEntry getEntry() {
45 return this.entry;
46 }
47
48 @Override
49 public EntryReference<MethodEntry, MethodDefEntry> getReference() {
50 return this.reference;
51 }
52
53 @Override
54 public String toString() {
55 if (this.reference != null) {
56 return String.format("%s (%s)", this.deobfuscatingTranslator.getTranslatedMethodDef(this.reference.context),
57 this.access);
58 }
59 return this.deobfuscatingTranslator.getTranslatedMethod(this.entry).getName();
60 }
61
62 public void load(JarIndex index, boolean recurse) {
63 // get all the child nodes
64 for (EntryReference<MethodEntry, MethodDefEntry> reference : index.getMethodReferences(this.entry)) {
65 add(new MethodReferenceTreeNode(this.deobfuscatingTranslator, reference, index.getAccess(this.entry)));
66 }
67
68 if (recurse && this.children != null) {
69 for (Object child : this.children) {
70 if (child instanceof MethodReferenceTreeNode) {
71 MethodReferenceTreeNode node = (MethodReferenceTreeNode) child;
72
73 // don't recurse into ancestor
74 Set<Entry> ancestors = Sets.newHashSet();
75 TreeNode n = node;
76 while (n.getParent() != null) {
77 n = n.getParent();
78 if (n instanceof MethodReferenceTreeNode) {
79 ancestors.add(((MethodReferenceTreeNode) n).getEntry());
80 }
81 }
82 if (ancestors.contains(node.getEntry())) {
83 continue;
84 }
85
86 node.load(index, true);
87 }
88 }
89 }
90 }
91}