From a32879bdc09b75f81e7678ef2b7c24c07959cd59 Mon Sep 17 00:00:00 2001 From: John Cortell Date: Mon, 22 Feb 2010 15:07:48 +0000 Subject: [PATCH] [248606] Add support for toggling watchpoints in the variables and expressions views. --- .../cdt/debug/internal/core/CRequest.java | 11 +++++++++++ .../internal/core/ICWatchpointTarget.java | 2 +- .../AddWatchpointOnVariableActionDelegate.java | 3 ++- .../ui/viewmodel/GdbVariableVMNode.java | 18 ++++++++++-------- 4 files changed, 24 insertions(+), 10 deletions(-) diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CRequest.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CRequest.java index 7b5c299743a..1d64a914177 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CRequest.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CRequest.java @@ -1,3 +1,14 @@ +/******************************************************************************* + * Copyright (c) 2010 Wind River Systems, Inc. and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Anton Leherbauer (Wind River Systems) - initial API and implementation + * Freescale Semiconductor - refactoring + *******************************************************************************/ package org.eclipse.cdt.debug.internal.core; import org.eclipse.core.runtime.IStatus; diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/ICWatchpointTarget.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/ICWatchpointTarget.java index 2f62f3e6fbe..61d9a2a0ba8 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/ICWatchpointTarget.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/ICWatchpointTarget.java @@ -25,7 +25,7 @@ public interface ICWatchpointTarget { /** IRequest object used in the asynchronous method {@link ICWatchpointTarget#getSize()} */ interface GetSizeRequest extends IRequest { - int getSize(); + int getSize(); // returns -1 if size not available void setSize(int size); }; diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/AddWatchpointOnVariableActionDelegate.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/AddWatchpointOnVariableActionDelegate.java index 80aa9f33a94..db1561de807 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/AddWatchpointOnVariableActionDelegate.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/AddWatchpointOnVariableActionDelegate.java @@ -53,7 +53,7 @@ public class AddWatchpointOnVariableActionDelegate extends AddWatchpointActionDe } private static class GetSizeRequest extends CRequest implements ICWatchpointTarget.GetSizeRequest { - int fSize; + int fSize = -1; public int getSize() { return fSize; } @@ -122,6 +122,7 @@ public class AddWatchpointOnVariableActionDelegate extends AddWatchpointActionDe * org.eclipse.jface.viewers.ISelection) */ public void selectionChanged(final IAction action, ISelection selection) { + fVar = null; if (selection == null || selection.isEmpty()) { action.setEnabled(false); return; diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/viewmodel/GdbVariableVMNode.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/viewmodel/GdbVariableVMNode.java index b05de8a1d2c..29737b08f98 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/viewmodel/GdbVariableVMNode.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/viewmodel/GdbVariableVMNode.java @@ -66,19 +66,23 @@ public class GdbVariableVMNode extends VariableVMNode { if (expressionService != null) { final DataRequestMonitor drm = new DataRequestMonitor(getSession().getExecutor(), null) { @Override - public void handleSuccess() { - request.setSize(getData().getSize()); + public void handleCompleted() { + if (isSuccess()) { + request.setSize(getData().getSize()); + } request.done(); } }; expressionService.getExpressionAddressData(exprDmc, drm); } + else { + request.done(); + } } }); } else { - request.setSize(-1); request.done(); } } @@ -104,24 +108,22 @@ public class GdbVariableVMNode extends VariableVMNode { assert getData().getSize() > 0; request.setCanCreate(true); } - else { - request.setCanCreate(false); - } request.done(); } }; expressionService.getExpressionAddressData(exprDmc, drm); } + else { + request.done(); + } } }); } else { - request.setCanCreate(false); request.done(); } } - }; /**