diff options
author | Mikhail Khodjaiants | 2010-06-24 17:28:17 +0000 |
---|---|---|
committer | Mikhail Khodjaiants | 2010-06-24 17:28:17 +0000 |
commit | 5a7c2c617eb8e9ea3a82a78f46ef3f2c44858d06 (patch) | |
tree | 5d890a5de3a8df8d32845013291d8c770705ac18 /dsf | |
parent | e930dca1e93e384e5f57736274aaf361daa15af1 (diff) | |
download | org.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')
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); +} |