Watches and tooltips are using the TruffleObject now.
1.1 --- a/debugger.jpda.truffle/src/org/netbeans/modules/debugger/jpda/truffle/access/TruffleEval.java Fri Dec 12 14:41:01 2014 +0100
1.2 +++ b/debugger.jpda.truffle/src/org/netbeans/modules/debugger/jpda/truffle/access/TruffleEval.java Fri Dec 12 16:18:31 2014 +0100
1.3 @@ -59,7 +59,7 @@
1.4 public class TruffleEval {
1.5
1.6 private static final String METHOD_EVALUATE = "evaluate"; // NOI18N
1.7 - private static final String METHOD_EVALUATE_SIG = "(Ljava/lang/String;)Ljava/lang/String;"; // NOI18N
1.8 + private static final String METHOD_EVALUATE_SIG = "(Ljava/lang/String;)Ljava/lang/Object;"; // NOI18N
1.9 private static final String METHOD_EVALUATE_ON_FRAME_SIG = "(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;"; // NOI18N
1.10
1.11 private TruffleEval() {}
2.1 Binary file debugger.jpda.truffle/src/org/netbeans/modules/debugger/jpda/truffle/resources/JPDATruffleBackend.jar has changed
3.1 --- a/debugger.jpda.truffle/src/org/netbeans/modules/debugger/jpda/truffle/vars/TruffleVariableImpl.java Fri Dec 12 14:41:01 2014 +0100
3.2 +++ b/debugger.jpda.truffle/src/org/netbeans/modules/debugger/jpda/truffle/vars/TruffleVariableImpl.java Fri Dec 12 16:18:31 2014 +0100
3.3 @@ -81,24 +81,33 @@
3.4 public static TruffleVariableImpl get(Variable var) {
3.5 if (TRUFFLE_OBJECT_TYPE.equals(var.getType())) {
3.6 ObjectVariable truffleObj = (ObjectVariable) var;
3.7 - String name = (String) truffleObj.getField(FIELD_NAME).createMirrorObject();
3.8 - String type = (String) truffleObj.getField(FIELD_TYPE).createMirrorObject();
3.9 - String dispVal = (String) truffleObj.getField(FIELD_DISPLAY_VALUE).createMirrorObject();
3.10 + //System.err.println("TruffleVariableImpl.get("+var+") fields on "+truffleObj+", class "+truffleObj.getClassType().getName());
3.11 + // The inner value can change in watches.
3.12 + Field f = truffleObj.getField(FIELD_NAME);
3.13 + if (f == null) {
3.14 + return null;
3.15 + }
3.16 + String name = (String) f.createMirrorObject();
3.17 + f = truffleObj.getField(FIELD_TYPE);
3.18 + if (f == null) {
3.19 + return null;
3.20 + }
3.21 + String type = (String) f.createMirrorObject();
3.22 + f = truffleObj.getField(FIELD_DISPLAY_VALUE);
3.23 + if (f == null) {
3.24 + return null;
3.25 + }
3.26 + String dispVal = (String) f.createMirrorObject();
3.27 + f = truffleObj.getField(FIELD_LEAF);
3.28 + if (f == null) {
3.29 + return null;
3.30 + }
3.31 + Boolean mirrorLeaf = (Boolean) f.createMirrorObject();
3.32 boolean leaf;
3.33 - if (truffleObj.getField(FIELD_LEAF) == null) {
3.34 - System.err.println("No "+FIELD_LEAF+" field on "+truffleObj+", class "+truffleObj.getClassType().getName());
3.35 + if (mirrorLeaf == null) {
3.36 leaf = false;
3.37 } else {
3.38 - try {
3.39 - leaf = (Boolean) truffleObj.getField(FIELD_LEAF).createMirrorObject();
3.40 - } catch (NullPointerException npe) {
3.41 - Boolean mirrorLeaf = (Boolean) truffleObj.getField(FIELD_LEAF).createMirrorObject();
3.42 - if (mirrorLeaf == null) {
3.43 - leaf = false;
3.44 - } else {
3.45 - leaf = mirrorLeaf;
3.46 - }
3.47 - }
3.48 + leaf = mirrorLeaf;
3.49 }
3.50 return new TruffleVariableImpl(truffleObj, name, type, dispVal, leaf);
3.51 } else {
4.1 --- a/debugger.jpda.truffle/src/org/netbeans/modules/debugger/jpda/truffle/vars/models/TruffleVariablesTableModel.java Fri Dec 12 14:41:01 2014 +0100
4.2 +++ b/debugger.jpda.truffle/src/org/netbeans/modules/debugger/jpda/truffle/vars/models/TruffleVariablesTableModel.java Fri Dec 12 16:18:31 2014 +0100
4.3 @@ -44,14 +44,19 @@
4.4
4.5 import org.netbeans.api.debugger.jpda.JPDADebugger;
4.6 import org.netbeans.api.debugger.jpda.JPDAWatch;
4.7 +import org.netbeans.api.debugger.jpda.Variable;
4.8 import org.netbeans.modules.debugger.jpda.truffle.access.TruffleStrataProvider;
4.9 import org.netbeans.modules.debugger.jpda.truffle.vars.TruffleVariable;
4.10 +import org.netbeans.modules.debugger.jpda.truffle.vars.TruffleVariableImpl;
4.11 import org.netbeans.spi.debugger.ContextProvider;
4.12 import org.netbeans.spi.debugger.DebuggerServiceRegistration;
4.13 import org.netbeans.spi.debugger.DebuggerServiceRegistrations;
4.14 import static org.netbeans.spi.debugger.ui.Constants.LOCALS_TO_STRING_COLUMN_ID;
4.15 import static org.netbeans.spi.debugger.ui.Constants.LOCALS_TYPE_COLUMN_ID;
4.16 import static org.netbeans.spi.debugger.ui.Constants.LOCALS_VALUE_COLUMN_ID;
4.17 +import static org.netbeans.spi.debugger.ui.Constants.WATCH_TO_STRING_COLUMN_ID;
4.18 +import static org.netbeans.spi.debugger.ui.Constants.WATCH_TYPE_COLUMN_ID;
4.19 +import static org.netbeans.spi.debugger.ui.Constants.WATCH_VALUE_COLUMN_ID;
4.20 import org.netbeans.spi.viewmodel.ModelListener;
4.21 import org.netbeans.spi.viewmodel.TableHTMLModel;
4.22 import org.netbeans.spi.viewmodel.TableHTMLModelFilter;
4.23 @@ -79,17 +84,29 @@
4.24
4.25 @Override
4.26 public Object getValueAt(TableModel original, Object node, String columnID) throws UnknownTypeException {
4.27 - /*if (node instanceof JPDAWatch && !isEnabled((JPDAWatch) node)) {
4.28 - return original.getValueAt(node, columnID);
4.29 - }*/
4.30 + TruffleVariable tv = null;
4.31 + if (node instanceof JPDAWatch) {// && !isEnabled((JPDAWatch) node)) {
4.32 + Object orig = original.getValueAt(node, columnID); // Call in any case because of error displaying
4.33 + if (node instanceof Variable) {
4.34 + tv = TruffleVariableImpl.get((Variable) node);
4.35 + }
4.36 + if (tv == null) {
4.37 + return orig;
4.38 + }
4.39 + }
4.40 if (node instanceof TruffleVariable) {
4.41 - TruffleVariable tv = (TruffleVariable) node;
4.42 + tv = (TruffleVariable) node;
4.43 + }
4.44 + if (tv != null) {
4.45 switch (columnID) {
4.46 case LOCALS_TYPE_COLUMN_ID:
4.47 + case WATCH_TYPE_COLUMN_ID:
4.48 return tv.getType();
4.49 case LOCALS_VALUE_COLUMN_ID:
4.50 + case WATCH_VALUE_COLUMN_ID:
4.51 return tv.getValue();
4.52 case LOCALS_TO_STRING_COLUMN_ID:
4.53 + case WATCH_TO_STRING_COLUMN_ID:
4.54 Object var = tv.getValue();
4.55 return String.valueOf(var);
4.56 }
5.1 --- a/debugger.jpda.truffle/src/org/netbeans/modules/debugger/jpda/truffle/vars/tooltip/ToolTipAnnotation.java Fri Dec 12 14:41:01 2014 +0100
5.2 +++ b/debugger.jpda.truffle/src/org/netbeans/modules/debugger/jpda/truffle/vars/tooltip/ToolTipAnnotation.java Fri Dec 12 16:18:31 2014 +0100
5.3 @@ -61,6 +61,7 @@
5.4 import org.netbeans.api.debugger.jpda.Variable;
5.5 import org.netbeans.modules.debugger.jpda.truffle.access.TruffleEval;
5.6 import org.netbeans.modules.debugger.jpda.truffle.access.TruffleStrataProvider;
5.7 +import org.netbeans.modules.debugger.jpda.truffle.vars.TruffleVariableImpl;
5.8 import org.netbeans.spi.debugger.ui.EditorContextDispatcher;
5.9 import org.openide.cookies.EditorCookie;
5.10 import org.openide.loaders.DataObject;
5.11 @@ -200,7 +201,18 @@
5.12 }
5.13 toolTipText = expression + " = " + DebuggerSupport.getVarValue(d, result);
5.14 */
5.15 - toolTipText = expression + " = " + TruffleEval.evaluate(d, expression).getValue();
5.16 + Variable result = TruffleEval.evaluate(d, expression);
5.17 + if (result == null) {
5.18 + return ; // Something went wrong...
5.19 + }
5.20 + TruffleVariableImpl tv = TruffleVariableImpl.get(result);
5.21 + String displayVal;
5.22 + if (tv != null) {
5.23 + displayVal = tv.getDisplayValue();
5.24 + } else {
5.25 + displayVal = result.getValue();
5.26 + }
5.27 + toolTipText = expression + " = " + displayVal;
5.28 } catch (InvalidExpressionException ex) {
5.29 toolTipText = expression + " = >" + ex.getMessage () + "<";
5.30 }
6.1 --- a/debugger.jpda.truffle/truffle_backend/JPDATruffleBackend/src/org/netbeans/modules/debugger/jpda/backend/truffle/JPDATruffleAccessor.java Fri Dec 12 14:41:01 2014 +0100
6.2 +++ b/debugger.jpda.truffle/truffle_backend/JPDATruffleBackend/src/org/netbeans/modules/debugger/jpda/backend/truffle/JPDATruffleAccessor.java Fri Dec 12 16:18:31 2014 +0100
6.3 @@ -335,7 +335,7 @@
6.4 ((Breakpoint) br).dispose();
6.5 }
6.6
6.7 - static String evaluate(String expression) {
6.8 + static String evaluateToStr(String expression) {
6.9 //System.err.println("evaluate("+expression+")");
6.10 final Source source = Source.fromText(expression, "EVAL");
6.11 Object value = debugManager.eval(source);
6.12 @@ -349,6 +349,21 @@
6.13 return strValue;
6.14 }
6.15
6.16 + static Object evaluate(String expression) {
6.17 + //System.err.println("evaluate("+expression+")");
6.18 + final Source source = Source.fromText(expression, "EVAL");
6.19 + Object value = debugManager.eval(source);
6.20 + //System.err.println(" value = "+value);
6.21 + if (value == null) {
6.22 + return null;
6.23 + }
6.24 + ExecutionContext context = debugManager.getContext();
6.25 + Visualizer visualizer = context.getVisualizer();
6.26 + String strValue = visualizer.displayValue(context, value);
6.27 + TruffleObject to = new TruffleObject(context, strValue, value);
6.28 + return to;
6.29 + }
6.30 +
6.31 static Object evaluate(String expression, Object frameInstance) {
6.32 FrameInstance fi = (FrameInstance) frameInstance;
6.33 MaterializedFrame frame = fi.getFrame(FrameInstance.FrameAccess.MATERIALIZE, true).materialize();
7.1 --- a/debugger.jpda.truffle/truffle_backend/JPDATruffleBackend/src/org/netbeans/modules/debugger/jpda/backend/truffle/TruffleObject.java Fri Dec 12 14:41:01 2014 +0100
7.2 +++ b/debugger.jpda.truffle/truffle_backend/JPDATruffleBackend/src/org/netbeans/modules/debugger/jpda/backend/truffle/TruffleObject.java Fri Dec 12 16:18:31 2014 +0100
7.3 @@ -35,6 +35,8 @@
7.4 this.displayValue = context.getVisualizer().displayValue(context, object);
7.5 if (object instanceof String) {
7.6 this.type = String.class.getSimpleName();
7.7 + } else if (object instanceof Number) {
7.8 + this.type = object.getClass().getSimpleName();
7.9 } else {
7.10 this.type = FrameSlotKind.Object.name();
7.11 }