From 21a42a700dfc8ee5413d837a6d93c4c2484edefb Mon Sep 17 00:00:00 2001 From: Mikhail Khodjaiants Date: Tue, 5 Nov 2002 20:16:15 +0000 Subject: [PATCH] Added support of the 'Add Global Variables' action of the Expressions view. --- debug/org.eclipse.cdt.debug.core/ChangeLog | 6 ++ .../eclipse/cdt/debug/core/IExecFileInfo.java | 3 + .../cdt/debug/core/IGlobalVariable.java | 19 ++++++ .../internal/core/model/CDebugTarget.java | 61 +++++++++++++++++++ 4 files changed, 89 insertions(+) create mode 100644 debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/IGlobalVariable.java diff --git a/debug/org.eclipse.cdt.debug.core/ChangeLog b/debug/org.eclipse.cdt.debug.core/ChangeLog index f1ea97720ad..b4a887bcbf7 100644 --- a/debug/org.eclipse.cdt.debug.core/ChangeLog +++ b/debug/org.eclipse.cdt.debug.core/ChangeLog @@ -1,3 +1,9 @@ +2002-11-05 Mikhail Khodjaiants + Added support of the 'Add Global Variables' action of the Expressions view. + * IExecFileInfo.java + * IGlobalVariable.java + * CDebugTarget.java + 2002-11-03 Mikhail Khodjaiants Added support of the formatting actions of the Memory view. * IFormattedMemoryBlock.java diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/IExecFileInfo.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/IExecFileInfo.java index 0c905c0d767..a641ad65bd4 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/IExecFileInfo.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/IExecFileInfo.java @@ -3,6 +3,7 @@ * All Rights Reserved. * */ + package org.eclipse.cdt.debug.core; /** @@ -13,4 +14,6 @@ package org.eclipse.cdt.debug.core; public interface IExecFileInfo { public boolean isLittleEndian(); + + public IGlobalVariable[] getGlobals(); } diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/IGlobalVariable.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/IGlobalVariable.java new file mode 100644 index 00000000000..7f6aa84a90a --- /dev/null +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/IGlobalVariable.java @@ -0,0 +1,19 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.core; + +import org.eclipse.core.runtime.IPath; + +/** + * Enter type comment. + * + * @since: Nov 4, 2002 + */ +public interface IGlobalVariable +{ + String getName(); + IPath getPath(); +} diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java index 15945013985..9eccab09107 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java @@ -13,6 +13,7 @@ import java.util.List; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.IBinary; +import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICFile; import org.eclipse.cdt.debug.core.CDebugCorePlugin; import org.eclipse.cdt.debug.core.CDebugModel; @@ -26,6 +27,7 @@ import org.eclipse.cdt.debug.core.IDebuggerProcessSupport; import org.eclipse.cdt.debug.core.IExecFileInfo; import org.eclipse.cdt.debug.core.IFormattedMemoryBlock; import org.eclipse.cdt.debug.core.IFormattedMemoryRetrieval; +import org.eclipse.cdt.debug.core.IGlobalVariable; import org.eclipse.cdt.debug.core.IRestart; import org.eclipse.cdt.debug.core.IRunToLine; import org.eclipse.cdt.debug.core.IState; @@ -2010,4 +2012,63 @@ public class CDebugTarget extends CDebugElement { fExecFile = file; } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.IExecFileInfo#getGlobals() + */ + public IGlobalVariable[] getGlobals() + { + ArrayList list = new ArrayList(); + if ( getExecFile() != null && CoreModel.isBinary( getExecFile() ) ) + { + ICFile cFile = CCorePlugin.getDefault().getCoreModel().create( getExecFile() ); + if ( cFile instanceof IBinary ) + { + list.addAll( getCFileGlobals( cFile ) ); + } + } + return (IGlobalVariable[])list.toArray( new IGlobalVariable[list.size()] ); + } + + private List getCFileGlobals( ICFile file ) + { + ArrayList list = new ArrayList(); + ICElement[] elements = file.getChildren(); + for ( int i = 0; i < elements.length; ++i ) + { + if ( elements[i] instanceof org.eclipse.cdt.core.model.IVariable ) + { + list.add( createGlobalVariable( (org.eclipse.cdt.core.model.IVariable)elements[i] ) ); + } + else if ( elements[i] instanceof org.eclipse.cdt.core.model.ICFile ) + { + list.addAll( getCFileGlobals( (org.eclipse.cdt.core.model.ICFile)elements[i] ) ); + } + } + return list; + } + + private IGlobalVariable createGlobalVariable( final org.eclipse.cdt.core.model.IVariable var ) + { + return new IGlobalVariable() + { + public String getName() + { + return var.getElementName(); + } + + public IPath getPath() + { + IPath path = null; + if ( var.getParent() != null && var.getParent() instanceof ICFile ) + { + if ( !(var.getParent() instanceof IBinary) ) + { + path = ((ICFile)var.getParent()).getFile().getLocation(); + } + } + return path; + } + }; + } }