diff options
Diffstat (limited to 'dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java')
-rw-r--r-- | dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java | 468 |
1 files changed, 208 insertions, 260 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 b90e8e99e9a..275588b02d8 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 @@ -38,6 +38,12 @@ import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyBackend; import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyDocument; import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback; import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.LabelPosition; +import org.eclipse.cdt.debug.internal.ui.preferences.StringSetSerializer; +import org.eclipse.cdt.debug.ui.disassembly.rulers.IColumnSupport; +import org.eclipse.cdt.debug.ui.disassembly.rulers.IContributedRulerColumn; +import org.eclipse.cdt.debug.ui.disassembly.rulers.RulerColumnDescriptor; +import org.eclipse.cdt.debug.ui.disassembly.rulers.RulerColumnPreferenceAdapter; +import org.eclipse.cdt.debug.ui.disassembly.rulers.RulerColumnRegistry; import org.eclipse.cdt.dsf.debug.internal.ui.disassembly.actions.AbstractDisassemblyAction; import org.eclipse.cdt.dsf.debug.internal.ui.disassembly.actions.ActionGotoAddress; import org.eclipse.cdt.dsf.debug.internal.ui.disassembly.actions.ActionGotoProgramCounter; @@ -50,6 +56,8 @@ import org.eclipse.cdt.dsf.debug.internal.ui.disassembly.model.DisassemblyDocume import org.eclipse.cdt.dsf.debug.internal.ui.disassembly.model.SourceFileInfo; import org.eclipse.cdt.dsf.debug.internal.ui.disassembly.preferences.DisassemblyPreferenceConstants; import org.eclipse.cdt.dsf.debug.internal.ui.disassembly.presentation.DisassemblyIPAnnotation; +import org.eclipse.cdt.dsf.debug.internal.ui.disassembly.provisional.DisassemblyRulerColumn; +import org.eclipse.cdt.dsf.debug.internal.ui.disassembly.provisional.DisassemblyViewer; import org.eclipse.cdt.dsf.debug.internal.ui.disassembly.provisional.IDisassemblyPart; import org.eclipse.cdt.dsf.debug.internal.ui.disassembly.util.HSL; import org.eclipse.cdt.dsf.internal.ui.DsfUIPlugin; @@ -125,6 +133,7 @@ import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyleRange; import org.eclipse.swt.custom.StyledText; +import org.eclipse.swt.custom.VerifyKeyListener; import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.DragSource; import org.eclipse.swt.dnd.DropTarget; @@ -133,6 +142,7 @@ import org.eclipse.swt.dnd.TextTransfer; import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; +import org.eclipse.swt.events.VerifyEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; @@ -171,6 +181,9 @@ import org.eclipse.ui.texteditor.IUpdate; import org.eclipse.ui.texteditor.MarkerAnnotationPreferences; import org.eclipse.ui.texteditor.SimpleMarkerAnnotation; import org.eclipse.ui.texteditor.SourceViewerDecorationSupport; + +import com.ibm.icu.text.MessageFormat; + /** * DisassemblyPart */ @@ -206,17 +219,19 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem public static final String KEY_BINDING_CONTEXT_DISASSEMBLY = "org.eclipse.cdt.dsf.debug.ui.disassembly.context"; //$NON-NLS-1$ + /** + * A named preference that controls the visible ruler column contributions. + */ + public static final String PREFERENCE_RULER_CONTRIBUTIONS= "rulerContributions"; //$NON-NLS-1$ + protected DisassemblyViewer fViewer; protected AbstractDisassemblyAction fActionGotoPC; protected AbstractDisassemblyAction fActionGotoAddress; protected AbstractDisassemblyAction fActionToggleSource; - private AbstractDisassemblyAction fActionToggleFunctionColumn; - private AbstractDisassemblyAction fActionToggleOpcodeColumn; protected AbstractDisassemblyAction fActionToggleSymbols; protected AbstractDisassemblyAction fActionRefreshView; protected Action fActionOpenPreferences; - private AbstractDisassemblyAction fActionToggleAddressColumn; private AbstractDisassemblyAction fActionToggleBreakpointEnablement; protected DisassemblyDocument fDocument; @@ -244,10 +259,6 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem private TextViewerDragAdapter fDragSourceAdapter; private DisassemblyDropAdapter fDropTargetAdapter; - private FunctionOffsetRulerColumn fFunctionOffsetRulerColumn; - private OpcodeRulerColumn fOpcodeRulerColumn; - private AddressRulerColumn fAddressRulerColumn; - private BigInteger fStartAddress; private BigInteger fEndAddress; private int fAddressSize= 32; @@ -272,8 +283,6 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem private List<Action> fSelectionActions = new ArrayList<Action>(); private List<AbstractDisassemblyAction> fStateDependentActions = new ArrayList<AbstractDisassemblyAction>(); private boolean fShowSource; - private boolean fShowFunctionOffsets; - private boolean fShowOpcodes; private boolean fShowSymbols; private Map<String, Object> fFile2Storage = new HashMap<String, Object>(); private boolean fShowDisassembly = true; @@ -294,26 +303,34 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem protected IPartListener2 fPartListener = new IPartListener2() { + @Override public void partActivated(IWorkbenchPartReference partRef) { } + @Override public void partBroughtToTop(IWorkbenchPartReference partRef) { } + @Override public void partClosed(IWorkbenchPartReference partRef) { } + @Override public void partDeactivated(IWorkbenchPartReference partRef) { } + @Override public void partOpened(IWorkbenchPartReference partRef) { } + @Override public void partHidden(IWorkbenchPartReference partRef) { if (partRef.getPart(false) == DisassemblyPart.this) { setActive(false); } } + @Override public void partVisible(IWorkbenchPartReference partRef) { if (partRef.getPart(false) == DisassemblyPart.this) { setActive(true); } } + @Override public void partInputChanged(IWorkbenchPartReference partRef) { } }; @@ -338,6 +355,8 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem private IDebugContextListener fDebugContextListener; + private IColumnSupport fColumnSupport; + private final class SyncActiveDebugContextAction extends Action { public SyncActiveDebugContextAction() { setChecked(DisassemblyPart.this.isSyncWithActiveDebugContext()); @@ -380,54 +399,6 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem } } - private final class ActionToggleAddressColumn extends AbstractDisassemblyAction { - ActionToggleAddressColumn () { - super(DisassemblyPart.this); - setText(DisassemblyMessages.Disassembly_action_ShowAddresses_label); - } - @Override - public void run() { - IPreferenceStore store = DsfUIPlugin.getDefault().getPreferenceStore(); - store.setValue(DisassemblyPreferenceConstants.SHOW_ADDRESS_RULER, !isAddressRulerVisible()); - } - @Override - public void update() { - setChecked(isAddressRulerVisible()); - } - } - - private final class ActionToggleFunctionColumn extends AbstractDisassemblyAction { - ActionToggleFunctionColumn() { - super(DisassemblyPart.this); - setText(DisassemblyMessages.Disassembly_action_ShowFunctionOffsets_label); - } - @Override - public void run() { - IPreferenceStore store = DsfUIPlugin.getDefault().getPreferenceStore(); - store.setValue(DisassemblyPreferenceConstants.SHOW_FUNCTION_OFFSETS, !isFunctionOffsetsRulerVisible()); - } - @Override - public void update() { - setChecked(isFunctionOffsetsRulerVisible()); - } - } - - private final class ActionToggleOpcodeColumn extends AbstractDisassemblyAction { - ActionToggleOpcodeColumn() { - super(DisassemblyPart.this); - setText(DisassemblyMessages.Disassembly_action_ShowOpcode_label); - } - @Override - public void run() { - IPreferenceStore store = DsfUIPlugin.getDefault().getPreferenceStore(); - store.setValue(DisassemblyPreferenceConstants.SHOW_CODE_BYTES, !isOpcodeRulerVisible()); - } - @Override - public void update() { - setChecked(isOpcodeRulerVisible()); - } - } - private final class ActionToggleBreakpointEnablement extends AbstractDisassemblyAction { private IBreakpoint fBreakpoint; public ActionToggleBreakpointEnablement() { @@ -511,6 +482,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* * @see IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent) */ + @Override public void propertyChange(PropertyChangeEvent event) { handlePreferenceStoreChanged(event); } @@ -537,8 +509,6 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem else fEndAddress = new BigInteger(endAddressString, 16); fShowSource = prefs.getBoolean(DisassemblyPreferenceConstants.SHOW_SOURCE); - fShowFunctionOffsets = prefs.getBoolean(DisassemblyPreferenceConstants.SHOW_FUNCTION_OFFSETS); - fShowOpcodes = prefs.getBoolean(DisassemblyPreferenceConstants.SHOW_CODE_BYTES); fShowSymbols = prefs.getBoolean(DisassemblyPreferenceConstants.SHOW_SYMBOLS); fUpdateBeforeFocus = !prefs.getBoolean(DisassemblyPreferenceConstants.AVOID_READ_BEFORE_PC); fPCHistorySizeMax = prefs.getInt(DisassemblyPreferenceConstants.PC_HISTORY_SIZE); @@ -571,13 +541,76 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem return fViewer != null ? fViewer.getTextWidget() : null; } else if (IGotoMarker.class.equals(required)) { return new IGotoMarker() { + @Override public void gotoMarker(IMarker marker) { DisassemblyPart.this.gotoMarker(marker); }}; + } else if (IColumnSupport.class.equals(required)) { + if (fColumnSupport == null) + fColumnSupport= createColumnSupport(); + return fColumnSupport; } + return super.getAdapter(required); } + /** + * Adds "show" actions for all contributed rulers that support it. + * + * @param menu the ruler context menu + */ + private void addRulerContributionActions(IMenuManager menu) { + // store directly in generic editor preferences + final IColumnSupport support= (IColumnSupport) getAdapter(IColumnSupport.class); + IPreferenceStore store= DsfUIPlugin.getDefault().getPreferenceStore(); + final RulerColumnPreferenceAdapter adapter= new RulerColumnPreferenceAdapter(store, PREFERENCE_RULER_CONTRIBUTIONS); + List<RulerColumnDescriptor> descriptors= RulerColumnRegistry.getDefault().getColumnDescriptors(); + for (final RulerColumnDescriptor descriptor : descriptors) { + if (!descriptor.isIncludedInMenu() || !support.isColumnSupported(descriptor)) + continue; + final boolean isVisible= support.isColumnVisible(descriptor); + IAction action= new Action(MessageFormat.format(DisassemblyMessages.DisassemblyPart_showRulerColumn_label, new Object[] {descriptor.getName()}), IAction.AS_CHECK_BOX) { + @Override + public void run() { + if (descriptor.isGlobal()) + // column state is modified via preference listener + adapter.setEnabled(descriptor, !isVisible); + else + // directly modify column for this editor instance + support.setColumnVisible(descriptor, !isVisible); + } + }; + action.setChecked(isVisible); + action.setImageDescriptor(descriptor.getIcon()); + menu.appendToGroup(ITextEditorActionConstants.GROUP_RULERS, action); + } + } + + /** + * Adds enabled ruler contributions to the vertical ruler. + * + * @param ruler the composite ruler to add contributions to + */ + protected void updateContributedRulerColumns(CompositeRuler ruler) { + IColumnSupport support= (IColumnSupport)getAdapter(IColumnSupport.class); + if (support == null) + return; + + RulerColumnPreferenceAdapter adapter= null; + if (fPreferenceStore != null) + adapter= new RulerColumnPreferenceAdapter(getPreferenceStore(), PREFERENCE_RULER_CONTRIBUTIONS); + + RulerColumnRegistry registry= RulerColumnRegistry.getDefault(); + List<RulerColumnDescriptor> descriptors= registry.getColumnDescriptors(); + for (RulerColumnDescriptor descriptor : descriptors) { + support.setColumnVisible(descriptor, adapter == null || adapter.isEnabled(descriptor)); + } + } + + protected IColumnSupport createColumnSupport() { + return new DisassemblyColumnSupport(this, RulerColumnRegistry.getDefault()); + } + private void setPreferenceStore(IPreferenceStore store) { if (fPreferenceStore != null) { fPreferenceStore.removePropertyChangeListener(fPropertyChangeListener); @@ -610,28 +643,6 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem if (getFontPropertyPreferenceKey().equals(property)) { initializeViewerFont(fViewer); - } else if (property.equals(DisassemblyPreferenceConstants.SHOW_ADDRESS_RULER)) { - fActionToggleAddressColumn.update(); - if (isAddressRulerVisible()) { - showAddressRuler(); - } else { - hideAddressRuler(); - } - } else if (property.equals(DisassemblyPreferenceConstants.ADDRESS_RADIX)) { - if (fAddressRulerColumn != null) { - hideAddressRuler(); - showAddressRuler(); - } - } else if (property.equals(DisassemblyPreferenceConstants.OPCODE_RADIX)) { - if (isOpcodeRulerVisible()) { - hideOpcodeRuler(); - showOpcodeRuler(); - } - } else if (property.equals(DisassemblyPreferenceConstants.SHOW_ADDRESS_RADIX)) { - if (fAddressRulerColumn != null) { - hideAddressRuler(); - showAddressRuler(); - } } else if (property.equals(DisassemblyPreferenceConstants.SHOW_SOURCE)) { boolean showSource = store.getBoolean(property); if (fShowSource == showSource) { @@ -648,22 +659,6 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem fShowSymbols = showSymbols; fActionToggleSymbols.update(); refreshView(10); - } else if (property.equals(DisassemblyPreferenceConstants.SHOW_FUNCTION_OFFSETS)) { - fShowFunctionOffsets = store.getBoolean(property); - fActionToggleFunctionColumn.update(); - if (isFunctionOffsetsRulerVisible()) { - showFunctionOffsetsRuler(); - } else { - hideFunctionOffsetsRuler(); - } - } else if (property.equals(DisassemblyPreferenceConstants.SHOW_CODE_BYTES)) { - fShowOpcodes = store.getBoolean(property); - fActionToggleOpcodeColumn.update(); - if (isOpcodeRulerVisible()) { - showOpcodeRuler(); - } else { - hideOpcodeRuler(); - } } else if (property.equals(DisassemblyPreferenceConstants.AVOID_READ_BEFORE_PC)) { fUpdateBeforeFocus = !store.getBoolean(property); updateVisibleArea(); @@ -676,7 +671,18 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem } } else if (property.equals(DisassemblyPreferenceConstants.PC_HISTORY_SIZE)) { fPCHistorySizeMax = store.getInt(property); + } else if (PREFERENCE_RULER_CONTRIBUTIONS.equals(property)) { + String[] difference= StringSetSerializer.getDifference((String) event.getOldValue(), (String) event.getNewValue()); + IColumnSupport support= (IColumnSupport) getAdapter(IColumnSupport.class); + for (int i= 0; i < difference.length; i++) { + RulerColumnDescriptor desc= RulerColumnRegistry.getDefault().getColumnDescriptor(difference[i]); + if (desc != null && support.isColumnSupported(desc)) { + boolean newState= !support.isColumnVisible(desc); + support.setColumnVisible(desc, newState); + } + } } + } /** @@ -691,7 +697,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem parent.setLayout(layout); fVerticalRuler = createVerticalRuler(); int styles = SWT.V_SCROLL | SWT.H_SCROLL | SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION; - fViewer = new DisassemblyViewer(this, parent, fVerticalRuler, getOverviewRuler(), true, styles); + fViewer = new DisassemblyViewer(parent, fVerticalRuler, getOverviewRuler(), true, styles); SourceViewerConfiguration sourceViewerConfig = new DisassemblyViewerConfiguration(this); fViewer.addTextPresentationListener(this); fViewer.configure(sourceViewerConfig); @@ -715,7 +721,21 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem hookContextMenu(); contributeToActionBars(); + fViewer.getTextWidget().addVerifyKeyListener(new VerifyKeyListener() { + @Override + public void verifyKey(VerifyEvent event) { + switch (event.keyCode) { + case SWT.PAGE_UP: + case SWT.PAGE_DOWN: + case SWT.ARROW_UP: + case SWT.ARROW_DOWN: + event.doit = !keyScroll(event.keyCode); + } + } + }); + fViewer.addSelectionChangedListener(new ISelectionChangedListener() { + @Override public void selectionChanged(SelectionChangedEvent event) { updateSelectionDependentActions(); } @@ -726,14 +746,9 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem fSourceColor = getSharedColors().getColor(new RGB(64, 0, 80)); fLabelColor = getSharedColors().getColor(new RGB(0, 0, 96)); - if (isAddressRulerVisible()) { - showAddressRuler(); - } - if (isFunctionOffsetsRulerVisible()) { - showFunctionOffsetsRuler(); - } - if (isOpcodeRulerVisible()) { - showOpcodeRuler(); + IVerticalRuler ruler= getVerticalRuler(); + if (ruler instanceof CompositeRuler) { + updateContributedRulerColumns((CompositeRuler) ruler); } initDragAndDrop(); @@ -756,7 +771,8 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem super.setSite(site); site.getPage().addPartListener(fPartListener); fDebugContextListener = new IDebugContextListener() { - public void debugContextChanged(DebugContextEvent event) { + @Override + public void debugContextChanged(DebugContextEvent event) { if ((event.getFlags() & DebugContextEvent.ACTIVATED) != 0) { updateDebugContext(); } @@ -823,6 +839,10 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem } fPropertyChangeListener = null; } + if (fColumnSupport != null) { + fColumnSupport.dispose(); + fColumnSupport= null; + } fDocument.dispose(); fDocument = null; @@ -1043,44 +1063,6 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem } /** - * Creates a new address ruler column that is appropriately initialized. - * - * @return the created line number column - */ - protected IVerticalRulerColumn createAddressRulerColumn() { - fAddressRulerColumn= new AddressRulerColumn(); - initializeRulerColumn(fAddressRulerColumn, DisassemblyPreferenceConstants.ADDRESS_COLOR); - IPreferenceStore prefs = getPreferenceStore(); - fAddressRulerColumn.setRadix(prefs.getInt(DisassemblyPreferenceConstants.ADDRESS_RADIX)); - fAddressRulerColumn.setShowRadixPrefix(prefs.getBoolean(DisassemblyPreferenceConstants.SHOW_ADDRESS_RADIX)); - return fAddressRulerColumn; - } - - /** - * Creates a new ruler column that is appropriately initialized. - * - * @return the created line number column - */ - protected IVerticalRulerColumn createFunctionOffsetsRulerColumn() { - fFunctionOffsetRulerColumn= new FunctionOffsetRulerColumn(); - - initializeRulerColumn(fFunctionOffsetRulerColumn, DisassemblyPreferenceConstants.FUNCTION_OFFSETS_COLOR); - - return fFunctionOffsetRulerColumn; - } - - protected IVerticalRulerColumn createOpcodeRulerColumn() { - fOpcodeRulerColumn= new OpcodeRulerColumn(); - - initializeRulerColumn(fOpcodeRulerColumn, DisassemblyPreferenceConstants.CODE_BYTES_COLOR); - - IPreferenceStore prefs = getPreferenceStore(); - fOpcodeRulerColumn.setRadix(prefs.getInt(DisassemblyPreferenceConstants.OPCODE_RADIX)); - - return fOpcodeRulerColumn; - } - - /** * Initializes the given address ruler column from the preference store. * * @param rulerColumn the ruler column to be initialized @@ -1128,99 +1110,6 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem return ruler; } - private boolean isAddressRulerVisible() { - return getPreferenceStore().getBoolean(DisassemblyPreferenceConstants.SHOW_ADDRESS_RULER); - } - - /** - * Shows the address ruler column. - */ - private void showAddressRuler() { - if (fAddressRulerColumn == null) { - IVerticalRuler v= getVerticalRuler(); - if (v instanceof CompositeRuler) { - CompositeRuler c= (CompositeRuler) v; - c.addDecorator(1, createAddressRulerColumn()); - } - } - } - - /** - * Hides the address ruler column. - */ - private void hideAddressRuler() { - if (fAddressRulerColumn != null) { - IVerticalRuler v= getVerticalRuler(); - if (v instanceof CompositeRuler) { - CompositeRuler c= (CompositeRuler) v; - c.removeDecorator(fAddressRulerColumn); - } - fAddressRulerColumn = null; - } - } - - private boolean isFunctionOffsetsRulerVisible() { - return fShowFunctionOffsets; - } - - private boolean isOpcodeRulerVisible() { - return fShowOpcodes; - } - - /** - * Shows the function offset ruler column. - */ - private void showFunctionOffsetsRuler() { - if (fFunctionOffsetRulerColumn == null) { - IVerticalRuler v= getVerticalRuler(); - if (v instanceof CompositeRuler) { - CompositeRuler c= (CompositeRuler) v; - c.addDecorator(3, createFunctionOffsetsRulerColumn()); - } - } - } - - /** - * Hides the function offset ruler column. - */ - private void hideFunctionOffsetsRuler() { - if (fFunctionOffsetRulerColumn != null) { - IVerticalRuler v= getVerticalRuler(); - if (v instanceof CompositeRuler) { - CompositeRuler c= (CompositeRuler) v; - c.removeDecorator(fFunctionOffsetRulerColumn); - } - fFunctionOffsetRulerColumn = null; - } - } - - /** - * Shows the opcode ruler column. - */ - private void showOpcodeRuler() { - if (fOpcodeRulerColumn == null) { - IVerticalRuler v= getVerticalRuler(); - if (v instanceof CompositeRuler) { - CompositeRuler c= (CompositeRuler) v; - c.addDecorator(2, createOpcodeRulerColumn()); - } - } - } - - /** - * Hides the opcode ruler column. - */ - private void hideOpcodeRuler() { - if (fOpcodeRulerColumn != null) { - IVerticalRuler v= getVerticalRuler(); - if (v instanceof CompositeRuler) { - CompositeRuler c= (CompositeRuler) v; - c.removeDecorator(fOpcodeRulerColumn); - } - fOpcodeRulerColumn = null; - } - } - /** * Returns the annotation access. * @@ -1246,6 +1135,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem MenuManager menuMgr = new MenuManager(id, id); menuMgr.setRemoveAllWhenShown(true); menuMgr.addMenuListener(new IMenuListener() { + @Override public void menuAboutToShow(IMenuManager manager) { DisassemblyPart.this.fillContextMenu(manager); } @@ -1260,6 +1150,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem MenuManager menuMgr = new MenuManager(id, id); menuMgr.setRemoveAllWhenShown(true); menuMgr.addMenuListener(new IMenuListener() { + @Override public void menuAboutToShow(IMenuManager manager) { DisassemblyPart.this.fillRulerContextMenu(manager); } @@ -1315,9 +1206,6 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem protected void fillRulerContextMenu(IMenuManager manager) { fActionToggleBreakpointEnablement.update(); - fActionToggleAddressColumn.update(); - fActionToggleOpcodeColumn.update(); - fActionToggleFunctionColumn.update(); manager.add(new GroupMarker("group.top")); // ICommonMenuConstants.GROUP_TOP //$NON-NLS-1$ manager.add(new Separator("group.breakpoints")); //$NON-NLS-1$ @@ -1327,9 +1215,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem manager.add(new GroupMarker(ITextEditorActionConstants.GROUP_RESTORE)); manager.add(new Separator("add")); //$NON-NLS-1$ manager.add(new Separator(ITextEditorActionConstants.GROUP_RULERS)); - manager.add(fActionToggleAddressColumn); - manager.add(fActionToggleOpcodeColumn); - manager.add(fActionToggleFunctionColumn); + addRulerContributionActions(manager); manager.add(new Separator(ITextEditorActionConstants.GROUP_REST)); for (Object listener : fRulerContextMenuListeners.getListeners()) @@ -1429,9 +1315,6 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem } }); fActionToggleBreakpointEnablement = new ActionToggleBreakpointEnablement(); - fActionToggleAddressColumn = new ActionToggleAddressColumn(); - fActionToggleOpcodeColumn = new ActionToggleOpcodeColumn(); - fActionToggleFunctionColumn = new ActionToggleFunctionColumn(); fActionToggleSymbols = new ActionToggleSymbols(); fActionRefreshView = new ActionRefreshView(); fSyncAction = new SyncActiveDebugContextAction(); @@ -1457,6 +1340,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* * @see org.eclipse.cdt.dsf.debug.internal.ui.disassembly.IDisassemblyPart#gotoProgramCounter() */ + @Override public final void gotoProgramCounter() { if (fPCAddress != PC_RUNNING) { fPCLastAddress = PC_UNKNOWN; @@ -1467,6 +1351,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* * @see org.eclipse.cdt.dsf.debug.internal.ui.disassembly.IDisassemblyPart#gotoAddress(java.math.BigInteger) */ + @Override public final void gotoAddress(IAddress address) { if (address != null) { gotoAddress(address.getValue()); @@ -1486,6 +1371,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback#gotoAddress(java.math.BigInteger) */ + @Override public final void gotoAddress(BigInteger address) { fFocusAddress = address; if (fDebugSessionId == null) { @@ -1517,6 +1403,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* * @see org.eclipse.cdt.dsf.debug.internal.ui.disassembly.IDisassemblyPart#gotoSymbol(java.lang.String) */ + @Override public final void gotoSymbol(final String symbol) { if (!fActive || fBackend == null || !fBackend.hasFrameContext()) { return; @@ -1563,12 +1450,14 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* * @see org.eclipse.jface.text.IViewportListener#viewportChanged(int) */ + @Override public void viewportChanged(int verticalOffset) { if (fDebugSessionId != null && fGotoAddressPending == PC_UNKNOWN && fScrollPos == null && !fUpdatePending && !fRefreshViewPending) { fUpdatePending = true; final int updateCount = fUpdateCount; invokeLater(new Runnable() { - public void run() { + @Override + public void run() { if (updateCount == fUpdateCount) { assert fUpdatePending; if (fUpdatePending) { @@ -1586,6 +1475,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem * * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback#updateVisibleArea() */ + @Override public void updateVisibleArea() { assert isGuiThread(); if (!fActive || fUpdatePending || fViewer == null || fDebugSessionId == null) { @@ -1699,6 +1589,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* (non-Javadoc) * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback#asyncExec(java.lang.Runnable) */ + @Override public void asyncExec(Runnable runnable) { if (fViewer != null) { fViewer.getControl().getDisplay().asyncExec(runnable); @@ -1718,6 +1609,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem * * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback#updateInvalidSource() */ + @Override public void updateInvalidSource() { assert isGuiThread(); if (fViewer == null) { @@ -1765,7 +1657,8 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem return; } startUpdate(new Runnable() { - public void run() { + @Override + public void run() { if (DEBUG) System.out.println("retrieveDisassembly "+file); //$NON-NLS-1$ fBackend.retrieveDisassembly(file, lines, fEndAddress, mixed, fShowSymbols, fShowDisassembly); } @@ -1783,6 +1676,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* (non-Javadoc) * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback#retrieveDisassembly(java.math.BigInteger, java.math.BigInteger, int, boolean, boolean) */ + @Override public void retrieveDisassembly(final BigInteger startAddress, BigInteger endAddress, final int linesHint, boolean mixed, boolean ignoreFile) { assert isGuiThread(); assert !fUpdatePending; @@ -1811,6 +1705,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* (non-Javadoc) * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback#insertError(java.math.BigInteger, java.lang.String) */ + @Override public void insertError(BigInteger address, String message) { assert isGuiThread(); AddressRangePosition p = null; @@ -1828,6 +1723,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* (non-Javadoc) * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback#getAddressSize() */ + @Override public int getAddressSize() { assert isGuiThread(); return fAddressSize; @@ -1836,6 +1732,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* (non-Javadoc) * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback#addressSizeChanged(int) */ + @Override public void addressSizeChanged(int addressSize) { assert isGuiThread(); BigInteger oldEndAddress= fEndAddress; @@ -1864,7 +1761,8 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem } else { return; } - if (fAddressRulerColumn != null) { + AddressRulerColumn fAddressRulerColumn = (AddressRulerColumn) getRulerColumn(AddressRulerColumn.ID); + if (fAddressRulerColumn != null) { fAddressRulerColumn.setAddressSize(addressSize); if (fComposite != null) { fComposite.layout(true); @@ -1872,9 +1770,24 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem } } + private IContributedRulerColumn getRulerColumn(String id) { + CompositeRuler compositeRuler = (CompositeRuler) getVerticalRuler(); + for (Iterator<?> iter = compositeRuler.getDecoratorIterator(); iter.hasNext();) { + IVerticalRulerColumn column = (IVerticalRulerColumn) iter.next(); + if (column instanceof IContributedRulerColumn) { + IContributedRulerColumn contributedColumn = (IContributedRulerColumn) column; + if (id.equals(contributedColumn.getDescriptor().getId())) { + return contributedColumn; + } + } + } + return null; + } + /* (non-Javadoc) * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback#getPositionOfAddress(java.math.BigInteger) */ + @Override public AddressRangePosition getPositionOfAddress(BigInteger address) { assert isGuiThread(); if (address == null || address.compareTo(BigInteger.ZERO) < 0) { @@ -1967,6 +1880,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem } if (needUpdate && fViewer != null) { startUpdate(new Runnable() { + @Override public void run() { debugContextChanged(); } @@ -1980,7 +1894,8 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem final int updateCount = fUpdateCount; final SafeRunnable safeUpdate = new SafeRunnable() { - public void run() { + @Override + public void run() { if (updateCount == fUpdateCount) { update.run(); } @@ -1992,7 +1907,8 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem }; if (fUpdatePending) { invokeLater(new Runnable() { - public void run() { + @Override + public void run() { if (updateCount == fUpdateCount) { SafeRunner.run(safeUpdate); } @@ -2057,6 +1973,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem fRefreshViewPending = true; final long refreshViewScheduled = System.currentTimeMillis() + delay; final Runnable refresh = new Runnable() { + @Override public void run() { fRefreshViewPending = false; long now = System.currentTimeMillis(); @@ -2087,6 +2004,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem }}; if (delay > 0) { invokeLater(delay, new Runnable() { + @Override public void run() { doScrollLocked(refresh); }}); @@ -2230,6 +2148,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* (non-Javadoc) * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback#gotoFrame(int) */ + @Override public void gotoFrame(int frame) { assert isGuiThread(); fGotoAddressPending = PC_UNKNOWN; @@ -2239,6 +2158,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* (non-Javadoc) * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback#gotoFrameIfActive(int) */ + @Override public void gotoFrameIfActive(int frame) { assert isGuiThread(); if (fActive) { @@ -2252,6 +2172,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* (non-Javadoc) * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback#gotoFrame(int, java.math.BigInteger) */ + @Override public void gotoFrame(int frame, BigInteger address) { assert isGuiThread(); if (DEBUG) System.out.println("gotoFrame " + frame + " " + getAddressText(address)); //$NON-NLS-1$ //$NON-NLS-2$ @@ -2332,6 +2253,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* * @see org.eclipse.cdt.dsf.debug.internal.ui.disassembly.IDisassemblyPart#isActive() */ + @Override public final boolean isActive() { return fActive; } @@ -2339,6 +2261,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* * @see org.eclipse.cdt.dsf.debug.internal.ui.disassembly.IDisassemblyPart#isConnected() */ + @Override public final boolean isConnected() { if (fDebugSessionId == null) { return false; @@ -2350,6 +2273,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* * @see org.eclipse.cdt.dsf.debug.internal.ui.disassembly.IDisassemblyPart#isSuspended() */ + @Override public final boolean isSuspended() { return isConnected() && fBackend.isSuspended(); } @@ -2357,10 +2281,12 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* * @see org.eclipse.cdt.dsf.debug.internal.ui.disassembly.IDisassemblyPart#getTextViewer() */ + @Override public final ISourceViewer getTextViewer() { return fViewer; } + @Override public final boolean hasViewer() { return fViewer != null; } @@ -2368,6 +2294,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* * @see org.eclipse.cdt.dsf.debug.internal.ui.disassembly.IDisassemblyPart#addRulerContextMenuListener(org.eclipse.jface.action.IMenuListener) */ + @Override public final void addRulerContextMenuListener(IMenuListener listener) { fRulerContextMenuListeners.add(listener); } @@ -2375,6 +2302,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* * @see org.eclipse.cdt.dsf.debug.internal.ui.disassembly.IDisassemblyPart#removeRulerContextMenuListener(org.eclipse.jface.action.IMenuListener) */ + @Override public final void removeRulerContextMenuListener(IMenuListener listener) { fRulerContextMenuListeners.remove(listener); } @@ -2476,6 +2404,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem * means target resumed * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback#updatePC(java.math.BigInteger) */ + @Override public void updatePC(BigInteger pc) { assert isGuiThread(); if (!fPendingPCUpdates.isEmpty()) { @@ -2535,6 +2464,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem if (!fUpdatePending && !fDoPendingPosted) { fDoPendingPosted = true; invokeLater(new Runnable() { + @Override public void run() { doPending(); fDoPendingPosted = false; @@ -2546,6 +2476,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* (non-Javadoc) * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback#doPending() */ + @Override public void doPending() { assert isGuiThread(); if (fViewer == null || fDocument == null) { @@ -2581,6 +2512,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem * @param doit * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback#doScrollLocked(java.lang.Runnable) */ + @Override public void doScrollLocked(final Runnable doit) { assert isGuiThread(); if (fViewer == null || fDebugSessionId == null) { @@ -2600,7 +2532,8 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem if (fUpdatePending) { if (fRunnableQueue.size() == 1) { Runnable doitlater = new Runnable() { - public void run() { + @Override + public void run() { if (updateCount == fUpdateCount) { doScrollLocked(null); } @@ -2636,14 +2569,11 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* (non-Javadoc) * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback#lockScroller() */ + @Override public void lockScroller() { assert isGuiThread(); assert fScrollPos == null; - if (isFunctionOffsetsRulerVisible()) { - fRedrawControl = fViewer.getControl(); - } else { - fRedrawControl = fViewer.getTextWidget(); - } + fRedrawControl = fViewer.getControl(); fRedrawControl.setRedraw(false); try { int topOffset = fViewer.getTopIndexStartOffset(); @@ -2680,6 +2610,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* (non-Javadoc) * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback#unlockScroller() */ + @Override public void unlockScroller() { assert isGuiThread(); try { @@ -2732,7 +2663,8 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* (non-Javadoc) * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback#insertSource(org.eclipse.cdt.debug.internal.ui.disassembly.dsf.AddressRangePosition) */ - public void insertSource(AddressRangePosition _pos) { + @Override + public void insertSource(AddressRangePosition _pos) { assert isGuiThread(); // IDisassemblyPartCallback does not have visibility to the // SourcePosition type, which is DSF-specific, so it uses the base type @@ -2838,6 +2770,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* * @see org.eclipse.jface.text.ITextPresentationListener#applyTextPresentation(org.eclipse.jface.text.TextPresentation) */ + @Override @SuppressWarnings("unchecked") public void applyTextPresentation(TextPresentation textPresentation) { IRegion coverage = textPresentation.getExtent(); @@ -2934,9 +2867,11 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem } } + @Override public AddressRangePosition insertSource(AddressRangePosition pos, BigInteger address, final String file, int lineNumber) { return insertSource(pos, address, file, lineNumber, lineNumber); } + @Override public AddressRangePosition insertSource(AddressRangePosition pos, BigInteger address, final String file, int firstLine, int lastLine) { assert isGuiThread(); Object sourceElement = null; @@ -3020,8 +2955,10 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* (non-Javadoc) * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback#handleTargetSuspended() */ + @Override public void handleTargetSuspended() { asyncExec(new Runnable() { + @Override public void run() { updatePC(PC_UNKNOWN); firePropertyChange(PROP_SUSPENDED); @@ -3032,8 +2969,10 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* (non-Javadoc) * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback#handleTargetResumed() */ + @Override public void handleTargetResumed() { asyncExec(new Runnable() { + @Override public void run() { updatePC(PC_RUNNING); firePropertyChange(PROP_SUSPENDED); @@ -3044,12 +2983,15 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* (non-Javadoc) * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback#handleTargetEnded() */ + @Override public void handleTargetEnded() { asyncExec(new Runnable() { + @Override public void run() { fDebugSessionId = null; startUpdate(new Runnable() { - public void run() { + @Override + public void run() { debugContextChanged(); } }); @@ -3060,6 +3002,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* (non-Javadoc) * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback#setUpdatePending(boolean) */ + @Override public void setUpdatePending(boolean pending) { fUpdatePending = pending; } @@ -3067,6 +3010,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* (non-Javadoc) * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback#getUpdatePending() */ + @Override public boolean getUpdatePending() { assert isGuiThread(); return fUpdatePending; @@ -3075,6 +3019,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* (non-Javadoc) * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback#setGotoAddressPending(java.math.BigInteger) */ + @Override public void setGotoAddressPending(BigInteger address) { assert isGuiThread(); fGotoAddressPending = address; @@ -3083,6 +3028,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* (non-Javadoc) * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback#getGotoAddressPending() */ + @Override public BigInteger getGotoAddressPending() { assert isGuiThread(); return fGotoAddressPending; @@ -3091,6 +3037,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* (non-Javadoc) * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback#getDocument() */ + @Override public IDisassemblyDocument getDocument() { assert isGuiThread(); return fDocument; @@ -3099,6 +3046,7 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem /* (non-Javadoc) * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback#getStorageForFile(java.lang.String) */ + @Override public Object getStorageForFile(String file) { assert isGuiThread(); return fFile2Storage.get(file); |