diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/cdi/model/ICDIVariableObject.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/cdi/model/ICDIVariableObject.java index 1ed5f597fac..646d25837f4 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/cdi/model/ICDIVariableObject.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/cdi/model/ICDIVariableObject.java @@ -70,4 +70,13 @@ public interface ICDIVariableObject extends ICDIObject { * @throws CDIException if this method fails. Reasons include: */ String getQualifiedName() throws CDIException; + + /** + * Returns true if the variable Object are the same, + * For example event if the name is the same because of + * casting this may return false; + * @return true if the same + */ + boolean equals(ICDIVariableObject varObject); + } 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 181ba86c82c..7093743d89a 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 @@ -164,6 +164,13 @@ public abstract class CVariable extends CDebugElement { return ( fVariableObject != null ) ? fVariableObject.getQualifiedName() : null; } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariableObject#equals(org.eclipse.cdt.debug.core.cdi.model.ICDIVariableObject) + */ + public boolean equals(ICDIVariableObject varObject) { + return super.equals(varObject); + } } class InternalVariable diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/VariableObject.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/VariableObject.java index 35b177a87ef..b78fa20db6c 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/VariableObject.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/VariableObject.java @@ -288,4 +288,35 @@ public class VariableObject extends CObject implements ICDIVariableObject { return qualifiedName; } + /** + * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariableObject#equals(ICDIVariableObject) + */ + public boolean equals(ICDIVariableObject varObj) { + if (varObj instanceof VariableObject) { + VariableObject var = (VariableObject) varObj; + if (var.getName().equals(getName()) + && var.getCastingArrayStart() == getCastingArrayStart() + && var.getCastingArrayEnd() == getCastingArrayEnd() + && ((var.getCastingType() == null && getCastingType() == null) + || (var.getCastingType() != null && getCastingType() != null && var.getCastingType().equals(getCastingType())))) { + ICDIStackFrame varFrame = null; + ICDIStackFrame ourFrame = null; + try { + varFrame = var.getStackFrame(); + ourFrame = getStackFrame(); + } catch (CDIException e) { + } + if (ourFrame == null && varFrame == null) { + return true; + } else if (varFrame != null && ourFrame != null && varFrame.equals(ourFrame)) { + if (var.getStackDepth() == getStackDepth()) { + if (var.getPosition() == getPosition()) { + return true; + } + } + } + } + } + return super.equals(varObj); + } }