From 2475ef96798a166b6444469adbc025e9ffb3671f Mon Sep 17 00:00:00 2001 From: Alain Magloire Date: Thu, 4 Nov 2004 02:52:19 +0000 Subject: [PATCH] 2004-11-03 Alain Magloire Partial fix for 77435 * cdi/org/eclipse/cdt/debug/mi/core/cdi/VariableManager.java * cdi/org/eclipse/cdt/debug/mi/core/cdi/model/VariableDescriptor.java --- debug/org.eclipse.cdt.debug.mi.core/ChangeLog | 5 ++ .../debug/mi/core/cdi/VariableManager.java | 18 +++---- .../mi/core/cdi/model/VariableDescriptor.java | 48 ++++++++++++++----- 3 files changed, 52 insertions(+), 19 deletions(-) diff --git a/debug/org.eclipse.cdt.debug.mi.core/ChangeLog b/debug/org.eclipse.cdt.debug.mi.core/ChangeLog index 9079641cd6b..3a6cfec68bd 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/ChangeLog +++ b/debug/org.eclipse.cdt.debug.mi.core/ChangeLog @@ -1,3 +1,8 @@ +2004-11-03 Alain Magloire + Partial fix for 77435 + * cdi/org/eclipse/cdt/debug/mi/core/cdi/VariableManager.java + * cdi/org/eclipse/cdt/debug/mi/core/cdi/model/VariableDescriptor.java + 2004-11-02 Alain Magloire Refactor ICDIConfiguratio --> ICDISessionConfiguration and ICDITargetConfiguration * cdi/org/eclipse/cdt/debug/core/cdi/Session.java diff --git a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/VariableManager.java b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/VariableManager.java index 531c4d96250..bb922188919 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/VariableManager.java +++ b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/VariableManager.java @@ -125,10 +125,7 @@ public class VariableManager extends Manager { if (vars[i].getName().equals(name) && vars[i].getCastingArrayStart() == v.getCastingArrayStart() && vars[i].getCastingArrayEnd() == v.getCastingArrayEnd() - && ((vars[i].getCastingType() == null && v.getCastingType() == null) - || (vars[i].getCastingType() != null - && v.getCastingType() != null - && vars[i].getCastingType().equals(v.getCastingType())))) { + && VariableDescriptor.equalsCasting(vars[i], v)) { // check threads ICDIThread thread = vars[i].getThread(); if ((vthread == null && thread == null) || @@ -291,11 +288,16 @@ public class VariableManager extends Manager { throw new CDIException(CdiResources.getString("cdi.VariableManager.Unknown_variable_object")); //$NON-NLS-1$ } - String casting = varDesc.getCastingType(); - if (casting != null && casting.length() > 0) { - type = "(" + type + ")" + "(" + casting + " )"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ + String[] castings = varDesc.getCastingTypes(); + if (castings == null) { + castings = new String[] { type }; + } else { + String[] temp = new String[castings.length + 1]; + System.arraycopy(castings, 0, temp, 0, castings.length); + temp[castings.length] = type; + castings = temp; } - vo.setCastingType(type); + vo.setCastingTypes(castings); return vo; } diff --git a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/model/VariableDescriptor.java b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/model/VariableDescriptor.java index b6bec29240b..94076c74599 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/model/VariableDescriptor.java +++ b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/model/VariableDescriptor.java @@ -33,7 +33,7 @@ import org.eclipse.cdt.debug.mi.core.cdi.CdiResources; public abstract class VariableDescriptor extends CObject implements ICDIVariableDescriptor { // Casting info. - String castingType; + String[] castingTypes; int castingIndex; int castingLength; @@ -68,7 +68,7 @@ public abstract class VariableDescriptor extends CObject implements ICDIVariable stackdepth = desc.getStackDepth(); castingIndex = desc.getCastingArrayStart(); castingLength = desc.getCastingArrayEnd(); - castingType = desc.getCastingType(); + castingTypes = desc.getCastingTypes(); } public VariableDescriptor(Target target, Thread thread, StackFrame stack, String n, String fn, int pos, int depth) { @@ -103,11 +103,11 @@ public abstract class VariableDescriptor extends CObject implements ICDIVariable return castingLength; } - public void setCastingType(String t) { - castingType = t; + public void setCastingTypes(String[] t) { + castingTypes = t; } - public String getCastingType() { - return castingType; + public String[] getCastingTypes() { + return castingTypes; } /** @@ -128,10 +128,22 @@ public abstract class VariableDescriptor extends CObject implements ICDIVariable buffer.append(')'); buffer.append('@').append(castingLength); fn = buffer.toString(); - } else if (castingType != null && castingType.length() > 0) { + } else if (castingTypes != null && castingTypes.length > 0) { StringBuffer buffer = new StringBuffer(); - buffer.append("((").append(castingType).append(')'); //$NON-NLS-1$ - buffer.append(fn).append(')'); + for (int i = 0; i < castingTypes.length; ++i) { + if (castingTypes[i] != null && castingTypes[i].length() > 0) { + if (buffer.length() == 0) { + buffer.append('(').append(castingTypes[i]).append(')'); + buffer.append(fn); + } else { + buffer.insert(0, '('); + buffer.append(')'); + StringBuffer b = new StringBuffer(); + b.append('(').append(castingTypes[i]).append(')'); + buffer.insert(0, b.toString()); + } + } + } fn = buffer.toString(); } return fn; @@ -277,6 +289,21 @@ public abstract class VariableDescriptor extends CObject implements ICDIVariable return qualifiedName; } + public static boolean equalsCasting(VariableDescriptor var1, VariableDescriptor var2) { + String[] castings1 = var1.getCastingTypes(); + String[] castings2 = var2.getCastingTypes(); + if (castings1 == null && castings2 == null) { + return true; + } else if (castings1 != null && castings2 != null && castings1.length == castings2.length) { + for (int i = 0; i < castings1.length; ++i) { + if (!castings1[i].equals(castings2[i])) { + return false; + } + } + return true; + } + return false; + } /** * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariableDescriptor#equals(ICDIVariableDescriptor) */ @@ -286,8 +313,7 @@ public abstract class VariableDescriptor extends CObject implements ICDIVariable if (desc.getName().equals(getName()) && desc.getCastingArrayStart() == getCastingArrayStart() && desc.getCastingArrayEnd() == getCastingArrayEnd() - && ((desc.getCastingType() == null && getCastingType() == null) - || (desc.getCastingType() != null && getCastingType() != null && desc.getCastingType().equals(getCastingType())))) { + && equalsCasting(desc, this)) { // Check the threads ICDIThread varThread = null;