From ef8bdf506c48d7c9d2bd1f97030d123015c3ae44 Mon Sep 17 00:00:00 2001 From: Adrian Siekierka Date: Sun, 9 Dec 2018 12:38:11 +0100 Subject: add option to view calls to a method in general, not just the specific instance of the method --- src/main/java/cuchaz/enigma/gui/Gui.java | 5 +++-- src/main/java/cuchaz/enigma/gui/GuiController.java | 4 ++-- src/main/java/cuchaz/enigma/gui/elements/PopupMenuBar.java | 12 +++++++++++- 3 files changed, 16 insertions(+), 5 deletions(-) (limited to 'src/main/java/cuchaz/enigma/gui') diff --git a/src/main/java/cuchaz/enigma/gui/Gui.java b/src/main/java/cuchaz/enigma/gui/Gui.java index 8ec58f9..53500aa 100644 --- a/src/main/java/cuchaz/enigma/gui/Gui.java +++ b/src/main/java/cuchaz/enigma/gui/Gui.java @@ -537,6 +537,7 @@ public class Gui { this.popupMenu.showInheritanceMenu.setEnabled(isClassEntry || isMethodEntry || isConstructorEntry); this.popupMenu.showImplementationsMenu.setEnabled(isClassEntry || isMethodEntry); this.popupMenu.showCallsMenu.setEnabled(isClassEntry || isFieldEntry || isMethodEntry || isConstructorEntry); + this.popupMenu.showCallsSpecificMenu.setEnabled(isMethodEntry); this.popupMenu.openEntryMenu.setEnabled(isInJar && (isClassEntry || isFieldEntry || isMethodEntry || isConstructorEntry)); this.popupMenu.openPreviousMenu.setEnabled(this.controller.hasPreviousLocation()); this.popupMenu.toggleMappingMenu.setEnabled(isRenameable); @@ -694,7 +695,7 @@ public class Gui { redraw(); } - public void showCalls() { + public void showCalls(boolean recurse) { if (reference == null) { return; } @@ -706,7 +707,7 @@ public class Gui { FieldReferenceTreeNode node = this.controller.getFieldReferences((FieldEntry) reference.entry); callsTree.setModel(new DefaultTreeModel(node)); } else if (reference.entry instanceof MethodEntry) { - MethodReferenceTreeNode node = this.controller.getMethodReferences((MethodEntry) reference.entry); + MethodReferenceTreeNode node = this.controller.getMethodReferences((MethodEntry) reference.entry, recurse); callsTree.setModel(new DefaultTreeModel(node)); } diff --git a/src/main/java/cuchaz/enigma/gui/GuiController.java b/src/main/java/cuchaz/enigma/gui/GuiController.java index acb0ebb..69aefe5 100644 --- a/src/main/java/cuchaz/enigma/gui/GuiController.java +++ b/src/main/java/cuchaz/enigma/gui/GuiController.java @@ -209,10 +209,10 @@ public class GuiController { return rootNode; } - public MethodReferenceTreeNode getMethodReferences(MethodEntry deobfMethodEntry) { + public MethodReferenceTreeNode getMethodReferences(MethodEntry deobfMethodEntry, boolean recursive) { MethodEntry obfMethodEntry = this.deobfuscator.obfuscateEntry(deobfMethodEntry); MethodReferenceTreeNode rootNode = new MethodReferenceTreeNode(this.deobfuscator.getTranslator(TranslationDirection.DEOBFUSCATING), obfMethodEntry); - rootNode.load(this.deobfuscator.getJarIndex(), true); + rootNode.load(this.deobfuscator.getJarIndex(), true, recursive); return rootNode; } diff --git a/src/main/java/cuchaz/enigma/gui/elements/PopupMenuBar.java b/src/main/java/cuchaz/enigma/gui/elements/PopupMenuBar.java index 2f6d96c..32f9172 100644 --- a/src/main/java/cuchaz/enigma/gui/elements/PopupMenuBar.java +++ b/src/main/java/cuchaz/enigma/gui/elements/PopupMenuBar.java @@ -3,6 +3,7 @@ package cuchaz.enigma.gui.elements; import cuchaz.enigma.gui.Gui; import javax.swing.*; +import java.awt.event.InputEvent; import java.awt.event.KeyEvent; public class PopupMenuBar extends JPopupMenu { @@ -11,6 +12,7 @@ public class PopupMenuBar extends JPopupMenu { public final JMenuItem showInheritanceMenu; public final JMenuItem showImplementationsMenu; public final JMenuItem showCallsMenu; + public final JMenuItem showCallsSpecificMenu; public final JMenuItem openEntryMenu; public final JMenuItem openPreviousMenu; public final JMenuItem toggleMappingMenu; @@ -42,12 +44,20 @@ public class PopupMenuBar extends JPopupMenu { } { JMenuItem menu = new JMenuItem("Show Calls"); - menu.addActionListener(event -> gui.showCalls()); + menu.addActionListener(event -> gui.showCalls(true)); menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, 0)); menu.setEnabled(false); this.add(menu); this.showCallsMenu = menu; } + { + JMenuItem menu = new JMenuItem("Show Calls (Specific)"); + menu.addActionListener(event -> gui.showCalls(false)); + menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.SHIFT_DOWN_MASK)); + menu.setEnabled(false); + this.add(menu); + this.showCallsSpecificMenu = menu; + } { JMenuItem menu = new JMenuItem("Go to Declaration"); menu.addActionListener(event -> gui.navigateTo(gui.reference.entry)); -- cgit v1.2.3