From 0e2c6945bd21892e153eb8b25d27258feaf7a4f4 Mon Sep 17 00:00:00 2001 From: John Cortell Date: Wed, 23 Jul 2008 20:34:01 +0000 Subject: [PATCH] Fixed NPEs in code that is subject to dealing with a disposed frame. --- .../internal/core/model/DisassemblyBlock.java | 4 ++-- .../DisassemblyInstructionPointerAnnotation.java | 6 ++++-- .../ui/views/disassembly/DisassemblyView.java | 16 ++++++++++------ 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/DisassemblyBlock.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/DisassemblyBlock.java index f12afed8489..e6c2228a5a7 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/DisassemblyBlock.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/DisassemblyBlock.java @@ -122,8 +122,8 @@ public class DisassemblyBlock implements IDisassemblyBlock, IAdaptable { return false; if ( fStartAddress == null || fEndAddress == null ) return false; - IAddress address = frame.getAddress(); - return (address.compareTo( fStartAddress ) >= 0 && address.compareTo( fEndAddress ) <= 0); + IAddress address = frame.getAddress(); // will return null if frame was disposed + return (address != null && address.compareTo( fStartAddress ) >= 0 && address.compareTo( fEndAddress ) <= 0); } /* diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/disassembly/DisassemblyInstructionPointerAnnotation.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/disassembly/DisassemblyInstructionPointerAnnotation.java index 7fdd28b6c22..9864186687b 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/disassembly/DisassemblyInstructionPointerAnnotation.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/disassembly/DisassemblyInstructionPointerAnnotation.java @@ -64,8 +64,10 @@ public class DisassemblyInstructionPointerAnnotation extends Annotation { IDisassembly disassembly = getDisassembly( frame ); hashCode = 37*hashCode + (( disassembly != null ) ? disassembly.hashCode() : 0); if ( frame != null ) { - IAddress address = frame.getAddress(); - hashCode = 37*hashCode + address.hashCode(); + IAddress address = frame.getAddress(); // will return null if frame has been disposed + if (address != null) { + hashCode = 37*hashCode + address.hashCode(); + } } return hashCode; } diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/disassembly/DisassemblyView.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/disassembly/DisassemblyView.java index e3e31cf5e86..8cae1f1b650 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/disassembly/DisassemblyView.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/disassembly/DisassemblyView.java @@ -14,6 +14,7 @@ import java.util.HashMap; import java.util.Iterator; import java.util.Map; +import org.eclipse.cdt.core.IAddress; import org.eclipse.cdt.debug.core.CDebugCorePlugin; import org.eclipse.cdt.debug.core.ICDebugConstants; import org.eclipse.cdt.debug.core.model.ICStackFrame; @@ -587,12 +588,15 @@ public class DisassemblyView extends AbstractDebugEventHandlerView */ private IRegion getLineInformation( ICStackFrame frame, IEditorInput input ) { if ( input instanceof DisassemblyEditorInput ) { - int line = ((DisassemblyEditorInput)input).getInstructionLine( frame.getAddress() ); - if ( line > 0 ) { - try { - return getSourceViewer().getDocument().getLineInformation( --line ); - } - catch( BadLocationException e1 ) { + final IAddress address = frame.getAddress(); // will return null if frame has been disposed + if (address != null) { + int line = ((DisassemblyEditorInput)input).getInstructionLine( address ); + if ( line > 0 ) { + try { + return getSourceViewer().getDocument().getLineInformation( --line ); + } + catch( BadLocationException e1 ) { + } } } }