diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java index 1e642c5b4d5..d0abb70b86e 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java @@ -2493,10 +2493,8 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem fPCHistory.clear(); fPendingPCUpdates.clear(); fFile2Storage.clear(); - DisassemblyDocument doc= fDocument; - fDocument = createDocument(); + fDocument.clear(); fViewer.setDocument(fDocument, new AnnotationModel()); - doc.dispose(); if (fDebugSessionId != null) { attachBreakpointsAnnotationModel(); fDocument.insertInvalidAddressRange(0, 0, fStartAddress, fEndAddress); diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/model/DisassemblyDocument.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/model/DisassemblyDocument.java index 29e9d29dcb8..29c0c2329a6 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/model/DisassemblyDocument.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/model/DisassemblyDocument.java @@ -19,10 +19,12 @@ import java.util.List; import java.util.Map; import org.eclipse.cdt.dsf.debug.internal.ui.disassembly.text.REDDocument; +import org.eclipse.cdt.dsf.debug.internal.ui.disassembly.text.REDTextStore; import org.eclipse.core.resources.IStorage; import org.eclipse.debug.core.sourcelookup.containers.LocalFileStorage; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.BadPositionCategoryException; +import org.eclipse.jface.text.DefaultLineTracker; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.Position; @@ -39,9 +41,9 @@ public class DisassemblyDocument extends REDDocument { private final static boolean DEBUG = false; - public ArrayList fInvalidAddressRanges = new ArrayList(); - public ArrayList fInvalidSource = new ArrayList(); - private Map fFileInfoMap = new HashMap(); + private final ArrayList fInvalidAddressRanges = new ArrayList(); + private final ArrayList fInvalidSource = new ArrayList(); + private final Map fFileInfoMap = new HashMap(); private int fMaxFunctionLength = 0; @@ -73,6 +75,8 @@ public class DisassemblyDocument extends REDDocument { addPositionCategory(CATEGORY_LABELS); setRadix(16); setShowRadixPrefix(false); + fNumberOfInstructions = 0; + fMeanSizeOfInstructions = 4; } /** @@ -81,16 +85,26 @@ public class DisassemblyDocument extends REDDocument { @Override public void dispose() { super.dispose(); - if (fFileInfoMap != null) { - // cleanup source info - for (Iterator iter = fFileInfoMap.values().iterator(); iter.hasNext();) { - SourceFileInfo fi = iter.next(); - fi.dispose(); - } - fFileInfoMap = null; + // cleanup source info + for (Iterator iter = fFileInfoMap.values().iterator(); iter.hasNext();) { + SourceFileInfo fi = iter.next(); + fi.dispose(); } + fFileInfoMap.clear(); + fInvalidAddressRanges.clear(); + fInvalidSource.clear(); } + /** + * Clears all content and state. + */ + public void clear() { + dispose(); + setTextStore(new REDTextStore()); + setLineTracker(new DefaultLineTracker()); + completeInitialization(); + } + public List getInvalidAddressRanges() { return fInvalidAddressRanges; }