summaryrefslogtreecommitdiff
path: root/src/cuchaz/enigma/analysis/BehaviorReferenceTreeNode.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/cuchaz/enigma/analysis/BehaviorReferenceTreeNode.java')
-rw-r--r--src/cuchaz/enigma/analysis/BehaviorReferenceTreeNode.java105
1 files changed, 105 insertions, 0 deletions
diff --git a/src/cuchaz/enigma/analysis/BehaviorReferenceTreeNode.java b/src/cuchaz/enigma/analysis/BehaviorReferenceTreeNode.java
new file mode 100644
index 0000000..158aad7
--- /dev/null
+++ b/src/cuchaz/enigma/analysis/BehaviorReferenceTreeNode.java
@@ -0,0 +1,105 @@
1/*******************************************************************************
2 * Copyright (c) 2014 Jeff Martin.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the GNU Public License v3.0
5 * which accompanies this distribution, and is available at
6 * http://www.gnu.org/licenses/gpl.html
7 *
8 * Contributors:
9 * Jeff Martin - initial API and implementation
10 ******************************************************************************/
11package cuchaz.enigma.analysis;
12
13import java.util.Set;
14
15import javax.swing.tree.DefaultMutableTreeNode;
16import javax.swing.tree.TreeNode;
17
18import com.google.common.collect.Sets;
19
20import cuchaz.enigma.mapping.BehaviorEntry;
21import cuchaz.enigma.mapping.Entry;
22import cuchaz.enigma.mapping.Translator;
23
24public class BehaviorReferenceTreeNode extends DefaultMutableTreeNode implements ReferenceTreeNode<BehaviorEntry>
25{
26 private static final long serialVersionUID = -3658163700783307520L;
27
28 private Translator m_deobfuscatingTranslator;
29 private BehaviorEntry m_entry;
30 private EntryReference<BehaviorEntry> m_reference;
31
32 public BehaviorReferenceTreeNode( Translator deobfuscatingTranslator, BehaviorEntry entry )
33 {
34 m_deobfuscatingTranslator = deobfuscatingTranslator;
35 m_entry = entry;
36 m_reference = null;
37 }
38
39 public BehaviorReferenceTreeNode( Translator deobfuscatingTranslator, EntryReference<BehaviorEntry> reference )
40 {
41 m_deobfuscatingTranslator = deobfuscatingTranslator;
42 m_entry = reference.entry;
43 m_reference = reference;
44 }
45
46 @Override
47 public BehaviorEntry getEntry( )
48 {
49 return m_entry;
50 }
51
52 @Override
53 public EntryReference<BehaviorEntry> getReference( )
54 {
55 return m_reference;
56 }
57
58 @Override
59 public String toString( )
60 {
61 if( m_reference != null )
62 {
63 return m_deobfuscatingTranslator.translateEntry( m_reference.caller ).toString();
64 }
65 return m_deobfuscatingTranslator.translateEntry( m_entry ).toString();
66 }
67
68 public void load( JarIndex index, boolean recurse )
69 {
70 // get all the child nodes
71 for( EntryReference<BehaviorEntry> reference : index.getBehaviorReferences( m_entry ) )
72 {
73 add( new BehaviorReferenceTreeNode( m_deobfuscatingTranslator, reference ) );
74 }
75
76 if( recurse && children != null )
77 {
78 for( Object child : children )
79 {
80 if( child instanceof BehaviorReferenceTreeNode )
81 {
82 BehaviorReferenceTreeNode node = (BehaviorReferenceTreeNode)child;
83
84 // don't recurse into ancestor
85 Set<Entry> ancestors = Sets.newHashSet();
86 TreeNode n = (TreeNode)node;
87 while( n.getParent() != null )
88 {
89 n = n.getParent();
90 if( n instanceof BehaviorReferenceTreeNode )
91 {
92 ancestors.add( ((BehaviorReferenceTreeNode)n).getEntry() );
93 }
94 }
95 if( ancestors.contains( node.getEntry() ) )
96 {
97 continue;
98 }
99
100 node.load( index, true );
101 }
102 }
103 }
104 }
105}