From a033cee4803fa84082104daabdfe80e6e73e3f37 Mon Sep 17 00:00:00 2001 From: Emmastone Date: Thu, 28 Apr 2016 16:53:37 +0100 Subject: [PATCH 1/2] [FEATURE] Added ability to refresh inline field value --- .../java/org/parabot/core/ui/ReflectUI.java | 304 +++++++++--------- 1 file changed, 154 insertions(+), 150 deletions(-) diff --git a/src/main/java/org/parabot/core/ui/ReflectUI.java b/src/main/java/org/parabot/core/ui/ReflectUI.java index 2b26873..70e59b7 100644 --- a/src/main/java/org/parabot/core/ui/ReflectUI.java +++ b/src/main/java/org/parabot/core/ui/ReflectUI.java @@ -23,176 +23,180 @@ import org.parabot.core.reflect.RefClass; import org.parabot.core.reflect.RefField; /** - * + * * A Reflection explorer - * + * * @author Everel - * + * */ public class ReflectUI extends JFrame { - private static final long serialVersionUID = 98565034137367257L; - private DefaultMutableTreeNode root; - private DefaultTreeModel model; - private JEditorPane basicInfoPane; - private JEditorPane selectionInfoPane; - - private Object instance; + private static final long serialVersionUID = 98565034137367257L; + private DefaultMutableTreeNode root; + private DefaultTreeModel model; + private JEditorPane basicInfoPane; + private JEditorPane selectionInfoPane; - private HashMap classes; - private HashMap fields; + private Object instance; - public ReflectUI() { - this.root = new DefaultMutableTreeNode("Classes"); - this.model = new DefaultTreeModel(root); - this.basicInfoPane = new JEditorPane(); - this.selectionInfoPane = new JEditorPane(); - this.classes = new HashMap<>(); - this.fields = new HashMap<>(); - this.instance = Context.getInstance().getClient(); + private HashMap classes; + private HashMap fields; - fillModel(); + public ReflectUI() { + this.root = new DefaultMutableTreeNode("Classes"); + this.model = new DefaultTreeModel(root); + this.basicInfoPane = new JEditorPane(); + this.selectionInfoPane = new JEditorPane(); + this.classes = new HashMap<>(); + this.fields = new HashMap<>(); + this.instance = Context.getInstance().getClient(); - setTitle("Reflection explorer"); - setDefaultCloseOperation(DISPOSE_ON_CLOSE); + fillModel(); - JPanel content = new JPanel(); - content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS)); + setTitle("Reflection explorer"); + setDefaultCloseOperation(DISPOSE_ON_CLOSE); - JPanel exploreContent = new JPanel(); - exploreContent.setLayout(new BoxLayout(exploreContent, BoxLayout.X_AXIS)); - - JPanel infoContent = new JPanel(); - infoContent.setLayout(new BoxLayout(infoContent, BoxLayout.Y_AXIS)); + JPanel content = new JPanel(); + content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS)); - JTree tree = new JTree(); - tree.setRootVisible(true); - tree.setShowsRootHandles(true); - tree.setModel(model); - tree.addTreeSelectionListener(new TreeSelectionListener() { + JPanel exploreContent = new JPanel(); + exploreContent.setLayout(new BoxLayout(exploreContent, BoxLayout.X_AXIS)); - @Override - public void valueChanged(TreeSelectionEvent event) { - TreePath path = event.getPath(); - Object[] pathElements = path.getPath(); - Object element = pathElements[pathElements.length-1]; - if(pathElements.length == 2) { - // class - setClassInfo(classes.get(element)); - } - if(pathElements.length == 3) { - // field - setFieldInfo(fields.get(element)); - } - } - - }); + JPanel infoContent = new JPanel(); + infoContent.setLayout(new BoxLayout(infoContent, BoxLayout.Y_AXIS)); - JScrollPane scrollTreePane = new JScrollPane(tree); - scrollTreePane.setPreferredSize(new Dimension(400, 300)); - - basicInfoPane.setContentType("text/html"); - basicInfoPane.setEditable(false); + JTree tree = new JTree(); + tree.setRootVisible(true); + tree.setShowsRootHandles(true); + tree.setModel(model); + tree.addTreeSelectionListener(new TreeSelectionListener() { - selectionInfoPane.setContentType("text/html"); - selectionInfoPane.setEditable(false); - - JScrollPane scrollBasicInfoPane = new JScrollPane(basicInfoPane); - scrollBasicInfoPane.setPreferredSize(new Dimension(400, 90)); + @Override + public void valueChanged(TreeSelectionEvent event) { + TreePath path = event.getPath(); + Object[] pathElements = path.getPath(); + Object element = pathElements[pathElements.length-1]; + if(pathElements.length == 2) { + // class + setClassInfo(classes.get(element)); + } + if(pathElements.length == 3) { + // field + RefField field = fields.get(element); + setFieldInfo(field); + DefaultMutableTreeNode el = (DefaultMutableTreeNode) element; + el.setUserObject("Field: " + field.getName() + " [type: " + field.getASMType() + "] [value: " + field.asObject() + "]"); - JScrollPane scrollSelectInfoPane = new JScrollPane(selectionInfoPane); - scrollSelectInfoPane.setPreferredSize(new Dimension(400, 200)); - - infoContent.add(scrollBasicInfoPane); - infoContent.add(Box.createRigidArea(new Dimension(0, 10))); - infoContent.add(scrollSelectInfoPane); + } + } - exploreContent.add(scrollTreePane); - exploreContent.add(Box.createRigidArea(new Dimension(10, 0))); - exploreContent.add(infoContent); + }); - content.add(exploreContent); + JScrollPane scrollTreePane = new JScrollPane(tree); + scrollTreePane.setPreferredSize(new Dimension(400, 300)); - JScrollPane contentPane = new JScrollPane(content); - Dimension prefSize = content.getPreferredSize(); - contentPane.setPreferredSize(new Dimension(prefSize.width + contentPane.getVerticalScrollBar().getPreferredSize().width, prefSize.height + contentPane.getHorizontalScrollBar().getPreferredSize().height)); - setContentPane(contentPane); - pack(); - setLocationRelativeTo(null); - setVisible(true); - } + basicInfoPane.setContentType("text/html"); + basicInfoPane.setEditable(false); - private void fillModel() { - Context context = Context.getInstance(); - ClassPath classPath = context.getClassPath(); - ASMClassLoader classLoader = context.getASMClassLoader(); - for (String className : classPath.classNames) { - try { - DefaultMutableTreeNode classNode = new DefaultMutableTreeNode( - "Class: " + className); - DefaultMutableTreeNode fieldNode; + selectionInfoPane.setContentType("text/html"); + selectionInfoPane.setEditable(false); - Class clazz = classLoader.loadClass(className); + JScrollPane scrollBasicInfoPane = new JScrollPane(basicInfoPane); + scrollBasicInfoPane.setPreferredSize(new Dimension(400, 90)); - RefClass refClass = new RefClass(clazz); - if(refClass.instanceOf(this.instance)) { - refClass.setInstance(this.instance); - } - - for (RefField field : refClass.getFields()) { - fieldNode = new DefaultMutableTreeNode("Field: " + field.getName() + " [type: " + field.getASMType() + "] [value: " + field.asObject() + "]"); - classNode.add(fieldNode); - fields.put(fieldNode, field); - } - classes.put(classNode, refClass); + JScrollPane scrollSelectInfoPane = new JScrollPane(selectionInfoPane); + scrollSelectInfoPane.setPreferredSize(new Dimension(400, 200)); - root.add(classNode); - } catch (Throwable t) { - t.printStackTrace(); - } - } - } - - private void fillBasicInfoPane() { - Context context = Context.getInstance(); - ClassPath classPath = context.getClassPath(); - - StringBuilder builder = new StringBuilder(); - - builder.append("Classes: ").append(classPath.classNames.size()).append("
"); - builder.append("Using instance: ").append(instance.toString()).append("
"); - - basicInfoPane.setText(builder.toString()); - } - - private void setFieldInfo(RefField refField) { - StringBuilder builder = new StringBuilder(); - RefClass refClass = refField.getOwner(); - builder.append("

").append(refClass.getClassName()).append(".").append(refField.getName()).append("


"); - builder.append("Class: ").append(refClass.getClassName()).append("
"); - builder.append("Value: ").append(refField.asObject()).append("
"); - builder.append("Type: ").append(refField.getASMType().getClassName()).append("
"); - builder.append("Static: ").append(refField.isStatic() ? "yes" : "no").append("
"); - builder.append("Array: ").append(refField.isArray() ? refField.getArrayDimensions() + " dimension(s)" : "no").append("
"); - selectionInfoPane.setText(builder.toString()); - - fillBasicInfoPane(); - } - - private void setClassInfo(RefClass refClass) { - StringBuilder builder = new StringBuilder(); - builder.append("

").append(refClass.getClassName()).append("


"); - if(refClass.getClassName().contains(".")) { - builder.append("Package: ").append(refClass.getClassName().substring(0, refClass.getClassName().lastIndexOf("."))).append("
"); - } - builder.append("Abstract: ").append(refClass.isAbstract() ? "yes" : "no").append("
"); - builder.append("Interface: ").append(refClass.isInterface() ? "yes" : "no").append("
"); - builder.append("Superclass: ").append(refClass.hasSuperclass() ? refClass.getSuperclass().getClassName() : "no").append("
"); - builder.append("Fields: ").append(refClass.getFields().length).append("
"); - builder.append("Methods: ").append(refClass.getMethods().length).append("
"); - builder.append("Constructors: ").append(refClass.getConstructors().length).append("
"); - selectionInfoPane.setText(builder.toString()); - - fillBasicInfoPane(); - } + infoContent.add(scrollBasicInfoPane); + infoContent.add(Box.createRigidArea(new Dimension(0, 10))); + infoContent.add(scrollSelectInfoPane); -} + exploreContent.add(scrollTreePane); + exploreContent.add(Box.createRigidArea(new Dimension(10, 0))); + exploreContent.add(infoContent); + + content.add(exploreContent); + + JScrollPane contentPane = new JScrollPane(content); + Dimension prefSize = content.getPreferredSize(); + contentPane.setPreferredSize(new Dimension(prefSize.width + contentPane.getVerticalScrollBar().getPreferredSize().width, prefSize.height + contentPane.getHorizontalScrollBar().getPreferredSize().height)); + setContentPane(contentPane); + pack(); + setLocationRelativeTo(null); + setVisible(true); + } + + private void fillModel() { + Context context = Context.getInstance(); + ClassPath classPath = context.getClassPath(); + ASMClassLoader classLoader = context.getASMClassLoader(); + for (String className : classPath.classNames) { + try { + DefaultMutableTreeNode classNode = new DefaultMutableTreeNode( + "Class: " + className); + DefaultMutableTreeNode fieldNode; + + Class clazz = classLoader.loadClass(className); + + RefClass refClass = new RefClass(clazz); + if(refClass.instanceOf(this.instance)) { + refClass.setInstance(this.instance); + } + + for (RefField field : refClass.getFields()) { + fieldNode = new DefaultMutableTreeNode("Field: " + field.getName() + " [type: " + field.getASMType() + "] [value: " + field.asObject() + "]"); + classNode.add(fieldNode); + fields.put(fieldNode, field); + } + classes.put(classNode, refClass); + + root.add(classNode); + } catch (Throwable t) { + t.printStackTrace(); + } + } + } + + private void fillBasicInfoPane() { + Context context = Context.getInstance(); + ClassPath classPath = context.getClassPath(); + + StringBuilder builder = new StringBuilder(); + + builder.append("Classes: ").append(classPath.classNames.size()).append("
"); + builder.append("Using instance: ").append(instance.toString()).append("
"); + + basicInfoPane.setText(builder.toString()); + } + + private void setFieldInfo(RefField refField) { + StringBuilder builder = new StringBuilder(); + RefClass refClass = refField.getOwner(); + builder.append("

").append(refClass.getClassName()).append(".").append(refField.getName()).append("


"); + builder.append("Class: ").append(refClass.getClassName()).append("
"); + builder.append("Value: ").append(refField.asObject()).append("
"); + builder.append("Type: ").append(refField.getASMType().getClassName()).append("
"); + builder.append("Static: ").append(refField.isStatic() ? "yes" : "no").append("
"); + builder.append("Array: ").append(refField.isArray() ? refField.getArrayDimensions() + " dimension(s)" : "no").append("
"); + selectionInfoPane.setText(builder.toString()); + + fillBasicInfoPane(); + } + + private void setClassInfo(RefClass refClass) { + StringBuilder builder = new StringBuilder(); + builder.append("

").append(refClass.getClassName()).append("


"); + if(refClass.getClassName().contains(".")) { + builder.append("Package: ").append(refClass.getClassName().substring(0, refClass.getClassName().lastIndexOf("."))).append("
"); + } + builder.append("Abstract: ").append(refClass.isAbstract() ? "yes" : "no").append("
"); + builder.append("Interface: ").append(refClass.isInterface() ? "yes" : "no").append("
"); + builder.append("Superclass: ").append(refClass.hasSuperclass() ? refClass.getSuperclass().getClassName() : "no").append("
"); + builder.append("Fields: ").append(refClass.getFields().length).append("
"); + builder.append("Methods: ").append(refClass.getMethods().length).append("
"); + builder.append("Constructors: ").append(refClass.getConstructors().length).append("
"); + selectionInfoPane.setText(builder.toString()); + + fillBasicInfoPane(); + } + +} \ No newline at end of file From f074d28923c0e544046268f22b21b69d6c7141a1 Mon Sep 17 00:00:00 2001 From: Emmastone Date: Thu, 28 Apr 2016 16:56:31 +0100 Subject: [PATCH 2/2] [CLEANUP] Reformatted the code --- .../java/org/parabot/core/ui/ReflectUI.java | 41 ++++++++----------- 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/src/main/java/org/parabot/core/ui/ReflectUI.java b/src/main/java/org/parabot/core/ui/ReflectUI.java index 70e59b7..8bc0391 100644 --- a/src/main/java/org/parabot/core/ui/ReflectUI.java +++ b/src/main/java/org/parabot/core/ui/ReflectUI.java @@ -1,33 +1,24 @@ package org.parabot.core.ui; -import java.awt.Dimension; -import java.util.HashMap; - -import javax.swing.Box; -import javax.swing.BoxLayout; -import javax.swing.JEditorPane; -import javax.swing.JFrame; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JTree; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreePath; - import org.parabot.core.Context; import org.parabot.core.asm.ASMClassLoader; import org.parabot.core.classpath.ClassPath; import org.parabot.core.reflect.RefClass; import org.parabot.core.reflect.RefField; +import javax.swing.*; +import javax.swing.event.TreeSelectionEvent; +import javax.swing.event.TreeSelectionListener; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; +import java.awt.*; +import java.util.HashMap; + /** - * * A Reflection explorer * * @author Everel - * */ public class ReflectUI extends JFrame { private static final long serialVersionUID = 98565034137367257L; @@ -74,17 +65,17 @@ public class ReflectUI extends JFrame { public void valueChanged(TreeSelectionEvent event) { TreePath path = event.getPath(); Object[] pathElements = path.getPath(); - Object element = pathElements[pathElements.length-1]; - if(pathElements.length == 2) { + Object element = pathElements[pathElements.length - 1]; + if (pathElements.length == 2) { // class setClassInfo(classes.get(element)); } - if(pathElements.length == 3) { + if (pathElements.length == 3) { // field RefField field = fields.get(element); setFieldInfo(field); DefaultMutableTreeNode el = (DefaultMutableTreeNode) element; - el.setUserObject("Field: " + field.getName() + " [type: " + field.getASMType() + "] [value: " + field.asObject() + "]"); + el.setUserObject("Field: " + field.getName() + " [type: " + field.getASMType() + "] [value: " + field.asObject() + "]"); } } @@ -138,12 +129,12 @@ public class ReflectUI extends JFrame { Class clazz = classLoader.loadClass(className); RefClass refClass = new RefClass(clazz); - if(refClass.instanceOf(this.instance)) { + if (refClass.instanceOf(this.instance)) { refClass.setInstance(this.instance); } for (RefField field : refClass.getFields()) { - fieldNode = new DefaultMutableTreeNode("Field: " + field.getName() + " [type: " + field.getASMType() + "] [value: " + field.asObject() + "]"); + fieldNode = new DefaultMutableTreeNode("Field: " + field.getName() + " [type: " + field.getASMType() + "] [value: " + field.asObject() + "]"); classNode.add(fieldNode); fields.put(fieldNode, field); } @@ -185,7 +176,7 @@ public class ReflectUI extends JFrame { private void setClassInfo(RefClass refClass) { StringBuilder builder = new StringBuilder(); builder.append("

").append(refClass.getClassName()).append("


"); - if(refClass.getClassName().contains(".")) { + if (refClass.getClassName().contains(".")) { builder.append("Package: ").append(refClass.getClassName().substring(0, refClass.getClassName().lastIndexOf("."))).append("
"); } builder.append("Abstract: ").append(refClass.isAbstract() ? "yes" : "no").append("
");