1 7 34 35 package com.sun.tools.example.debug.gui; 36 37 import java.io.*; 38 import java.util.*; 39 40 import javax.swing.*; 41 import javax.swing.tree.*; 42 import javax.swing.event.*; 43 import java.awt.*; 44 import java.awt.event.*; 45 46 import com.sun.jdi.*; 47 import com.sun.tools.example.debug.bdi.*; 48 import com.sun.tools.example.debug.expr.ExpressionParser; 49 import com.sun.tools.example.debug.expr.ParseException; 50 51 public class MonitorTool extends JPanel { 52 53 private ExecutionManager runtime; 54 private ContextManager context; 55 56 private JList list; 57 58 public MonitorTool(Environment env) { 59 super(new BorderLayout()); 60 this.runtime = env.getExecutionManager(); 61 this.context = env.getContextManager(); 62 63 list = new JList(env.getMonitorListModel()); 64 list.setCellRenderer(new MonitorRenderer()); 65 66 JScrollPane listView = new JScrollPane(list); 67 add(listView); 68 69 MonitorToolListener listener = new MonitorToolListener(); 71 list.addListSelectionListener(listener); 72 } 74 75 private class MonitorToolListener implements ListSelectionListener { 76 public void valueChanged(ListSelectionEvent e) { 77 int index = list.getSelectedIndex(); 78 if (index != -1) { 79 } 80 } 81 } 82 83 private Value evaluate(String expr) throws ParseException, 84 InvocationException, 85 InvalidTypeException, 86 ClassNotLoadedException, 87 IncompatibleThreadStateException { 88 ExpressionParser.GetFrame frameGetter = 89 new ExpressionParser.GetFrame() { 90 public StackFrame get() 91 throws IncompatibleThreadStateException 92 { 93 try { 94 return context.getCurrentFrame(); 95 } catch (VMNotInterruptedException exc) { 96 throw new IncompatibleThreadStateException(); 97 } 98 } 99 }; 100 return ExpressionParser.evaluate(expr, runtime.vm(), frameGetter); 101 } 102 103 private class MonitorRenderer extends DefaultListCellRenderer { 104 105 public Component getListCellRendererComponent(JList list, 106 Object value, 107 int index, 108 boolean isSelected, 109 boolean cellHasFocus) { 110 111 116 super.getListCellRendererComponent(list, value, index, 117 isSelected, cellHasFocus); 118 if (value == null) { 119 this.setText("<unavailable>"); 120 } else { 121 String expr = (String )value; 122 try { 123 Value result = evaluate(expr); 124 this.setText(expr + " = " + result); 125 } catch (ParseException exc) { 126 this.setText(expr + " ? " + exc.getMessage()); 127 } catch (IncompatibleThreadStateException exc) { 128 this.setText(expr + " ..."); 129 } catch (Exception exc) { 130 this.setText(expr + " ? " + exc); 131 } 132 } 133 return this; 134 } 135 } 136 } 137 | Popular Tags |