summaryrefslogtreecommitdiff
path: root/src/cuchaz/enigma/analysis/ClassImplementationsTreeNode.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/cuchaz/enigma/analysis/ClassImplementationsTreeNode.java')
-rw-r--r--src/cuchaz/enigma/analysis/ClassImplementationsTreeNode.java92
1 files changed, 92 insertions, 0 deletions
diff --git a/src/cuchaz/enigma/analysis/ClassImplementationsTreeNode.java b/src/cuchaz/enigma/analysis/ClassImplementationsTreeNode.java
new file mode 100644
index 0000000..9864830
--- /dev/null
+++ b/src/cuchaz/enigma/analysis/ClassImplementationsTreeNode.java
@@ -0,0 +1,92 @@
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.List;
14
15import javax.swing.tree.DefaultMutableTreeNode;
16
17import com.google.common.collect.Lists;
18
19import cuchaz.enigma.mapping.ClassEntry;
20import cuchaz.enigma.mapping.MethodEntry;
21import cuchaz.enigma.mapping.Translator;
22
23public class ClassImplementationsTreeNode extends DefaultMutableTreeNode
24{
25 private static final long serialVersionUID = 3112703459157851912L;
26
27 private Translator m_deobfuscatingTranslator;
28 private ClassEntry m_entry;
29
30 public ClassImplementationsTreeNode( Translator deobfuscatingTranslator, ClassEntry entry )
31 {
32 m_deobfuscatingTranslator = deobfuscatingTranslator;
33 m_entry = entry;
34 }
35
36 public ClassEntry getClassEntry( )
37 {
38 return m_entry;
39 }
40
41 public String getDeobfClassName( )
42 {
43 return m_deobfuscatingTranslator.translateClass( m_entry.getClassName() );
44 }
45
46 @Override
47 public String toString( )
48 {
49 String className = getDeobfClassName();
50 if( className == null )
51 {
52 className = m_entry.getClassName();
53 }
54 return className;
55 }
56
57 public void load( Ancestries ancestries )
58 {
59 // get all method implementations
60 List<ClassImplementationsTreeNode> nodes = Lists.newArrayList();
61 for( String implementingClassName : ancestries.getImplementingClasses( m_entry.getClassName() ) )
62 {
63 nodes.add( new ClassImplementationsTreeNode( m_deobfuscatingTranslator, new ClassEntry( implementingClassName ) ) );
64 }
65
66 // add them to this node
67 for( ClassImplementationsTreeNode node : nodes )
68 {
69 this.add( node );
70 }
71 }
72
73 public static ClassImplementationsTreeNode findNode( ClassImplementationsTreeNode node, MethodEntry entry )
74 {
75 // is this the node?
76 if( node.m_entry.equals( entry ) )
77 {
78 return node;
79 }
80
81 // recurse
82 for( int i=0; i<node.getChildCount(); i++ )
83 {
84 ClassImplementationsTreeNode foundNode = findNode( (ClassImplementationsTreeNode)node.getChildAt( i ), entry );
85 if( foundNode != null )
86 {
87 return foundNode;
88 }
89 }
90 return null;
91 }
92}