From 1bf06a9d31e426d9153af91cd65ae0cca8f9c8cd Mon Sep 17 00:00:00 2001 From: Ken Ryall Date: Sun, 29 Jul 2007 15:32:08 +0000 Subject: [PATCH] Bug 81353, option to view disassembly when stopped in a location with no source. --- .../CSourceLookupParticipant.java | 14 ++- .../META-INF/MANIFEST.MF | 2 +- .../sourcelookup/CSourceNotFoundEditor.java | 94 ++++++++++++++++--- .../SourceLookupUIMessages.properties | 6 +- 4 files changed, 98 insertions(+), 18 deletions(-) diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/sourcelookup/CSourceLookupParticipant.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/sourcelookup/CSourceLookupParticipant.java index dbf4e0e07e2..1acfac24a5e 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/sourcelookup/CSourceLookupParticipant.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/sourcelookup/CSourceLookupParticipant.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2004, 2006 QNX Software Systems and others. + * Copyright (c) 2004, 2006, 2007 QNX Software Systems and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -7,8 +7,9 @@ * * Contributors: * QNX Software Systems - Initial API and implementation - * Nokia - Added support for AbsoluteSourceContainer( 159833 ) - * Nokia - Added support for CSourceNotFoundElement ( 167305 ) + * Ken Ryall (Nokia) - Added support for AbsoluteSourceContainer( 159833 ) + * Ken Ryall (Nokia) - Added support for CSourceNotFoundElement ( 167305 ) + * Ken Ryall (Nokia) - Option to open disassembly view when no source ( 81353 ) *******************************************************************************/ package org.eclipse.cdt.debug.internal.core.sourcelookup; @@ -69,7 +70,12 @@ public class CSourceLookupParticipant extends AbstractSourceLookupParticipant { if ( frame != null ) { name = frame.getFile().trim(); if ( name == null || name.length() == 0 ) - return new Object[] { gfNoSource }; + { + if (object instanceof IDebugElement) + return new Object[] { new CSourceNotFoundElement( (IDebugElement) object ) }; + else + return new Object[] { gfNoSource }; + } } } else if ( object instanceof String ) { diff --git a/debug/org.eclipse.cdt.debug.ui/META-INF/MANIFEST.MF b/debug/org.eclipse.cdt.debug.ui/META-INF/MANIFEST.MF index b6535728d3f..da60550e9ab 100644 --- a/debug/org.eclipse.cdt.debug.ui/META-INF/MANIFEST.MF +++ b/debug/org.eclipse.cdt.debug.ui/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.cdt.debug.ui; singleton:=true -Bundle-Version: 4.0.0.qualifier +Bundle-Version: 4.0.1.qualifier Bundle-Activator: org.eclipse.cdt.debug.ui.CDebugUIPlugin Bundle-Vendor: %providerName Bundle-Localization: plugin diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/sourcelookup/CSourceNotFoundEditor.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/sourcelookup/CSourceNotFoundEditor.java index 369d895cdb9..5213b647e87 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/sourcelookup/CSourceNotFoundEditor.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/sourcelookup/CSourceNotFoundEditor.java @@ -6,7 +6,8 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Nokia - initial API and implementation + * Ken Ryall (Nokia) - initial API and implementation + * Ken Ryall (Nokia) - Option to open disassembly view when no source ( 81353 ) *******************************************************************************/ package org.eclipse.cdt.debug.internal.ui.sourcelookup; @@ -20,6 +21,8 @@ import org.eclipse.cdt.debug.core.sourcelookup.MappingSourceContainer; import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceNotFoundElement; import org.eclipse.cdt.debug.internal.core.sourcelookup.MapEntrySourceContainer; import org.eclipse.cdt.debug.internal.ui.ICDebugHelpContextIds; +import org.eclipse.cdt.debug.ui.ICDebugUIConstants; +import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; @@ -33,6 +36,7 @@ import org.eclipse.debug.core.model.ISourceLocator; import org.eclipse.debug.core.sourcelookup.AbstractSourceLookupDirector; import org.eclipse.debug.core.sourcelookup.ISourceContainer; import org.eclipse.debug.ui.sourcelookup.CommonSourceNotFoundEditor; +import org.eclipse.debug.ui.sourcelookup.CommonSourceNotFoundEditorInput; import org.eclipse.debug.ui.sourcelookup.ISourceDisplay; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; @@ -42,7 +46,7 @@ import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IEditorSite; +import org.eclipse.ui.IViewReference; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; @@ -60,6 +64,12 @@ public class CSourceNotFoundEditor extends CommonSourceNotFoundEditor { private ILaunch launch; private IDebugElement context; + private Button disassemblyButton; + + private Button locateFileButton; + + private Button editLookupButton; + public CSourceNotFoundEditor() { super(); } @@ -69,9 +79,10 @@ public class CSourceNotFoundEditor extends CommonSourceNotFoundEditor { PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, ICDebugHelpContextIds.SOURCE_NOT_FOUND); } - public void init(IEditorSite site, IEditorInput input) throws PartInitException { - super.init(site, input); - Object artifact = this.getArtifact(); + public void setInput(IEditorInput input) { + if (input instanceof CommonSourceNotFoundEditorInput) + { + Object artifact = ((CommonSourceNotFoundEditorInput)input).getArtifact(); if (artifact instanceof CSourceNotFoundElement) { CSourceNotFoundElement element = (CSourceNotFoundElement) artifact; @@ -81,31 +92,90 @@ public class CSourceNotFoundEditor extends CommonSourceNotFoundEditor { } else missingFile = ""; //$NON-NLS-1$ + } + super.setInput(input); + syncButtons(); + } + + private void syncButtons() { + + if (locateFileButton != null) + locateFileButton.setVisible(missingFile.length() > 0); + if (editLookupButton != null) + editLookupButton.setVisible(missingFile.length() > 0); } protected String getText() { if (missingFile.length() > 0) { return MessageFormat.format(SourceLookupUIMessages.getString( "CSourceNotFoundEditor.0" ), new String[] { missingFile }); //$NON-NLS-1$ } - return super.getText(); + else { + if (context == null) + return super.getText(); + return MessageFormat.format(SourceLookupUIMessages.getString( "CSourceNotFoundEditor.3" ), new String[] { context.toString() }); //$NON-NLS-1$ + } } protected void createButtons(Composite parent) { - if (missingFile.length() > 0) { + + + { GridData data; - Button button = new Button(parent, SWT.PUSH); + disassemblyButton = new Button(parent, SWT.PUSH); data = new GridData(); data.grabExcessHorizontalSpace = false; data.grabExcessVerticalSpace = false; - button.setLayoutData(data); - button.setText(SourceLookupUIMessages.getString( "CSourceNotFoundEditor.1" )); //$NON-NLS-1$ - button.addSelectionListener(new SelectionAdapter() { + disassemblyButton.setLayoutData(data); + disassemblyButton.setText(SourceLookupUIMessages.getString( "CSourceNotFoundEditor.4" )); //$NON-NLS-1$ + disassemblyButton.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent evt) { + viewDisassembly(); + } + }); + } + + { + GridData data; + locateFileButton = new Button(parent, SWT.PUSH); + data = new GridData(); + data.grabExcessHorizontalSpace = false; + data.grabExcessVerticalSpace = false; + locateFileButton.setLayoutData(data); + locateFileButton.setText(SourceLookupUIMessages.getString( "CSourceNotFoundEditor.1" )); //$NON-NLS-1$ + locateFileButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent evt) { locateFile(); } }); } - super.createButtons(parent); + + { + GridData data; + editLookupButton = new Button(parent, SWT.PUSH); + data = new GridData(); + data.grabExcessHorizontalSpace = false; + data.grabExcessVerticalSpace = false; + editLookupButton.setLayoutData(data); + editLookupButton.setText(SourceLookupUIMessages.getString( "CSourceNotFoundEditor.5" )); + editLookupButton.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent evt) { + editSourceLookupPath(); + } + }); + + } + syncButtons(); + + } + + protected void viewDisassembly() { + IWorkbenchPage page = CUIPlugin.getActivePage(); + if (page != null) { + try { + page.showView(ICDebugUIConstants.ID_DISASSEMBLY_VIEW); + } catch (PartInitException e) {} + } + } private void addSourceMapping(IPath missingPath, IPath newSourcePath) throws CoreException { diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/sourcelookup/SourceLookupUIMessages.properties b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/sourcelookup/SourceLookupUIMessages.properties index 6279e96b6e0..6f928e318ef 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/sourcelookup/SourceLookupUIMessages.properties +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/sourcelookup/SourceLookupUIMessages.properties @@ -7,7 +7,8 @@ # # Contributors: # QNX Software Systems - initial API and implementation -# Nokia - Added support for CSourceNotFoundElement ( 167305 ) +# Ken Ryall (Nokia) - Added support for CSourceNotFoundElement ( 167305 ) +# Ken Ryall (Nokia) - Option to open disassembly view when no source ( 81353 ) ############################################################################### AddContainerAction.0=&Add... AddSourceContainerDialog.0=Add Source @@ -38,3 +39,6 @@ UpAction.0=U&p CSourceNotFoundEditor.0=Can''t find a source file at \"{0}\" \nLocate the file or edit the source lookup path to include its location. CSourceNotFoundEditor.1=Locate File... CSourceNotFoundEditor.2=Missing Source File +CSourceNotFoundEditor.3=No source available for \"{0}\" \n +CSourceNotFoundEditor.4=View Disassembly... +CSourceNotFoundEditor.5=Edit Source Lookup Path...