From 4a87d7be700b148cc41ed59a000ae477ce3b3072 Mon Sep 17 00:00:00 2001 From: Jonah Graham Date: Wed, 25 Oct 2023 15:27:11 -0400 Subject: [PATCH] Fix disassembly view when view is reset The view can be reset in a couple of ways, by changing debug context or manually refreshing. With this change in Platform https://github.com/eclipse-platform/eclipse.platform.ui/pull/963 the CDT violation of the API aronud resetting state of the document was exposed. Therefore the solution is to instead of trying to reset the state of the existing document, create a new one when the view is reset. Fixes #603 --- .../internal/ui/disassembly/DisassemblyPart.java | 4 +++- .../ui/disassembly/model/DisassemblyDocument.java | 12 ------------ 2 files changed, 3 insertions(+), 13 deletions(-) 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 c01bff54e60..5151d33bb96 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 @@ -2126,8 +2126,10 @@ public abstract class DisassemblyPart extends WorkbenchPart fPCHistory.clear(); fPendingPCUpdates.clear(); fFile2Storage.clear(); - fDocument.clear(); + var oldDocument = fDocument; + fDocument = createDocument(); fViewer.setDocument(fDocument, new AnnotationModel()); + oldDocument.dispose(); if (fDebugSessionId != null) { attachBreakpointsAnnotationModel(); attachExtendedPCAnnotationModel(); 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 2aad29302c5..400aa18839f 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 @@ -33,14 +33,12 @@ import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyDocument; import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.LabelPosition; import org.eclipse.cdt.dsf.debug.internal.ui.disassembly.SourcePosition; 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.core.runtime.IPath; import org.eclipse.core.runtime.Path; 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.DocumentRewriteSession; import org.eclipse.jface.text.DocumentRewriteSessionType; import org.eclipse.jface.text.IDocument; @@ -129,16 +127,6 @@ public class DisassemblyDocument extends REDDocument implements IDisassemblyDocu fInvalidSource.clear(); } - /** - * Clears all content and state. - */ - public void clear() { - dispose(); - setTextStore(new REDTextStore()); - setLineTracker(new DefaultLineTracker()); - completeInitialization(); - } - public AddressRangePosition[] getInvalidAddressRanges() { assert isGuiThread(); return fInvalidAddressRanges.toArray(new AddressRangePosition[fInvalidAddressRanges.size()]);