From cf3ffcee30083a71e68e3edb9ecbb936cc255992 Mon Sep 17 00:00:00 2001 From: jeff Date: Sun, 28 Sep 2014 15:20:54 -0400 Subject: added proper support for renaming constructors --- src/cuchaz/enigma/gui/Gui.java | 15 +++++++------- src/cuchaz/enigma/gui/GuiController.java | 34 ++++++++++++++++++++------------ 2 files changed, 29 insertions(+), 20 deletions(-) (limited to 'src/cuchaz/enigma/gui') diff --git a/src/cuchaz/enigma/gui/Gui.java b/src/cuchaz/enigma/gui/Gui.java index 8bf6ce9..920bc0b 100644 --- a/src/cuchaz/enigma/gui/Gui.java +++ b/src/cuchaz/enigma/gui/Gui.java @@ -1038,6 +1038,7 @@ public class Gui boolean isMethodEntry = isToken && m_reference.entry instanceof MethodEntry; boolean isConstructorEntry = isToken && m_reference.entry instanceof ConstructorEntry; boolean isInJar = isToken && m_controller.entryIsInJar( m_reference.entry ); + boolean isRenameable = isToken && m_controller.referenceIsRenameable( m_reference ); if( isToken ) { @@ -1048,15 +1049,15 @@ public class Gui clearReference(); } - m_renameMenu.setEnabled( isInJar && isToken ); + m_renameMenu.setEnabled( isRenameable && isToken ); m_showInheritanceMenu.setEnabled( isClassEntry || isMethodEntry || isConstructorEntry ); m_showImplementationsMenu.setEnabled( isClassEntry || isMethodEntry ); m_showCallsMenu.setEnabled( isClassEntry || isFieldEntry || isMethodEntry || isConstructorEntry ); m_openEntryMenu.setEnabled( isInJar && ( isClassEntry || isFieldEntry || isMethodEntry || isConstructorEntry ) ); m_openPreviousMenu.setEnabled( m_controller.hasPreviousLocation() ); - m_toggleMappingMenu.setEnabled( isInJar && isToken ); + m_toggleMappingMenu.setEnabled( isRenameable && isToken ); - if( isToken && m_controller.entryHasMapping( m_reference.entry ) ) + if( isToken && m_controller.entryHasDeobfuscatedName( m_reference.entry ) ) { m_toggleMappingMenu.setText( "Reset to obfuscated" ); } @@ -1082,7 +1083,7 @@ public class Gui private void navigateTo( EntryReference reference ) { - if( !m_controller.entryIsInJar( reference.getClassEntry() ) ) + if( !m_controller.entryIsInJar( reference.getLocationClassEntry() ) ) { // reference is not in the jar. Ignore it return; @@ -1098,7 +1099,7 @@ public class Gui { // init the text box final JTextField text = new JTextField(); - text.setText( m_reference.entry.getName() ); + text.setText( m_reference.getNameableEntry().getName() ); text.setPreferredSize( new Dimension( 360, text.getPreferredSize().height ) ); text.addKeyListener( new KeyAdapter( ) { @@ -1149,7 +1150,7 @@ public class Gui // abort the rename JPanel panel = (JPanel)m_infoPanel.getComponent( 0 ); panel.remove( panel.getComponentCount() - 1 ); - panel.add( GuiTricks.unboldLabel( new JLabel( m_reference.entry.getName(), JLabel.LEFT ) ) ); + panel.add( GuiTricks.unboldLabel( new JLabel( m_reference.getNameableEntry().getName(), JLabel.LEFT ) ) ); m_editor.grabFocus(); @@ -1268,7 +1269,7 @@ public class Gui private void toggleMapping() { - if( m_controller.entryHasMapping( m_reference.entry ) ) + if( m_controller.entryHasDeobfuscatedName( m_reference.entry ) ) { m_controller.removeMapping( m_reference ); } diff --git a/src/cuchaz/enigma/gui/GuiController.java b/src/cuchaz/enigma/gui/GuiController.java index 3adaf91..c7efbce 100644 --- a/src/cuchaz/enigma/gui/GuiController.java +++ b/src/cuchaz/enigma/gui/GuiController.java @@ -165,9 +165,9 @@ public class GuiController ); } - public boolean entryHasMapping( Entry deobfEntry ) + public boolean entryHasDeobfuscatedName( Entry deobfEntry ) { - return m_deobfuscator.hasMapping( m_deobfuscator.obfuscateEntry( deobfEntry ) ); + return m_deobfuscator.hasDeobfuscatedName( m_deobfuscator.obfuscateEntry( deobfEntry ) ); } public boolean entryIsInJar( Entry deobfEntry ) @@ -175,6 +175,11 @@ public class GuiController return m_deobfuscator.isObfuscatedIdentifier( m_deobfuscator.obfuscateEntry( deobfEntry ) ); } + public boolean referenceIsRenameable( EntryReference deobfReference ) + { + return m_deobfuscator.isRenameable( m_deobfuscator.obfuscateReference( deobfReference ) ); + } + public ClassInheritanceTreeNode getClassInheritance( ClassEntry deobfClassEntry ) { ClassEntry obfClassEntry = m_deobfuscator.obfuscateEntry( deobfClassEntry ); @@ -243,7 +248,7 @@ public class GuiController public void rename( EntryReference deobfReference, String newName ) { EntryReference obfReference = m_deobfuscator.obfuscateReference( deobfReference ); - m_deobfuscator.rename( obfReference.entry, newName ); + m_deobfuscator.rename( obfReference.getNameableEntry(), newName ); m_isDirty = true; refreshClasses(); refreshCurrentClass( obfReference ); @@ -252,7 +257,7 @@ public class GuiController public void removeMapping( EntryReference deobfReference ) { EntryReference obfReference = m_deobfuscator.obfuscateReference( deobfReference ); - m_deobfuscator.removeMapping( obfReference.entry ); + m_deobfuscator.removeMapping( obfReference.getNameableEntry() ); m_isDirty = true; refreshClasses(); refreshCurrentClass( obfReference ); @@ -261,7 +266,7 @@ public class GuiController public void markAsDeobfuscated( EntryReference deobfReference ) { EntryReference obfReference = m_deobfuscator.obfuscateReference( deobfReference ); - m_deobfuscator.markAsDeobfuscated( obfReference.entry ); + m_deobfuscator.markAsDeobfuscated( obfReference.getNameableEntry() ); m_isDirty = true; refreshClasses(); refreshCurrentClass( obfReference ); @@ -273,7 +278,7 @@ public class GuiController { throw new IllegalArgumentException( "Entry cannot be null!" ); } - openReference( new EntryReference( deobfEntry ) ); + openReference( new EntryReference( deobfEntry, deobfEntry.getName() ) ); } public void openReference( EntryReference deobfReference ) @@ -285,7 +290,7 @@ public class GuiController // get the reference target class EntryReference obfReference = m_deobfuscator.obfuscateReference( deobfReference ); - ClassEntry obfClassEntry = obfReference.getClassEntry().getOuterClassEntry(); + ClassEntry obfClassEntry = obfReference.getLocationClassEntry().getOuterClassEntry(); if( !m_deobfuscator.isObfuscatedIdentifier( obfClassEntry ) ) { throw new IllegalArgumentException( "Obfuscated class " + obfClassEntry + " was not found in the jar!" ); @@ -390,13 +395,16 @@ public class GuiController for( Token token : m_index.referenceTokens() ) { EntryReference reference = m_index.getDeobfReference( token ); - if( entryHasMapping( reference.entry ) ) - { - deobfuscatedTokens.add( token ); - } - else if( entryIsInJar( reference.entry ) ) + if( referenceIsRenameable( reference ) ) { - obfuscatedTokens.add( token ); + if( entryHasDeobfuscatedName( reference.getNameableEntry() ) ) + { + deobfuscatedTokens.add( token ); + } + else + { + obfuscatedTokens.add( token ); + } } else { -- cgit v1.2.3