diff --git a/debug/org.eclipse.cdt.debug.mi.core/ChangeLog b/debug/org.eclipse.cdt.debug.mi.core/ChangeLog index 3344c46928a..4b5e2bfd0b3 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/ChangeLog +++ b/debug/org.eclipse.cdt.debug.mi.core/ChangeLog @@ -1,3 +1,9 @@ +2004-11-19 Alain Magloire + Protect agains possible NPE. + * cdi/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java + * cdi/org/eclipse/cdt/debug/mi/core/cdi/SourceManager.java + * cdi/org/eclipse/cdt/debug/mi/core/cdi/model/VariableDescriptor.java + 2004-11-19 Alain Magloire Use the qualified name when creating a register. Destroy the corresponding gdb variable on register's disposal. diff --git a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java index ff5cf4278a7..5bd4deab417 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java +++ b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java @@ -253,16 +253,6 @@ public class RegisterManager extends Manager { return new Register[0]; } -// private Register getRegister(RegisterDescriptor regDesc) throws CDIException { -// Register[] regs = getRegisters((Target)regDesc.getTarget()); -// for (int i = 0; i < regs.length; i++) { -// if (regDesc.getName().equals(regs[i].getName())) { -// return regs[i]; -// } -// } -// return null; -// } - /** * Return the Element with this thread/stackframe, and with this name. * null is return if the element is not in the cache. diff --git a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/SourceManager.java b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/SourceManager.java index 135306480e3..b95d2f9afc2 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/SourceManager.java +++ b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/SourceManager.java @@ -429,14 +429,19 @@ public class SourceManager extends Manager { public String getTypeNameFromVariable(StackFrame frame, String variable) throws CDIException { Target target = (Target)frame.getTarget(); - Thread currentThread = null; - StackFrame currentFrame = null; - if (frame != null) { - currentThread = (Thread)target.getCurrentThread(); - currentFrame = currentThread.getCurrentStackFrame(); - target.setCurrentThread(frame.getThread(), false); - ((Thread)frame.getThread()).setCurrentStackFrame(frame, false); + Thread currentThread = (Thread)target.getCurrentThread(); + StackFrame currentFrame = currentThread.getCurrentStackFrame(); + target.setCurrentThread(frame.getThread(), false); + ((Thread)frame.getThread()).setCurrentStackFrame(frame, false); + try { + return getTypeName(target, variable); + } finally { + target.setCurrentThread(currentThread, false); + currentThread.setCurrentStackFrame(currentFrame, false); } + } + + public String getTypeName(Target target, String variable) throws CDIException { try { MISession mi = target.getMISession(); CommandFactory factory = mi.getCommandFactory(); @@ -449,13 +454,6 @@ public class SourceManager extends Manager { return info.getType(); } catch (MIException e) { throw new MI2CDIException(e); - } finally { - if (currentThread != null) { - target.setCurrentThread(currentThread, false); - } - if (currentFrame != null) { - currentThread.setCurrentStackFrame(currentFrame, false); - } } } 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 fc9a1539388..3973231f282 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 @@ -284,7 +284,11 @@ public abstract class VariableDescriptor extends CObject implements ICDIVariable } Session session = (Session) target.getSession(); SourceManager sourceMgr = session.getSourceManager(); - fTypename = sourceMgr.getTypeNameFromVariable(frame, getQualifiedName()); + if (frame != null) { + fTypename = sourceMgr.getTypeNameFromVariable(frame, getQualifiedName()); + } else { + fTypename = sourceMgr.getTypeName(target, getQualifiedName()); + } } return fTypename; }