From a295e9b86c09d3c7ee34321943d48510cb97c515 Mon Sep 17 00:00:00 2001 From: Mikhail Khodjaiants Date: Thu, 29 May 2003 19:18:51 +0000 Subject: [PATCH] Added new methods to ICVariable to vizualize arrays and structures based on the new CDI types. --- debug/org.eclipse.cdt.debug.core/ChangeLog | 6 +++ .../cdt/debug/core/model/ICVariable.java | 6 +++ .../debug/internal/core/model/CVariable.java | 47 +++++++++++++++++++ 3 files changed, 59 insertions(+) diff --git a/debug/org.eclipse.cdt.debug.core/ChangeLog b/debug/org.eclipse.cdt.debug.core/ChangeLog index 6daa36880eb..67835453649 100644 --- a/debug/org.eclipse.cdt.debug.core/ChangeLog +++ b/debug/org.eclipse.cdt.debug.core/ChangeLog @@ -1,3 +1,9 @@ +2003-05-29 Mikhail Khodjaiants + Added new methods to ICVariable to vizualize arrays and structures based + on the new CDI types. + * ICVariable.java + * CVariable.java + 2003-05-27 Mikhail Khodjaiants Check if the location of breakpoint is eligible for the target when setting, removing or changing the propeties. diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICVariable.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICVariable.java index 6f29b010317..20427483d03 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICVariable.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICVariable.java @@ -25,4 +25,10 @@ public interface ICVariable extends IVariable boolean isEditable(); boolean hasChildren(); + + boolean isArray(); + + int[] getArrayDimensions(); + + boolean isStructure(); } diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CVariable.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CVariable.java index 115c66610e5..85fa26b6201 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CVariable.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CVariable.java @@ -15,6 +15,10 @@ import org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame; import org.eclipse.cdt.debug.core.cdi.model.ICDIValue; import org.eclipse.cdt.debug.core.cdi.model.ICDIVariable; import org.eclipse.cdt.debug.core.cdi.model.ICDIVariableObject; +import org.eclipse.cdt.debug.core.cdi.model.type.ICDIArrayType; +import org.eclipse.cdt.debug.core.cdi.model.type.ICDIDerivedType; +import org.eclipse.cdt.debug.core.cdi.model.type.ICDIStructType; +import org.eclipse.cdt.debug.core.cdi.model.type.ICDIType; import org.eclipse.cdt.debug.core.model.ICValue; import org.eclipse.cdt.debug.core.model.ICVariable; import org.eclipse.cdt.debug.core.model.ICastToArray; @@ -615,4 +619,47 @@ public abstract class CVariable extends CDebugElement { return isEditable() && hasChildren(); } + + public boolean isArray() + { + return ( getType() instanceof ICDIArrayType ); + } + + public int[] getArrayDimensions() + { + int length = 0; + ICDIType type = getType(); + while( type instanceof ICDIArrayType ) + { + ++length; + type = ( type instanceof ICDIDerivedType ) ? ((ICDIDerivedType)type).getComponentType() : null; + } + int[] dims = new int[length]; + type = getType(); + for ( int i = length; i > 0; --i ) + { + dims[i - 1] = ((ICDIArrayType)type).getDimension(); + type = ((ICDIDerivedType)type).getComponentType(); + } + return dims; + } + + public boolean isStructure() + { + return ( getType() instanceof ICDIStructType ); + } + + private ICDIType getType() + { + ICDIType type = null; + try + { + if ( getCDIVariable() != null ) + type = getCDIVariable().getType(); + } + catch( CDIException e ) + { + } + return type; + } }