diff --git a/debug/org.eclipse.cdt.debug.ui/.classpath b/debug/org.eclipse.cdt.debug.ui/.classpath index 3ca60357b63..badc63c6a0a 100644 --- a/debug/org.eclipse.cdt.debug.ui/.classpath +++ b/debug/org.eclipse.cdt.debug.ui/.classpath @@ -8,6 +8,7 @@ + diff --git a/debug/org.eclipse.cdt.debug.ui/.project b/debug/org.eclipse.cdt.debug.ui/.project index 3c1535e67bd..c541fb48a55 100644 --- a/debug/org.eclipse.cdt.debug.ui/.project +++ b/debug/org.eclipse.cdt.debug.ui/.project @@ -4,6 +4,7 @@ org.eclipse.cdt.core + org.eclipse.cdt.core.win32 org.eclipse.cdt.debug.core org.eclipse.cdt.ui org.eclipse.core.boot diff --git a/debug/org.eclipse.cdt.debug.ui/ChangeLog b/debug/org.eclipse.cdt.debug.ui/ChangeLog index 9f3f904e5b2..1a8a3b6f269 100644 --- a/debug/org.eclipse.cdt.debug.ui/ChangeLog +++ b/debug/org.eclipse.cdt.debug.ui/ChangeLog @@ -1,3 +1,14 @@ +2003-02-21 Mikhail Khodjaiants + Implementing the 'Attach Source' editor. + * plugin.properties + * plugin.xml + * icons/full/obj16/filenotfound_obj.gif: new + * CDTDebugModelPresentation.java + * AttachSourceEditor.java: new + * AttachSourceEditorInput.java: new + * FileNotFoundElement.java: new + * CUISourceLocator.java + 2003-02-20 Mikhail Khodjaiants Added the 'Association' column and the 'Restore Defaults' button to the SourceLookupBlock. * SourceLookupBlock.java diff --git a/debug/org.eclipse.cdt.debug.ui/icons/full/obj16/filenotfound_obj.gif b/debug/org.eclipse.cdt.debug.ui/icons/full/obj16/filenotfound_obj.gif new file mode 100644 index 00000000000..1bb68c2d649 Binary files /dev/null and b/debug/org.eclipse.cdt.debug.ui/icons/full/obj16/filenotfound_obj.gif differ diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.properties b/debug/org.eclipse.cdt.debug.ui/plugin.properties index f3634ca4b11..64628f274e1 100644 --- a/debug/org.eclipse.cdt.debug.ui/plugin.properties +++ b/debug/org.eclipse.cdt.debug.ui/plugin.properties @@ -55,6 +55,7 @@ CDebugActionGroup.name=C/C++ Debug SourcePropertyPage.name=Source Lookup DisassemblyEditor.name=Disassembly Editor +AttachSourceEditor.name= Attach Source Editor LoadSymbolsAction.label=Load Symbols SignalAction.label=Resume With Signal diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.xml b/debug/org.eclipse.cdt.debug.ui/plugin.xml index 6ac242e1617..5662a2ef913 100644 --- a/debug/org.eclipse.cdt.debug.ui/plugin.xml +++ b/debug/org.eclipse.cdt.debug.ui/plugin.xml @@ -1090,6 +1090,12 @@ class="org.eclipse.cdt.debug.internal.ui.editors.DisassemblyEditor" id="org.eclipse.cdt.debug.ui.DisassemblyEditor"> + + diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDTDebugModelPresentation.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDTDebugModelPresentation.java index b34cdd34c37..db52925843f 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDTDebugModelPresentation.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDTDebugModelPresentation.java @@ -34,7 +34,10 @@ import org.eclipse.cdt.debug.core.model.IState; import org.eclipse.cdt.debug.core.sourcelookup.IDisassemblyStorage; import org.eclipse.cdt.debug.internal.core.CDebugUtils; import org.eclipse.cdt.debug.internal.core.sourcelookup.DisassemblyManager; +import org.eclipse.cdt.debug.internal.ui.editors.AttachSourceEditor; +import org.eclipse.cdt.debug.internal.ui.editors.AttachSourceEditorInput; import org.eclipse.cdt.debug.internal.ui.editors.DisassemblyEditorInput; +import org.eclipse.cdt.debug.internal.ui.editors.FileNotFoundElement; import org.eclipse.cdt.debug.ui.CDebugUIPlugin; import org.eclipse.cdt.internal.ui.util.ExternalEditorInput; import org.eclipse.cdt.ui.CUIPlugin; @@ -159,6 +162,10 @@ public class CDTDebugModelPresentation extends LabelProvider { return new DisassemblyEditorInput( (IStorage)element ); } + if ( element instanceof FileNotFoundElement ) + { + return new AttachSourceEditorInput( (FileNotFoundElement)element ); + } return null; } @@ -169,6 +176,10 @@ public class CDTDebugModelPresentation extends LabelProvider { if ( input != null ) { + if ( input instanceof AttachSourceEditorInput ) + { + return AttachSourceEditor.EDITOR_ID; + } IEditorRegistry registry = PlatformUI.getWorkbench().getEditorRegistry(); IEditorDescriptor descriptor = registry.getDefaultEditor( input.getName() ); if ( descriptor != null ) diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/AttachSourceEditor.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/AttachSourceEditor.java new file mode 100644 index 00000000000..0461e38a29e --- /dev/null +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/AttachSourceEditor.java @@ -0,0 +1,382 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.internal.ui.editors; + +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocation; +import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator; +import org.eclipse.cdt.debug.internal.ui.wizards.AddDirectorySourceLocationWizard; +import org.eclipse.cdt.debug.internal.ui.wizards.AddSourceLocationWizard; +import org.eclipse.cdt.debug.ui.CDebugUIPlugin; +import org.eclipse.cdt.debug.ui.sourcelookup.INewSourceLocationWizard; +import org.eclipse.core.resources.IMarker; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Path; +import org.eclipse.debug.core.ILaunch; +import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; +import org.eclipse.debug.core.model.IPersistableSourceLocator; +import org.eclipse.jface.resource.JFaceResources; +import org.eclipse.jface.util.IPropertyChangeListener; +import org.eclipse.jface.util.PropertyChangeEvent; +import org.eclipse.jface.window.Window; +import org.eclipse.jface.wizard.WizardDialog; +import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.ScrolledComposite; +import org.eclipse.swt.events.ControlEvent; +import org.eclipse.swt.events.ControlListener; +import org.eclipse.swt.events.DisposeEvent; +import org.eclipse.swt.events.DisposeListener; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.Font; +import org.eclipse.swt.graphics.Rectangle; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.ScrollBar; +import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.IEditorSite; +import org.eclipse.ui.PartInitException; +import org.eclipse.ui.part.EditorPart; + +/** + * Enter type comment. + * + * @since: Feb 21, 2003 + */ +public class AttachSourceEditor extends EditorPart + implements IPropertyChangeListener +{ + public static final String EDITOR_ID = CDebugUIPlugin.getUniqueIdentifier() + ".editor.AttachSourceEditor"; + + /** The horizontal scroll increment. */ + private static final int HORIZONTAL_SCROLL_INCREMENT = 10; + /** The vertical scroll increment. */ + private static final int VERTICAL_SCROLL_INCREMENT = 10; + + private ScrolledComposite fScrolledComposite; + private Color fBackgroundColor; + private Color fForegroundColor; + private Color fSeparatorColor; + private List fBannerLabels= new ArrayList(); + private List fHeaderLabels= new ArrayList(); + private Font fFont; + private Button fAttachButton; + private Label fInputLabel; + + /** + * Constructor for AttachSourceEditor. + */ + public AttachSourceEditor() + { + super(); + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IEditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor) + */ + public void doSave( IProgressMonitor monitor ) + { + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IEditorPart#doSaveAs() + */ + public void doSaveAs() + { + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IEditorPart#gotoMarker(org.eclipse.core.resources.IMarker) + */ + public void gotoMarker( IMarker marker ) + { + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IEditorPart#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput) + */ + public void init( IEditorSite site, IEditorInput input ) throws PartInitException + { + setInput( input ); + setSite( site ); + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IEditorPart#isDirty() + */ + public boolean isDirty() + { + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IEditorPart#isSaveAsAllowed() + */ + public boolean isSaveAsAllowed() + { + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) + */ + public void createPartControl( Composite parent ) + { + Display display = parent.getDisplay(); + fBackgroundColor = display.getSystemColor( SWT.COLOR_LIST_BACKGROUND ); + fForegroundColor = display.getSystemColor( SWT.COLOR_LIST_FOREGROUND ); + fSeparatorColor = new Color( display, 152, 170, 203 ); + + JFaceResources.getFontRegistry().addListener( this ); + + fScrolledComposite = new ScrolledComposite( parent, SWT.H_SCROLL | SWT.V_SCROLL ); + fScrolledComposite.setAlwaysShowScrollBars( false ); + fScrolledComposite.setExpandHorizontal( true ); + fScrolledComposite.setExpandVertical( true ); + fScrolledComposite.addDisposeListener( + new DisposeListener() + { + public void widgetDisposed( DisposeEvent e ) + { + JFaceResources.getFontRegistry().removeListener( AttachSourceEditor.this ); + fScrolledComposite = null; + fSeparatorColor.dispose(); + fSeparatorColor = null; + fBannerLabels.clear(); + fHeaderLabels.clear(); + if ( fFont != null ) + { + fFont.dispose(); + fFont = null; + } + } + } ); + + fScrolledComposite.addControlListener( + new ControlListener() + { + public void controlMoved( ControlEvent e ) + { + } + + public void controlResized( ControlEvent e ) + { + Rectangle clientArea = fScrolledComposite.getClientArea(); + + ScrollBar verticalBar = fScrolledComposite.getVerticalBar(); + verticalBar.setIncrement( VERTICAL_SCROLL_INCREMENT ); + verticalBar.setPageIncrement( clientArea.height - verticalBar.getIncrement() ); + + ScrollBar horizontalBar = fScrolledComposite.getHorizontalBar(); + horizontalBar.setIncrement( HORIZONTAL_SCROLL_INCREMENT ); + horizontalBar.setPageIncrement( clientArea.width - horizontalBar.getIncrement() ); + } + }); + + Composite composite = createComposite( fScrolledComposite ); + composite.setLayout( new GridLayout() ); + + createTitleLabel( composite, "C/C++ File Editor" ); + createLabel( composite, null ); + createLabel( composite, null ); + + createHeadingLabel( composite, "Source not found" ); + + Composite separator = createCompositeSeparator( composite ); + GridData data = new GridData( GridData.FILL_HORIZONTAL ); + data.heightHint = 2; + separator.setLayoutData( data ); + + fInputLabel = createLabel( composite, "" ); + createLabel( composite, "You can attach the source location by pressing the button below:" ); + createLabel( composite, null ); + + fAttachButton = createButton( composite, "&Attach Source..." ); + fAttachButton.addSelectionListener( + new SelectionListener() + { + public void widgetSelected( SelectionEvent event ) + { + AttachSourceEditor.this.attachSourceLocation(); + } + + public void widgetDefaultSelected( SelectionEvent e ) + { + } + } ); + + separator = createCompositeSeparator( composite ); + data = new GridData( GridData.FILL_HORIZONTAL ); + data.heightHint = 2; + separator.setLayoutData( data ); + + fScrolledComposite.setContent( composite ); + fScrolledComposite.setMinSize( composite.computeSize( SWT.DEFAULT, SWT.DEFAULT ) ); + + if ( getEditorInput() != null ) + { + setInputLabelText( getEditorInput().getName() ); + } + } + + private Composite createComposite( Composite parent ) + { + Composite composite = new Composite( parent, SWT.NONE ); + composite.setBackground( fBackgroundColor ); + return composite; + } + + private Label createLabel( Composite parent, String text ) + { + Label label = new Label( parent, SWT.NONE ); + if ( text != null ) + label.setText( text ); + label.setBackground( fBackgroundColor ); + label.setForeground( fForegroundColor ); + return label; + } + + private Label createTitleLabel( Composite parent, String text ) + { + Label label = new Label( parent, SWT.NONE ); + if ( text != null ) + label.setText( text ); + label.setBackground( fBackgroundColor ); + label.setForeground( fForegroundColor ); + label.setFont( JFaceResources.getHeaderFont() ); + fHeaderLabels.add( label ); + return label; + } + + private Label createHeadingLabel( Composite parent, String text ) + { + Label label = new Label( parent, SWT.NONE ); + if ( text != null ) + label.setText( text ); + label.setBackground( fBackgroundColor ); + label.setForeground( fForegroundColor ); + label.setFont( JFaceResources.getBannerFont() ); + fBannerLabels.add( label ); + return label; + } + + private Composite createCompositeSeparator( Composite parent ) + { + Composite composite = new Composite( parent, SWT.NONE ); + composite.setBackground( fSeparatorColor ); + return composite; + } + + private Button createButton( Composite parent, String text ) + { + Button button = new Button( parent, SWT.FLAT ); + button.setBackground( fBackgroundColor ); + button.setForeground( fForegroundColor ); + if ( text != null ) + button.setText( text ); + return button; + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IWorkbenchPart#setFocus() + */ + public void setFocus() + { + if ( fAttachButton != null ) + fAttachButton.setFocus(); + } + + /* (non-Javadoc) + * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent) + */ + public void propertyChange( PropertyChangeEvent event ) + { + } + + /* (non-Javadoc) + * @see org.eclipse.ui.part.EditorPart#setInput(org.eclipse.ui.IEditorInput) + */ + protected void setInput( IEditorInput input ) + { + super.setInput( input ); + if ( input != null && fInputLabel != null ) + setInputLabelText( getEditorInput().getName() ); + } + + private void setInputLabelText( String inputName ) + { + fInputLabel.setText( MessageFormat.format( "There is no source for the file {0}", new String[] { inputName } ) ); + } + + protected void attachSourceLocation() + { + if ( getEditorInput() != null && getEditorInput().getAdapter( FileNotFoundElement.class ) != null ) + { + FileNotFoundElement element = (FileNotFoundElement)getEditorInput().getAdapter( FileNotFoundElement.class ); + if ( element.getLaunch() != null && element.getLaunch().getSourceLocator() instanceof IAdaptable ) + { + ILaunch launch = element.getLaunch(); + ICSourceLocator locator = (ICSourceLocator)((IAdaptable)element.getLaunch().getSourceLocator()).getAdapter( ICSourceLocator.class ); + if ( locator != null ) + { + IPath path = new Path( element.getName() ); + INewSourceLocationWizard wizard = null; + if ( path.isAbsolute() ) + { + path = path.removeLastSegments( 1 ); + wizard = new AddDirectorySourceLocationWizard( path ); + } + else + { + wizard = new AddSourceLocationWizard( locator.getSourceLocations() ); + } + WizardDialog dialog = new WizardDialog( CDebugUIPlugin.getActiveWorkbenchShell(), wizard ); + if ( dialog.open() == Window.OK ) + { + ICSourceLocation[] locations = locator.getSourceLocations(); + ArrayList list = new ArrayList( Arrays.asList( locations ) ); + list.add( wizard.getSourceLocation() ); + locator.setSourceLocations( (ICSourceLocation[])list.toArray( new ICSourceLocation[list.size()] ) ); + + if ( locator instanceof IPersistableSourceLocator ) + { + ILaunchConfiguration configuration = launch.getLaunchConfiguration(); + saveChanges( configuration, (IPersistableSourceLocator)launch.getSourceLocator() ); + } + } + } + } + } + } + + protected void saveChanges( ILaunchConfiguration configuration, IPersistableSourceLocator locator ) + { + try + { + ILaunchConfigurationWorkingCopy copy = configuration.copy( configuration.getName() ); + copy.setAttribute( ILaunchConfiguration.ATTR_SOURCE_LOCATOR_MEMENTO, locator.getMemento() ); + copy.doSave(); + } + catch( CoreException e ) + { + CDebugUIPlugin.errorDialog( e.getMessage(), (IStatus)null ); + } + } +} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/AttachSourceEditorInput.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/AttachSourceEditorInput.java new file mode 100644 index 00000000000..09487ba7740 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/AttachSourceEditorInput.java @@ -0,0 +1,78 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.internal.ui.editors; + +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.IPersistableElement; + +/** + * Enter type comment. + * + * @since: Feb 21, 2003 + */ +public class AttachSourceEditorInput implements IEditorInput +{ + private FileNotFoundElement fElement = null; + + /** + * Constructor for AttachSourceEditorInput. + */ + public AttachSourceEditorInput( FileNotFoundElement element ) + { + fElement = element; + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IEditorInput#exists() + */ + public boolean exists() + { + return true; + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IEditorInput#getImageDescriptor() + */ + public ImageDescriptor getImageDescriptor() + { + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IEditorInput#getName() + */ + public String getName() + { + return ( fElement != null ) ? fElement.getName() : ""; + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IEditorInput#getPersistable() + */ + public IPersistableElement getPersistable() + { + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IEditorInput#getToolTipText() + */ + public String getToolTipText() + { + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) + */ + public Object getAdapter( Class adapter ) + { + if ( adapter.equals( FileNotFoundElement.class ) ) + return fElement; + return null; + } +} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/FileNotFoundElement.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/FileNotFoundElement.java new file mode 100644 index 00000000000..f6a760ffac9 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/FileNotFoundElement.java @@ -0,0 +1,48 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.internal.ui.editors; + +import org.eclipse.cdt.debug.core.model.IStackFrameInfo; +import org.eclipse.debug.core.ILaunch; +import org.eclipse.debug.core.model.IStackFrame; + +/** + * Enter type comment. + * + * @since: Feb 21, 2003 + */ +public class FileNotFoundElement +{ + private IStackFrame fStackFrame; + + /** + * Constructor for FileNotFoundElement. + */ + public FileNotFoundElement( IStackFrame stackFrame ) + { + fStackFrame = stackFrame; + } + + public String getName() + { + IStackFrameInfo frameInfo = (IStackFrameInfo)fStackFrame.getAdapter( IStackFrameInfo.class ); + if ( frameInfo != null && frameInfo.getFile() != null && frameInfo.getFile().length() > 0 ) + { + return frameInfo.getFile(); + } + return ""; + } + + public IStackFrame getStackFrame() + { + return fStackFrame; + } + + public ILaunch getLaunch() + { + return ( fStackFrame != null ) ? fStackFrame.getLaunch() : null; + } +} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/sourcelookup/CUISourceLocator.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/sourcelookup/CUISourceLocator.java index a817ac209dc..7360d3198b2 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/sourcelookup/CUISourceLocator.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/sourcelookup/CUISourceLocator.java @@ -12,6 +12,7 @@ import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator; import org.eclipse.cdt.debug.core.sourcelookup.ISourceMode; import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceLocator; import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceManager; +import org.eclipse.cdt.debug.internal.ui.editors.FileNotFoundElement; import org.eclipse.cdt.debug.internal.ui.wizards.AddDirectorySourceLocationWizard; import org.eclipse.cdt.debug.internal.ui.wizards.AddSourceLocationWizard; import org.eclipse.cdt.debug.ui.CDebugUIPlugin; @@ -219,11 +220,14 @@ public class CUISourceLocator implements IAdaptable IStackFrameInfo frameInfo = (IStackFrameInfo)stackFrame.getAdapter( IStackFrameInfo.class ); if ( frameInfo != null && frameInfo.getFile() != null && frameInfo.getFile().length() > 0 ) { +/* showDebugSourcePage( stackFrame.getLaunch(), frameInfo.getFile() ); if ( fNewLocationAttached ) { res = fSourceLocator.getSourceElement( stackFrame ); } +*/ + res = new FileNotFoundElement( stackFrame ); } } return res;