From c4e35f2d516ade27e8e1a863b4bc356f182f43c2 Mon Sep 17 00:00:00 2001 From: jeff Date: Tue, 19 Aug 2014 00:25:32 -0400 Subject: started new reference navigation system --- .../enigma/analysis/FieldReferenceTreeNode.java | 92 ++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 src/cuchaz/enigma/analysis/FieldReferenceTreeNode.java (limited to 'src/cuchaz/enigma/analysis/FieldReferenceTreeNode.java') diff --git a/src/cuchaz/enigma/analysis/FieldReferenceTreeNode.java b/src/cuchaz/enigma/analysis/FieldReferenceTreeNode.java new file mode 100644 index 0000000..dd552d6 --- /dev/null +++ b/src/cuchaz/enigma/analysis/FieldReferenceTreeNode.java @@ -0,0 +1,92 @@ +/******************************************************************************* + * Copyright (c) 2014 Jeff Martin. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Jeff Martin - initial API and implementation + ******************************************************************************/ +package cuchaz.enigma.analysis; + +import javax.swing.tree.DefaultMutableTreeNode; + +import cuchaz.enigma.mapping.BehaviorEntry; +import cuchaz.enigma.mapping.FieldEntry; +import cuchaz.enigma.mapping.Translator; + +public class FieldReferenceTreeNode extends DefaultMutableTreeNode implements ReferenceTreeNode +{ + private static final long serialVersionUID = -7934108091928699835L; + + private Translator m_deobfuscatingTranslator; + private FieldEntry m_entry; + private EntryReference m_reference; + + public FieldReferenceTreeNode( Translator deobfuscatingTranslator, FieldEntry entry ) + { + m_deobfuscatingTranslator = deobfuscatingTranslator; + m_entry = entry; + m_reference = null; + } + + private FieldReferenceTreeNode( Translator deobfuscatingTranslator, EntryReference reference ) + { + m_deobfuscatingTranslator = deobfuscatingTranslator; + m_entry = reference.entry; + m_reference = reference; + } + + @Override + public FieldEntry getEntry( ) + { + return m_entry; + } + + @Override + public EntryReference getReference( ) + { + return m_reference; + } + + @Override + public String toString( ) + { + if( m_reference != null ) + { + return m_deobfuscatingTranslator.translateEntry( m_reference.caller ).toString(); + } + return m_deobfuscatingTranslator.translateEntry( m_entry ).toString(); + } + + public void load( JarIndex index, boolean recurse ) + { + // get all the child nodes + if( m_reference == null ) + { + for( EntryReference reference : index.getFieldReferences( m_entry ) ) + { + add( new FieldReferenceTreeNode( m_deobfuscatingTranslator, reference ) ); + } + } + else + { + for( EntryReference reference : index.getBehaviorReferences( m_reference.caller ) ) + { + add( new BehaviorReferenceTreeNode( m_deobfuscatingTranslator, reference ) ); + } + } + + if( recurse && children != null ) + { + for( Object node : children ) + { + if( node instanceof BehaviorReferenceTreeNode ) + { + ((BehaviorReferenceTreeNode)node).load( index, true ); + } + } + } + } +} -- cgit v1.2.3