Skip to main content
aboutsummaryrefslogtreecommitdiffstats
path: root/dsf
diff options
context:
space:
mode:
authorMikhail Khodjaiants2010-06-24 17:28:17 +0000
committerMikhail Khodjaiants2010-06-24 17:28:17 +0000
commit5a7c2c617eb8e9ea3a82a78f46ef3f2c44858d06 (patch)
tree5d890a5de3a8df8d32845013291d8c770705ac18 /dsf
parente930dca1e93e384e5f57736274aaf361daa15af1 (diff)
downloadorg.eclipse.cdt-5a7c2c617eb8e9ea3a82a78f46ef3f2c44858d06.tar.gz
org.eclipse.cdt-5a7c2c617eb8e9ea3a82a78f46ef3f2c44858d06.tar.xz
org.eclipse.cdt-5a7c2c617eb8e9ea3a82a78f46ef3f2c44858d06.zip
Bug 315677 - [variables] Add "hasSubExpressions" method to IExpressions
Diffstat (limited to 'dsf')
-rw-r--r--dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/VariableVMNode.java48
-rw-r--r--dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/debug/service/IExpressions3.java47
2 files changed, 81 insertions, 14 deletions
diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/VariableVMNode.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/VariableVMNode.java
index e5430b708ae..af5da3bb96c 100644
--- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/VariableVMNode.java
+++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/VariableVMNode.java
@@ -38,6 +38,8 @@ import org.eclipse.cdt.dsf.debug.service.IExpressions.IExpressionDMContext;
import org.eclipse.cdt.dsf.debug.service.IExpressions.IExpressionDMData;
import org.eclipse.cdt.dsf.debug.service.IExpressions.IExpressionDMLocation;
import org.eclipse.cdt.dsf.debug.service.IExpressions2;
+import org.eclipse.cdt.dsf.debug.service.IExpressions3;
+import org.eclipse.cdt.dsf.debug.service.IExpressions3.IExpressionDMDataExtension;
import org.eclipse.cdt.dsf.debug.service.IFormattedValues;
import org.eclipse.cdt.dsf.debug.service.IMemory.IMemoryChangedEvent;
import org.eclipse.cdt.dsf.debug.service.IRunControl.ISuspendedDMEvent;
@@ -893,7 +895,7 @@ public class VariableVMNode extends AbstractExpressionVMNode
final IExpressionDMContext expressionDMC = findDmcInPath(update.getViewerInput(), update.getElementPath(), IExpressionDMContext.class);
- if ( expressionDMC != null ) {
+ if (expressionDMC != null) {
final IExpressions expressionService = getServicesTracker().getService(IExpressions.class);
if (expressionService == null) {
@@ -901,19 +903,37 @@ public class VariableVMNode extends AbstractExpressionVMNode
return;
}
- expressionService.getSubExpressionCount(
- expressionDMC,
- new ViewerDataRequestMonitor<Integer>(getExecutor(), update) {
- @Override
- public void handleCompleted() {
- if (!isSuccess()) {
- handleFailedUpdate(update);
- return;
- }
- update.setHasChilren(getData() > 0);
- update.done();
- }
- });
+ if (expressionService instanceof IExpressions3) {
+ ((IExpressions3)expressionService).getExpressionDataExtension(
+ expressionDMC,
+ new ViewerDataRequestMonitor<IExpressionDMDataExtension>(getExecutor(), update) {
+ @Override
+ protected void handleCompleted() {
+ if (!isSuccess()) {
+ handleFailedUpdate(update);
+ return;
+ }
+ IExpressionDMDataExtension data = getData();
+ update.setHasChilren(data.hasChildren());
+ update.done();
+ }
+ });
+ }
+ else {
+ expressionService.getSubExpressionCount(
+ expressionDMC,
+ new ViewerDataRequestMonitor<Integer>(getExecutor(), update) {
+ @Override
+ public void handleCompleted() {
+ if (!isSuccess()) {
+ handleFailedUpdate(update);
+ return;
+ }
+ update.setHasChilren(getData() > 0);
+ update.done();
+ }
+ });
+ }
}
else {
super.updateHasElementsInSessionThread(update);
diff --git a/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/debug/service/IExpressions3.java b/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/debug/service/IExpressions3.java
new file mode 100644
index 00000000000..d200b2d0e34
--- /dev/null
+++ b/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/debug/service/IExpressions3.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2010 CodeSourcery 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:
+ * CodeSourcery - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.cdt.dsf.debug.service;
+
+import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
+
+/**
+ * This interface extends the expressions service with support for
+ * model data extension requests.
+ *
+ * @since 2.2
+ */
+public interface IExpressions3 extends IExpressions2 {
+
+ /**
+ * The model data interface extension.
+ */
+ public interface IExpressionDMDataExtension extends IExpressionDMData {
+
+ /**
+ * @return Whether the expression has children.
+ */
+ boolean hasChildren();
+ }
+
+ /**
+ * Retrieves the expression data extension object for the given
+ * expression context(<tt>dmc</tt>).
+ *
+ * @param dmc
+ * The ExpressionDMC for the expression to be evaluated.
+ * @param rm
+ * The data request monitor that will contain the requested data
+ */
+ void getExpressionDataExtension(
+ IExpressionDMContext dmc,
+ DataRequestMonitor<IExpressionDMDataExtension> rm);
+}

Back to the top