summaryrefslogtreecommitdiff
path: root/src/main/java/cuchaz/enigma/analysis/MethodImplementationsTreeNode.java
diff options
context:
space:
mode:
authorGravatar Thog2017-03-08 08:17:04 +0100
committerGravatar Thog2017-03-08 08:17:04 +0100
commit6e464ea251cab63c776ece0b2a356f1498ffa294 (patch)
tree5ed30c03f5ac4cd2d6877874f5ede576049954f7 /src/main/java/cuchaz/enigma/analysis/MethodImplementationsTreeNode.java
parentDrop unix case style and implement hashCode when equals is overrided (diff)
downloadenigma-fork-6e464ea251cab63c776ece0b2a356f1498ffa294.tar.gz
enigma-fork-6e464ea251cab63c776ece0b2a356f1498ffa294.tar.xz
enigma-fork-6e464ea251cab63c776ece0b2a356f1498ffa294.zip
Follow Fabric guidelines
Diffstat (limited to 'src/main/java/cuchaz/enigma/analysis/MethodImplementationsTreeNode.java')
-rw-r--r--src/main/java/cuchaz/enigma/analysis/MethodImplementationsTreeNode.java147
1 files changed, 73 insertions, 74 deletions
diff --git a/src/main/java/cuchaz/enigma/analysis/MethodImplementationsTreeNode.java b/src/main/java/cuchaz/enigma/analysis/MethodImplementationsTreeNode.java
index 9bd6219..bacb1aa 100644
--- a/src/main/java/cuchaz/enigma/analysis/MethodImplementationsTreeNode.java
+++ b/src/main/java/cuchaz/enigma/analysis/MethodImplementationsTreeNode.java
@@ -8,87 +8,86 @@
8 * Contributors: 8 * Contributors:
9 * Jeff Martin - initial API and implementation 9 * Jeff Martin - initial API and implementation
10 ******************************************************************************/ 10 ******************************************************************************/
11
11package cuchaz.enigma.analysis; 12package cuchaz.enigma.analysis;
12 13
13import com.google.common.collect.Lists; 14import com.google.common.collect.Lists;
14
15import java.util.List;
16
17import javax.swing.tree.DefaultMutableTreeNode;
18
19import cuchaz.enigma.mapping.ClassEntry; 15import cuchaz.enigma.mapping.ClassEntry;
20import cuchaz.enigma.mapping.MethodEntry; 16import cuchaz.enigma.mapping.MethodEntry;
21import cuchaz.enigma.mapping.Translator; 17import cuchaz.enigma.mapping.Translator;
22 18
19import javax.swing.tree.DefaultMutableTreeNode;
20import java.util.List;
21
23public class MethodImplementationsTreeNode extends DefaultMutableTreeNode { 22public class MethodImplementationsTreeNode extends DefaultMutableTreeNode {
24 23
25 private Translator deobfuscatingTranslator; 24 private Translator deobfuscatingTranslator;
26 private MethodEntry entry; 25 private MethodEntry entry;
27 26
28 public MethodImplementationsTreeNode(Translator deobfuscatingTranslator, MethodEntry entry) { 27 public MethodImplementationsTreeNode(Translator deobfuscatingTranslator, MethodEntry entry) {
29 if (entry == null) { 28 if (entry == null) {
30 throw new IllegalArgumentException("Entry cannot be null!"); 29 throw new IllegalArgumentException("Entry cannot be null!");
31 } 30 }
32 31
33 this.deobfuscatingTranslator = deobfuscatingTranslator; 32 this.deobfuscatingTranslator = deobfuscatingTranslator;
34 this.entry = entry; 33 this.entry = entry;
35 } 34 }
36 35
37 public MethodEntry getMethodEntry() { 36 public static MethodImplementationsTreeNode findNode(MethodImplementationsTreeNode node, MethodEntry entry) {
38 return this.entry; 37 // is this the node?
39 } 38 if (node.getMethodEntry().equals(entry)) {
40 39 return node;
41 public String getDeobfClassName() { 40 }
42 return this.deobfuscatingTranslator.translateClass(this.entry.getClassName()); 41
43 } 42 // recurse
44 43 for (int i = 0; i < node.getChildCount(); i++) {
45 public String getDeobfMethodName() { 44 MethodImplementationsTreeNode foundNode = findNode((MethodImplementationsTreeNode) node.getChildAt(i), entry);
46 return this.deobfuscatingTranslator.translate(this.entry); 45 if (foundNode != null) {
47 } 46 return foundNode;
48 47 }
49 @Override 48 }
50 public String toString() { 49 return null;
51 String className = getDeobfClassName(); 50 }
52 if (className == null) { 51
53 className = this.entry.getClassName(); 52 public MethodEntry getMethodEntry() {
54 } 53 return this.entry;
55 54 }
56 String methodName = getDeobfMethodName(); 55
57 if (methodName == null) { 56 public String getDeobfClassName() {
58 methodName = this.entry.getName(); 57 return this.deobfuscatingTranslator.translateClass(this.entry.getClassName());
59 } 58 }
60 return className + "." + methodName + "()"; 59
61 } 60 public String getDeobfMethodName() {
62 61 return this.deobfuscatingTranslator.translate(this.entry);
63 public void load(JarIndex index) { 62 }
64 63
65 // get all method implementations 64 @Override
66 List<MethodImplementationsTreeNode> nodes = Lists.newArrayList(); 65 public String toString() {
67 for (String implementingClassName : index.getImplementingClasses(this.entry.getClassName())) { 66 String className = getDeobfClassName();
68 MethodEntry methodEntry = new MethodEntry(new ClassEntry(implementingClassName), this.entry.getName(), this.entry.getSignature() 67 if (className == null) {
69 ); 68 className = this.entry.getClassName();
70 if (index.containsObfBehavior(methodEntry)) { 69 }
71 nodes.add(new MethodImplementationsTreeNode(this.deobfuscatingTranslator, methodEntry)); 70
72 } 71 String methodName = getDeobfMethodName();
73 } 72 if (methodName == null) {
74 73 methodName = this.entry.getName();
75 // add them to this node 74 }
76 nodes.forEach(this::add); 75 return className + "." + methodName + "()";
77 } 76 }
78 77
79 public static MethodImplementationsTreeNode findNode(MethodImplementationsTreeNode node, MethodEntry entry) { 78 public void load(JarIndex index) {
80 // is this the node? 79
81 if (node.getMethodEntry().equals(entry)) { 80 // get all method implementations
82 return node; 81 List<MethodImplementationsTreeNode> nodes = Lists.newArrayList();
83 } 82 for (String implementingClassName : index.getImplementingClasses(this.entry.getClassName())) {
84 83 MethodEntry methodEntry = new MethodEntry(new ClassEntry(implementingClassName), this.entry.getName(), this.entry.getSignature()
85 // recurse 84 );
86 for (int i = 0; i < node.getChildCount(); i++) { 85 if (index.containsObfBehavior(methodEntry)) {
87 MethodImplementationsTreeNode foundNode = findNode((MethodImplementationsTreeNode) node.getChildAt(i), entry); 86 nodes.add(new MethodImplementationsTreeNode(this.deobfuscatingTranslator, methodEntry));
88 if (foundNode != null) { 87 }
89 return foundNode; 88 }
90 } 89
91 } 90 // add them to this node
92 return null; 91 nodes.forEach(this::add);
93 } 92 }
94} 93}