summaryrefslogtreecommitdiff
path: root/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java')
-rw-r--r--src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java113
1 files changed, 0 insertions, 113 deletions
diff --git a/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java b/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java
deleted file mode 100644
index 8995eb5..0000000
--- a/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java
+++ /dev/null
@@ -1,113 +0,0 @@
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.analysis.index.JarIndex;
16import cuchaz.enigma.analysis.index.ReferenceIndex;
17import cuchaz.enigma.translation.Translator;
18import cuchaz.enigma.translation.mapping.EntryResolver;
19import cuchaz.enigma.translation.representation.entry.Entry;
20import cuchaz.enigma.translation.representation.entry.MethodDefEntry;
21import cuchaz.enigma.translation.representation.entry.MethodEntry;
22
23import javax.swing.tree.DefaultMutableTreeNode;
24import javax.swing.tree.TreeNode;
25import java.util.ArrayList;
26import java.util.Collection;
27import java.util.Set;
28
29public class MethodReferenceTreeNode extends DefaultMutableTreeNode implements ReferenceTreeNode<MethodEntry, MethodDefEntry> {
30
31 private final Translator translator;
32 private MethodEntry entry;
33 private EntryReference<MethodEntry, MethodDefEntry> reference;
34
35 public MethodReferenceTreeNode(Translator translator, MethodEntry entry) {
36 this.translator = translator;
37 this.entry = entry;
38 this.reference = null;
39 }
40
41 public MethodReferenceTreeNode(Translator translator, EntryReference<MethodEntry, MethodDefEntry> reference) {
42 this.translator = translator;
43 this.entry = reference.entry;
44 this.reference = reference;
45 }
46
47 @Override
48 public MethodEntry getEntry() {
49 return this.entry;
50 }
51
52 @Override
53 public EntryReference<MethodEntry, MethodDefEntry> getReference() {
54 return this.reference;
55 }
56
57 @Override
58 public String toString() {
59 if (this.reference != null) {
60 return String.format("%s", translator.translate(this.reference.context));
61 }
62 return translator.translate(this.entry).getName();
63 }
64
65 public void load(JarIndex index, boolean recurse, boolean recurseMethod) {
66 // get all the child nodes
67 Collection<EntryReference<MethodEntry, MethodDefEntry>> references = getReferences(index, recurseMethod);
68
69 for (EntryReference<MethodEntry, MethodDefEntry> reference : references) {
70 add(new MethodReferenceTreeNode(translator, reference));
71 }
72
73 if (recurse && this.children != null) {
74 for (Object child : this.children) {
75 if (child instanceof MethodReferenceTreeNode) {
76 MethodReferenceTreeNode node = (MethodReferenceTreeNode) child;
77
78 // don't recurse into ancestor
79 Set<Entry<?>> ancestors = Sets.newHashSet();
80 TreeNode n = node;
81 while (n.getParent() != null) {
82 n = n.getParent();
83 if (n instanceof MethodReferenceTreeNode) {
84 ancestors.add(((MethodReferenceTreeNode) n).getEntry());
85 }
86 }
87 if (ancestors.contains(node.getEntry())) {
88 continue;
89 }
90
91 node.load(index, true, false);
92 }
93 }
94 }
95 }
96
97 private Collection<EntryReference<MethodEntry, MethodDefEntry>> getReferences(JarIndex index, boolean recurseMethod) {
98 ReferenceIndex referenceIndex = index.getReferenceIndex();
99
100 if (recurseMethod) {
101 Collection<EntryReference<MethodEntry, MethodDefEntry>> references = new ArrayList<>();
102
103 EntryResolver entryResolver = index.getEntryResolver();
104 for (MethodEntry methodEntry : entryResolver.resolveEquivalentMethods(entry)) {
105 references.addAll(referenceIndex.getReferencesToMethod(methodEntry));
106 }
107
108 return references;
109 } else {
110 return referenceIndex.getReferencesToMethod(entry);
111 }
112 }
113}