diff options
27 files changed, 161 insertions, 476 deletions
diff --git a/org.eclipse.debug.ui/META-INF/MANIFEST.MF b/org.eclipse.debug.ui/META-INF/MANIFEST.MF index 527fabc8f..6daa12543 100644 --- a/org.eclipse.debug.ui/META-INF/MANIFEST.MF +++ b/org.eclipse.debug.ui/META-INF/MANIFEST.MF @@ -33,7 +33,6 @@ Export-Package: org.eclipse.debug.internal.ui;x-internal:=true, org.eclipse.debug.ui, org.eclipse.debug.ui.actions, org.eclipse.debug.ui.console, - org.eclipse.debug.ui.contexts, org.eclipse.debug.ui.memory, org.eclipse.debug.ui.sourcelookup Require-Bundle: org.eclipse.core.expressions;bundle-version="[3.2.0,4.0.0)", diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/context/AbstractDebugContextActionDelegate.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/context/AbstractDebugContextActionDelegate.java index 9281ed046..440d41869 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/context/AbstractDebugContextActionDelegate.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/context/AbstractDebugContextActionDelegate.java @@ -22,8 +22,8 @@ import org.eclipse.debug.core.DebugException; import org.eclipse.debug.internal.ui.DebugUIPlugin; import org.eclipse.debug.internal.ui.actions.ActionMessages; import org.eclipse.debug.internal.ui.contexts.DebugContextManager; +import org.eclipse.debug.internal.ui.contexts.IDebugContextListener; import org.eclipse.debug.ui.IDebugUIConstants; -import org.eclipse.debug.ui.contexts.IDebugContextListener; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/DebugContextManager.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/DebugContextManager.java index f3ac0b4f9..20d64e946 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/DebugContextManager.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/DebugContextManager.java @@ -13,9 +13,6 @@ package org.eclipse.debug.internal.ui.contexts; import java.util.HashMap; import java.util.Map; -import org.eclipse.debug.ui.contexts.IDebugContextListener; -import org.eclipse.debug.ui.contexts.IDebugContextManager; -import org.eclipse.debug.ui.contexts.IDebugContextProvider; import org.eclipse.jface.viewers.ISelection; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/DebugWindowContextService.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/DebugWindowContextService.java index 57175af45..719fd3d49 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/DebugWindowContextService.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/DebugWindowContextService.java @@ -19,8 +19,6 @@ import org.eclipse.core.commands.util.ListenerList; import org.eclipse.core.runtime.ISafeRunnable; import org.eclipse.core.runtime.Platform; import org.eclipse.debug.internal.ui.DebugUIPlugin; -import org.eclipse.debug.ui.contexts.IDebugContextListener; -import org.eclipse.debug.ui.contexts.IDebugContextProvider; import org.eclipse.jface.viewers.ISelection; import org.eclipse.ui.IPartListener2; import org.eclipse.ui.IWorkbenchPage; diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/contexts/IDebugContextListener.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/IDebugContextListener.java index 42240d61b..a59ac304f 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/contexts/IDebugContextListener.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/IDebugContextListener.java @@ -8,7 +8,7 @@ * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ -package org.eclipse.debug.ui.contexts; +package org.eclipse.debug.internal.ui.contexts; import org.eclipse.jface.viewers.ISelection; import org.eclipse.ui.IWorkbenchPart; diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/contexts/IDebugContextManager.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/IDebugContextManager.java index 1fff05031..caf0c018b 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/contexts/IDebugContextManager.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/IDebugContextManager.java @@ -8,7 +8,7 @@ * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ -package org.eclipse.debug.ui.contexts; +package org.eclipse.debug.internal.ui.contexts; import org.eclipse.jface.viewers.ISelection; import org.eclipse.ui.IWorkbenchWindow; diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/contexts/IDebugContextProvider.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/IDebugContextProvider.java index 1052a4e4d..cfb53e240 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/contexts/IDebugContextProvider.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/IDebugContextProvider.java @@ -8,7 +8,7 @@ * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ -package org.eclipse.debug.ui.contexts; +package org.eclipse.debug.internal.ui.contexts; import org.eclipse.jface.viewers.ISelection; import org.eclipse.ui.IWorkbenchPart; diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/IDebugContextService.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/IDebugContextService.java index 146f262e3..052b919f6 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/IDebugContextService.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/IDebugContextService.java @@ -10,7 +10,6 @@ *******************************************************************************/ package org.eclipse.debug.internal.ui.contexts; -import org.eclipse.debug.ui.contexts.IDebugContextListener; import org.eclipse.jface.viewers.ISelection; diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/contexts/ISourceDisplayAdapter.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/ISourceDisplayAdapter.java index 938e49278..9a02a7ddd 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/contexts/ISourceDisplayAdapter.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/ISourceDisplayAdapter.java @@ -8,7 +8,7 @@ * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ -package org.eclipse.debug.ui.contexts; +package org.eclipse.debug.internal.ui.contexts; import org.eclipse.ui.IWorkbenchPage; @@ -25,7 +25,8 @@ public interface ISourceDisplayAdapter { * * @param context debug context to display source for * @param page the page in which to display source + * @param forceSourceLookup whether source lookup should be performed */ - public void displaySource(Object context, IWorkbenchPage page); + public void displaySource(Object context, IWorkbenchPage page, boolean forceSourceLookup); } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/contexts/ISuspendTrigger.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/ISuspendTrigger.java index a5ce7e0bb..bede82a97 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/contexts/ISuspendTrigger.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/ISuspendTrigger.java @@ -8,7 +8,7 @@ * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ -package org.eclipse.debug.ui.contexts; +package org.eclipse.debug.internal.ui.contexts; /** * Adapter retrieved from an <code>ILaunch</code> that notifies diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/contexts/ISuspendTriggerListener.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/ISuspendTriggerListener.java index 5daafe5e7..82f7a77fd 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/ui/contexts/ISuspendTriggerListener.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/ISuspendTriggerListener.java @@ -8,7 +8,7 @@ * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ -package org.eclipse.debug.ui.contexts; +package org.eclipse.debug.internal.ui.contexts; import org.eclipse.debug.core.ILaunch; diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/LaunchSuspendTrigger.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/LaunchSuspendTrigger.java index e90457839..9b5515b28 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/LaunchSuspendTrigger.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/LaunchSuspendTrigger.java @@ -22,8 +22,6 @@ import org.eclipse.debug.core.model.IDebugElement; import org.eclipse.debug.core.model.IDebugTarget; import org.eclipse.debug.core.model.IThread; import org.eclipse.debug.internal.ui.DebugUIPlugin; -import org.eclipse.debug.ui.contexts.ISuspendTrigger; -import org.eclipse.debug.ui.contexts.ISuspendTriggerListener; /** * @since 3.2 diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/SuspendTriggerAdapterFactory.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/SuspendTriggerAdapterFactory.java index 056b7c418..99c3e4a96 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/SuspendTriggerAdapterFactory.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/SuspendTriggerAdapterFactory.java @@ -12,7 +12,6 @@ package org.eclipse.debug.internal.ui.contexts; import org.eclipse.core.runtime.IAdapterFactory; import org.eclipse.debug.core.ILaunch; -import org.eclipse.debug.ui.contexts.ISuspendTrigger; /** * @since 3.2 diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/elements/adapters/StackFrameSourceDisplayAdapter.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/elements/adapters/StackFrameSourceDisplayAdapter.java index 08024e5ab..be9e46319 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/elements/adapters/StackFrameSourceDisplayAdapter.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/elements/adapters/StackFrameSourceDisplayAdapter.java @@ -22,10 +22,10 @@ import org.eclipse.debug.core.model.ISourceLocator; import org.eclipse.debug.core.model.IStackFrame; import org.eclipse.debug.core.model.IThread; import org.eclipse.debug.internal.ui.InstructionPointerManager; +import org.eclipse.debug.internal.ui.contexts.ISourceDisplayAdapter; import org.eclipse.debug.internal.ui.sourcelookup.SourceLookupResult; import org.eclipse.debug.internal.ui.views.launch.DecorationManager; import org.eclipse.debug.ui.DebugUITools; -import org.eclipse.debug.ui.contexts.ISourceDisplayAdapter; import org.eclipse.debug.ui.sourcelookup.ISourceLookupResult; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.progress.UIJob; @@ -130,11 +130,11 @@ public class StackFrameSourceDisplayAdapter implements ISourceDisplayAdapter { } /* (non-Javadoc) - * @see org.eclipse.debug.ui.contexts.ISourceDisplayAdapter#displaySource(java.lang.Object, org.eclipse.ui.IWorkbenchPage) + * @see org.eclipse.debug.ui.contexts.ISourceDisplayAdapter#displaySource(java.lang.Object, org.eclipse.ui.IWorkbenchPage, boolean) */ - public synchronized void displaySource(Object context, IWorkbenchPage page) { + public synchronized void displaySource(Object context, IWorkbenchPage page, boolean force) { IStackFrame frame = (IStackFrame)context; - if (frame.equals(fPrevFrame)) { + if (!force && frame.equals(fPrevFrame)) { fPrevResult.updateArtifact(context); (new SourceDisplayJob(fPrevResult, page)).schedule(); } else { diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/PerspectiveManager.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/PerspectiveManager.java index 34c6f5eac..a488957b5 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/PerspectiveManager.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/PerspectiveManager.java @@ -35,10 +35,10 @@ import org.eclipse.debug.core.ILaunchListener; import org.eclipse.debug.core.ILaunchManager; import org.eclipse.debug.internal.ui.DebugUIPlugin; import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; +import org.eclipse.debug.internal.ui.contexts.ISuspendTrigger; +import org.eclipse.debug.internal.ui.contexts.ISuspendTriggerListener; import org.eclipse.debug.ui.DebugUITools; import org.eclipse.debug.ui.IDebugUIConstants; -import org.eclipse.debug.ui.contexts.ISuspendTrigger; -import org.eclipse.debug.ui.contexts.ISuspendTriggerListener; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialogWithToggle; import org.eclipse.swt.widgets.Display; diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/CommonSourceNotFoundEditor.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/CommonSourceNotFoundEditor.java index cb9f1388d..2308d5dcb 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/CommonSourceNotFoundEditor.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/CommonSourceNotFoundEditor.java @@ -14,30 +14,18 @@ import org.eclipse.core.resources.IMarker; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.debug.core.DebugEvent; -import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.IDebugEventSetListener; import org.eclipse.debug.core.ILaunch; +import org.eclipse.debug.core.ILaunchesListener2; import org.eclipse.debug.core.model.IDebugElement; import org.eclipse.debug.core.model.ISourceLocator; -import org.eclipse.debug.core.model.IStackFrame; -import org.eclipse.debug.core.model.IThread; import org.eclipse.debug.core.sourcelookup.AbstractSourceLookupDirector; import org.eclipse.debug.internal.ui.DebugUIPlugin; import org.eclipse.debug.internal.ui.IDebugHelpContextIds; -import org.eclipse.debug.internal.ui.views.launch.LaunchView; import org.eclipse.debug.ui.DebugUITools; -import org.eclipse.debug.ui.IDebugModelPresentation; -import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.debug.ui.sourcelookup.SourceLookupDialog; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.resource.JFaceColors; -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; @@ -51,14 +39,11 @@ import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorSite; import org.eclipse.ui.IReusableEditor; -import org.eclipse.ui.IViewPart; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.EditorPart; -import org.eclipse.ui.texteditor.IDocumentProvider; -import org.eclipse.ui.texteditor.ITextEditor; /** * Editor for when source is not found. Shows the source name and has @@ -73,7 +58,7 @@ import org.eclipse.ui.texteditor.ITextEditor; * @see CommonSourceNotFoundEditorInput * @since 3.0 */ -public class CommonSourceNotFoundEditor extends EditorPart implements IReusableEditor, IDebugEventSetListener { +public class CommonSourceNotFoundEditor extends EditorPart implements IReusableEditor, ILaunchesListener2 { /** * Text widgets used for this editor @@ -108,7 +93,7 @@ public class CommonSourceNotFoundEditor extends EditorPart implements IReusableE public void init(IEditorSite site, IEditorInput input) throws PartInitException { setSite(site); setInput(input); - DebugPlugin.getDefault().addDebugEventListener(this); + DebugPlugin.getDefault().getLaunchManager().addLaunchListener(this); } /** @@ -193,84 +178,11 @@ public class CommonSourceNotFoundEditor extends EditorPart implements IReusableE int result = dialog.open(); if(result == Window.OK) { - resetEditor(); + IWorkbenchPage page = getEditorSite().getPage(); + SourceLookupManager.getDefault().displaySource(fObject, page, true); + closeEditor(); } } - /** - * Clears the (source not found) editor inputs associated with the stack and - * opening the editor again, if the item is not a stackframe. A marker will be added - * and the editor will be told to scroll to the marker. - * - * If it is a stackframe, the launch view will pick up the change event and open a new - * editor automatically. - * - */ - public void resetEditor() - { - fireChangeEventsOnStack(); - - if(fObject instanceof IStackFrame) { - return; //launch view will pick up from here - } - - // close this editor and open a new editor - final int lineNumber = getLineNumber(); - Runnable open = new Runnable() { - public void run() { - IWorkbenchWindow dwindow= DebugUIPlugin.getActiveWorkbenchWindow(); - if (dwindow != null) { - IWorkbenchPage page= dwindow.getActivePage(); - if (page != null) { - IDebugModelPresentation modelPres = DebugUITools.newDebugModelPresentation(); - IEditorInput input = modelPres.getEditorInput(fObject); - if (input != null) { - String id = modelPres.getEditorId(input, fObject); - if (id != null) { - try { - IEditorPart editorPart = page.openEditor(input, id); - if (editorPart instanceof ITextEditor && lineNumber >= 0) { - // position to line number - ITextEditor textEditor = (ITextEditor) editorPart; - IRegion region= getLineInformation(textEditor, lineNumber); - if (region != null) { - textEditor.selectAndReveal(region.getOffset(), 0); - } - } - } catch (PartInitException e1) { - } - } - } - modelPres.dispose(); - } - } - } - }; - closeEditor(); - // get new editor input - DebugUIPlugin.getStandardDisplay().asyncExec(open); - } - - /** - * Returns the line information for the given line in the given editor - */ - private IRegion getLineInformation(ITextEditor editor, int lineNumber) { - IDocumentProvider provider= editor.getDocumentProvider(); - IEditorInput input= editor.getEditorInput(); - try { - provider.connect(input); - } catch (CoreException e) { - return null; - } - try { - IDocument document= provider.getDocument(input); - if (document != null) - return document.getLineInformation(lineNumber); - } catch (BadLocationException e) { - } finally { - provider.disconnect(input); - } - return null; - } /** * Returns the line number associated with the breakpoint (marker). @@ -308,95 +220,6 @@ public class CommonSourceNotFoundEditor extends EditorPart implements IReusableE fText.setText(input.getToolTipText()+"\n"); //$NON-NLS-1$ } } - - /** - * Fires change event(s) to clear the source file history of the items in the stack. - */ - protected void fireChangeEventsOnStack(){ - if(fObject instanceof IStackFrame) { - fireChangeEvent(DebugEvent.CONTENT, (IStackFrame)fObject); - } else if(fObject instanceof IDebugElement) { //loop through all threads and clear the cached source files - try{ - IThread[] threads =((IDebugElement)fObject).getDebugTarget().getThreads(); - for(int i=0; i< threads.length; i++) - { - fireChangeEvent(DebugEvent.CONTENT, threads[i].getTopStackFrame()); - } - } catch(DebugException e){} - } - } - - /** - * Fire a debug change event with detail - * @param detail @see DebugEvent - */ - public void fireChangeEvent(int detail, IDebugElement source) { - fireEvent(new DebugEvent(source, DebugEvent.CHANGE, detail)); - } - - - /** - * Fire a debug event - */ - private void fireEvent(DebugEvent event) { - if(DebugPlugin.getDefault() != null) - DebugPlugin.getDefault().fireDebugEventSet(new DebugEvent[] {event}); - } - - - /* (non-Javadoc) - * @see org.eclipse.debug.core.IDebugEventSetListener#handleDebugEvents(org.eclipse.debug.core.DebugEvent[]) - */ - public void handleDebugEvents(DebugEvent[] events) { - for (int i = 0; i < events.length; i++) { - DebugEvent event = events[i]; - Object source= event.getSource(); - switch (event.getKind()) { - case DebugEvent.TERMINATE : - if(checkIfEditorShouldClose(source)) - closeEditor(); - break; - - case DebugEvent.CHANGE : - if(!source.equals(fObject)) - return; - // Trigger a selectionChange event - IWorkbenchWindow window= DebugUIPlugin.getActiveWorkbenchWindow(); - if (window == null) { - return; - } - IWorkbenchPage p= window.getActivePage(); - if (p == null) { - return; - } - IViewPart fLaunchView= p.findView(IDebugUIConstants.ID_DEBUG_VIEW); - if (fLaunchView instanceof ISelectionChangedListener) { - ISelection fSelection = ((LaunchView)fLaunchView).getViewer().getSelection(); - // To clear the stackframe stored in the launchView - ((LaunchView)fLaunchView).clearSourceSelection(((IStackFrame)source).getThread()); - ((LaunchView)fLaunchView).getViewer().setSelection(fSelection, true); - } - break; - } - } - } - - - /** - * Checks if the source of the terminate event is associated with this editor - * object. - * @param source the source of the event - * @return true if the <code>source</code> is related to this editor, false otherwise - */ - protected boolean checkIfEditorShouldClose(Object source) { - //Make sure terminate event is for me - if (fObject instanceof IDebugElement && source instanceof IDebugElement) { - IDebugElement element = (IDebugElement)fObject; - IDebugElement sourceElement = (IDebugElement)source; - return sourceElement.equals(element.getDebugTarget()); - } - return false; - } /** * Closes this editor. @@ -423,9 +246,44 @@ public class CommonSourceNotFoundEditor extends EditorPart implements IReusableE * @see org.eclipse.ui.IWorkbenchPart#dispose() */ public void dispose() { - DebugPlugin.getDefault().removeDebugEventListener(this); + DebugPlugin.getDefault().getLaunchManager().removeLaunchListener(this); super.dispose(); } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.ILaunchesListener2#launchesTerminated(org.eclipse.debug.core.ILaunch[]) + */ + public void launchesTerminated(ILaunch[] launches) { + if (fObject instanceof IDebugElement) { + IDebugElement element = (IDebugElement)fObject; + for (int i = 0; i < launches.length; i++) { + ILaunch launch = launches[i]; + if (launch.equals(element.getLaunch())) { + closeEditor(); + return; + } + } + } + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.ILaunchesListener#launchesRemoved(org.eclipse.debug.core.ILaunch[]) + */ + public void launchesRemoved(ILaunch[] launches) { + launchesTerminated(launches); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.ILaunchesListener#launchesAdded(org.eclipse.debug.core.ILaunch[]) + */ + public void launchesAdded(ILaunch[] launches) { + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.ILaunchesListener#launchesChanged(org.eclipse.debug.core.ILaunch[]) + */ + public void launchesChanged(ILaunch[] launches) { + } } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/EditSourceLookupPathAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/EditSourceLookupPathAction.java index 2d57596cf..641b01435 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/EditSourceLookupPathAction.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/EditSourceLookupPathAction.java @@ -19,9 +19,11 @@ import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; import org.eclipse.debug.internal.ui.views.launch.LaunchView; import org.eclipse.debug.ui.DebugUITools; import org.eclipse.debug.ui.sourcelookup.SourceLookupDialog; +import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.window.Window; import org.eclipse.swt.widgets.Shell; +import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.actions.SelectionListenerAction; @@ -71,7 +73,14 @@ public class EditSourceLookupPathAction extends SelectionListenerAction { Shell shell = DebugUIPlugin.getShell(); SourceLookupDialog dialog = new SourceLookupDialog(shell, director); if (dialog.open() == Window.OK) { - fView.redoSourceLookup(); + ISelection selection = fView.getViewer().getSelection(); + if (selection instanceof IStructuredSelection) { + IStructuredSelection ss = (IStructuredSelection) selection; + if (ss.size() == 1) { + IWorkbenchPage page = fView.getSite().getPage(); + SourceLookupManager.getDefault().displaySource(ss.getFirstElement(), page, true); + } + } } } } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/LookupSourceAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/LookupSourceAction.java index 992e6cae6..8d13d4e49 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/LookupSourceAction.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/LookupSourceAction.java @@ -15,7 +15,9 @@ import org.eclipse.debug.core.model.IStackFrame; import org.eclipse.debug.core.sourcelookup.ISourceLookupDirector; import org.eclipse.debug.internal.ui.IDebugHelpContextIds; import org.eclipse.debug.internal.ui.views.launch.LaunchView; +import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.actions.SelectionListenerAction; @@ -60,7 +62,13 @@ public class LookupSourceAction extends SelectionListenerAction { * @see org.eclipse.jface.action.IAction#run() */ public void run() { - director.clearSourceElements(frame); - fView.redoSourceLookup(); + ISelection selection = fView.getViewer().getSelection(); + if (selection instanceof IStructuredSelection) { + IStructuredSelection ss = (IStructuredSelection) selection; + if (ss.size() == 1) { + IWorkbenchPage page = fView.getSite().getPage(); + SourceLookupManager.getDefault().displaySource(ss.getFirstElement(), page, true); + } + } } } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceLookupManager.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceLookupManager.java index 952350436..50dc8a3d9 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceLookupManager.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceLookupManager.java @@ -15,6 +15,7 @@ import java.util.Map; import org.eclipse.ui.IWindowListener; import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; @@ -83,4 +84,15 @@ public class SourceLookupManager implements IWindowListener { SourceLookupService service = new SourceLookupService(window); fServices.put(window, service); } + + /* (non-Javadoc) + * @see org.eclipse.debug.internal.ui.contexts.ISourceDisplayAdapter#displaySource(java.lang.Object, org.eclipse.ui.IWorkbenchPage, boolean) + */ + public void displaySource(Object context, IWorkbenchPage page, boolean forceSourceLookup) { + IWorkbenchWindow window = page.getWorkbenchWindow(); + SourceLookupService service = (SourceLookupService) fServices.get(window); + if (service != null) { + service.displaySource(context, page, forceSourceLookup); + } + } } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceLookupService.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceLookupService.java index 13d9303b9..ef7ef5b17 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceLookupService.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/sourcelookup/SourceLookupService.java @@ -12,8 +12,8 @@ package org.eclipse.debug.internal.ui.sourcelookup; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.debug.internal.ui.contexts.DebugContextManager; -import org.eclipse.debug.ui.contexts.IDebugContextListener; -import org.eclipse.debug.ui.contexts.ISourceDisplayAdapter; +import org.eclipse.debug.internal.ui.contexts.IDebugContextListener; +import org.eclipse.debug.internal.ui.contexts.ISourceDisplayAdapter; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.IWorkbenchPage; @@ -25,7 +25,7 @@ import org.eclipse.ui.IWorkbenchWindow; * * @since 3.2 */ -public class SourceLookupService implements IDebugContextListener { +public class SourceLookupService implements IDebugContextListener, ISourceDisplayAdapter { private IWorkbenchWindow fWindow; @@ -47,19 +47,13 @@ public class SourceLookupService implements IDebugContextListener { IStructuredSelection structuredSelection = (IStructuredSelection)selection; if (structuredSelection.size() == 1) { Object context = (structuredSelection).getFirstElement(); - if (context instanceof IAdaptable) { - IAdaptable adaptable = (IAdaptable) context; - ISourceDisplayAdapter adapter = (ISourceDisplayAdapter) adaptable.getAdapter(ISourceDisplayAdapter.class); - if (adapter != null) { - IWorkbenchPage page = null; - if (part == null) { - page = fWindow.getActivePage(); - } else { - page = part.getSite().getPage(); - } - adapter.displaySource(context, page); - } - } + IWorkbenchPage page = null; + if (part == null) { + page = fWindow.getActivePage(); + } else { + page = part.getSite().getPage(); + } + displaySource(context, page, false); } } } @@ -68,5 +62,18 @@ public class SourceLookupService implements IDebugContextListener { * @see org.eclipse.debug.ui.contexts.IDebugContextListener#contextChanged(org.eclipse.jface.viewers.ISelection, org.eclipse.ui.IWorkbenchPart) */ public void contextChanged(ISelection selection, IWorkbenchPart part) { + } + + /* (non-Javadoc) + * @see org.eclipse.debug.internal.ui.contexts.ISourceDisplayAdapter#displaySource(java.lang.Object, org.eclipse.ui.IWorkbenchPage, boolean) + */ + public void displaySource(Object context, IWorkbenchPage page, boolean forceSourceLookup) { + if (context instanceof IAdaptable) { + IAdaptable adaptable = (IAdaptable) context; + ISourceDisplayAdapter adapter = (ISourceDisplayAdapter) adaptable.getAdapter(ISourceDisplayAdapter.class); + if (adapter != null) { + adapter.displaySource(context, page, forceSourceLookup); + } + } } } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/DefaultWatchExpressionModelProxy.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/DefaultWatchExpressionModelProxy.java index be37402c3..4c468d67c 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/DefaultWatchExpressionModelProxy.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/DefaultWatchExpressionModelProxy.java @@ -14,7 +14,7 @@ import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.model.IDebugElement; import org.eclipse.debug.core.model.IWatchExpression; import org.eclipse.debug.internal.ui.contexts.DebugContextManager; -import org.eclipse.debug.ui.contexts.IDebugContextListener; +import org.eclipse.debug.internal.ui.contexts.IDebugContextListener; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.IWorkbenchPart; diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleRemoveAllTerminatedAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleRemoveAllTerminatedAction.java index a6caeba01..cd44301c0 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleRemoveAllTerminatedAction.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleRemoveAllTerminatedAction.java @@ -10,13 +10,9 @@ *******************************************************************************/ package org.eclipse.debug.internal.ui.views.console; -import org.eclipse.debug.core.DebugEvent; import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.IDebugEventSetListener; import org.eclipse.debug.core.ILaunch; -import org.eclipse.debug.core.ILaunchesListener; -import org.eclipse.debug.core.model.IDebugTarget; -import org.eclipse.debug.core.model.IProcess; +import org.eclipse.debug.core.ILaunchesListener2; import org.eclipse.debug.internal.ui.DebugPluginImages; import org.eclipse.debug.internal.ui.IDebugHelpContextIds; import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; @@ -29,24 +25,9 @@ import org.eclipse.ui.texteditor.IUpdate; /** * ConsoleRemoveAllTerminatedAction */ -public class ConsoleRemoveAllTerminatedAction extends Action implements IUpdate, IDebugEventSetListener, ILaunchesListener { - - /* (non-Javadoc) - * @see org.eclipse.debug.core.IDebugEventSetListener#handleDebugEvents(org.eclipse.debug.core.DebugEvent[]) - */ - public void handleDebugEvents(DebugEvent[] events) { - for (int i = 0; i < events.length; i++) { - DebugEvent event = events[i]; - Object source = event.getSource(); - if (event.getKind() == DebugEvent.TERMINATE && (source instanceof IDebugTarget || source instanceof IProcess)) { - update(); - } - } - - } +public class ConsoleRemoveAllTerminatedAction extends Action implements IUpdate, ILaunchesListener2 { public void dispose() { - DebugPlugin.getDefault().removeDebugEventListener(this); DebugPlugin.getDefault().getLaunchManager().removeLaunchListener(this); } @@ -81,7 +62,6 @@ public class ConsoleRemoveAllTerminatedAction extends Action implements IUpdate, setImageDescriptor(DebugPluginImages.getImageDescriptor(IDebugUIConstants.IMG_LCL_REMOVE_ALL)); setDisabledImageDescriptor(DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_DLCL_REMOVE_ALL)); setHoverImageDescriptor(DebugPluginImages.getImageDescriptor(IDebugUIConstants.IMG_LCL_REMOVE_ALL)); - DebugPlugin.getDefault().addDebugEventListener(this); DebugPlugin.getDefault().getLaunchManager().addLaunchListener(this); update(); } @@ -105,5 +85,12 @@ public class ConsoleRemoveAllTerminatedAction extends Action implements IUpdate, * @see org.eclipse.debug.core.ILaunchesListener#launchesChanged(org.eclipse.debug.core.ILaunch[]) */ public void launchesChanged(ILaunch[] launches) { - } + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.ILaunchesListener2#launchesTerminated(org.eclipse.debug.core.ILaunch[]) + */ + public void launchesTerminated(ILaunch[] launches) { + update(); + } } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleRemoveLaunchAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleRemoveLaunchAction.java index 3cc7a9a98..558269649 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleRemoveLaunchAction.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ConsoleRemoveLaunchAction.java @@ -10,15 +10,11 @@ *******************************************************************************/ package org.eclipse.debug.internal.ui.views.console; -import org.eclipse.debug.core.DebugEvent; import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.IDebugEventSetListener; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.ILaunchManager; -import org.eclipse.debug.core.model.IDebugTarget; -import org.eclipse.debug.core.model.IProcess; +import org.eclipse.debug.core.ILaunchesListener2; import org.eclipse.debug.internal.ui.DebugPluginImages; -import org.eclipse.debug.internal.ui.DebugUIPlugin; import org.eclipse.debug.internal.ui.IDebugHelpContextIds; import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; import org.eclipse.debug.ui.IDebugUIConstants; @@ -27,25 +23,19 @@ import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; import org.eclipse.ui.IViewActionDelegate; import org.eclipse.ui.IViewPart; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.console.ConsolePlugin; import org.eclipse.ui.console.IConsole; -import org.eclipse.ui.console.IConsoleConstants; import org.eclipse.ui.console.IConsoleListener; -import org.eclipse.ui.console.IConsoleView; /** * ConsoleRemoveTerminatedAction */ -public class ConsoleRemoveLaunchAction extends Action implements IDebugEventSetListener, IViewActionDelegate, IConsoleListener { +public class ConsoleRemoveLaunchAction extends Action implements IViewActionDelegate, IConsoleListener, ILaunchesListener2 { private ILaunch fLaunch; - private IConsoleView fConsoleView; - - public ConsoleRemoveLaunchAction() { + public ConsoleRemoveLaunchAction(ILaunch launch) { super(ConsoleMessages.ConsoleRemoveTerminatedAction_0); setToolTipText(ConsoleMessages.ConsoleRemoveTerminatedAction_1); @@ -53,46 +43,19 @@ public class ConsoleRemoveLaunchAction extends Action implements IDebugEventSetL setImageDescriptor(DebugPluginImages.getImageDescriptor(IDebugUIConstants.IMG_LCL_REMOVE)); setDisabledImageDescriptor(DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_DLCL_REMOVE)); setHoverImageDescriptor(DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_ELCL_REMOVE)); - DebugPlugin.getDefault().addDebugEventListener(this); + DebugPlugin.getDefault().getLaunchManager().addLaunchListener(this); ConsolePlugin.getDefault().getConsoleManager().addConsoleListener(this); + fLaunch = launch; update(); } public void dispose() { - DebugPlugin.getDefault().removeDebugEventListener(this); + DebugPlugin.getDefault().getLaunchManager().removeLaunchListener(this); ConsolePlugin.getDefault().getConsoleManager().removeConsoleListener(this); } public synchronized void update() { - if (fConsoleView == null) { - IWorkbenchWindow activeWorkbenchWindow = DebugUIPlugin.getActiveWorkbenchWindow(); - if (activeWorkbenchWindow != null) { - IWorkbenchPage activePage = activeWorkbenchWindow.getActivePage(); - if (activePage != null) { - fConsoleView = (IConsoleView) activePage.findView(IConsoleConstants.ID_CONSOLE_VIEW); - } - } - } - - if (fConsoleView != null) { - DebugUIPlugin.getStandardDisplay().asyncExec(new Runnable() { - public void run() { - IConsole console = fConsoleView.getConsole(); - if (console instanceof ProcessConsole) { - ProcessConsole processConsole = (ProcessConsole) console; - IProcess process = processConsole.getProcess(); - ILaunch launch = process.getLaunch(); - if (launch.isTerminated()) { - setEnabled(true); - fLaunch = launch; - return; - } - } - } - }); - } - fLaunch = null; - setEnabled(false); + setEnabled(fLaunch.isTerminated()); } public synchronized void run() { @@ -100,18 +63,7 @@ public class ConsoleRemoveLaunchAction extends Action implements IDebugEventSetL launchManager.removeLaunch(fLaunch); } - public void handleDebugEvents(DebugEvent[] events) { - for (int i = 0; i < events.length; i++) { - DebugEvent event = events[i]; - Object source = event.getSource(); - if (event.getKind() == DebugEvent.TERMINATE && (source instanceof IDebugTarget || source instanceof IProcess)) { - update(); - } - } - } - public void init(IViewPart view) { - fConsoleView = (IConsoleView) view; } public void run(IAction action) { @@ -127,4 +79,29 @@ public class ConsoleRemoveLaunchAction extends Action implements IDebugEventSetL public void consolesRemoved(IConsole[] consoles) { update(); } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.ILaunchesListener2#launchesTerminated(org.eclipse.debug.core.ILaunch[]) + */ + public void launchesTerminated(ILaunch[] launches) { + update(); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.ILaunchesListener#launchesRemoved(org.eclipse.debug.core.ILaunch[]) + */ + public void launchesRemoved(ILaunch[] launches) { + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.ILaunchesListener#launchesAdded(org.eclipse.debug.core.ILaunch[]) + */ + public void launchesAdded(ILaunch[] launches) { + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.ILaunchesListener#launchesChanged(org.eclipse.debug.core.ILaunch[]) + */ + public void launchesChanged(ILaunch[] launches) { + } } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ProcessConsolePageParticipant.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ProcessConsolePageParticipant.java index dda224bbf..63148d2cc 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ProcessConsolePageParticipant.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/console/ProcessConsolePageParticipant.java @@ -96,7 +96,7 @@ public class ProcessConsolePageParticipant implements IConsolePageParticipant, I fPage = page; fConsole = (ProcessConsole) console; - fRemoveTerminated = new ConsoleRemoveLaunchAction(); + fRemoveTerminated = new ConsoleRemoveLaunchAction(fConsole.getProcess().getLaunch()); fRemoveAllTerminated = new ConsoleRemoveAllTerminatedAction(); fTerminate = new ConsoleTerminateAction(fConsole); diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/DebugElementAdapterFactory.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/DebugElementAdapterFactory.java index f0bf6f2ee..e43953adb 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/DebugElementAdapterFactory.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/DebugElementAdapterFactory.java @@ -22,6 +22,7 @@ import org.eclipse.debug.core.model.IRegisterGroup; import org.eclipse.debug.core.model.IStackFrame; import org.eclipse.debug.core.model.IThread; import org.eclipse.debug.core.model.IVariable; +import org.eclipse.debug.internal.ui.contexts.ISourceDisplayAdapter; import org.eclipse.debug.internal.ui.elements.adapters.AsynchronousDebugLabelAdapter; import org.eclipse.debug.internal.ui.elements.adapters.DebugTargetTreeContentAdapter; import org.eclipse.debug.internal.ui.elements.adapters.ExpressionManagerTreeContentAdapter; @@ -41,7 +42,6 @@ import org.eclipse.debug.internal.ui.viewers.IModelProxyFactory; import org.eclipse.debug.internal.ui.viewers.IModelSelectionPolicy; import org.eclipse.debug.internal.ui.viewers.update.DefaultModelProxyFactory; import org.eclipse.debug.internal.ui.viewers.update.DefaultSelectionPolicy; -import org.eclipse.debug.ui.contexts.ISourceDisplayAdapter; import org.eclipse.ui.model.IWorkbenchAdapter; import org.eclipse.ui.model.IWorkbenchAdapter2; import org.eclipse.ui.progress.IDeferredWorkbenchAdapter; diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchView.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchView.java index 88fcd82c9..fe0d7c2dd 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchView.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchView.java @@ -14,15 +14,8 @@ package org.eclipse.debug.internal.ui.views.launch; import java.util.Iterator; import org.eclipse.core.commands.util.ListenerList; -import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IResourceChangeEvent; -import org.eclipse.core.resources.IResourceChangeListener; -import org.eclipse.core.resources.IResourceDelta; import org.eclipse.core.resources.IResourceDeltaVisitor; -import org.eclipse.core.resources.IWorkspaceRoot; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.ISafeRunnable; @@ -45,10 +38,11 @@ import org.eclipse.debug.internal.ui.DebugUIPlugin; import org.eclipse.debug.internal.ui.DelegatingModelPresentation; import org.eclipse.debug.internal.ui.IDebugHelpContextIds; import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; -import org.eclipse.debug.internal.ui.InstructionPointerManager; import org.eclipse.debug.internal.ui.actions.AddToFavoritesAction; import org.eclipse.debug.internal.ui.actions.EditLaunchConfigurationAction; import org.eclipse.debug.internal.ui.contexts.DebugContextManager; +import org.eclipse.debug.internal.ui.contexts.IDebugContextListener; +import org.eclipse.debug.internal.ui.contexts.IDebugContextProvider; import org.eclipse.debug.internal.ui.sourcelookup.EditSourceLookupPathAction; import org.eclipse.debug.internal.ui.sourcelookup.LookupSourceAction; import org.eclipse.debug.internal.ui.viewers.AsynchronousTreeViewer; @@ -60,8 +54,6 @@ import org.eclipse.debug.ui.AbstractDebugView; import org.eclipse.debug.ui.IDebugEditorPresentation; import org.eclipse.debug.ui.IDebugModelPresentation; import org.eclipse.debug.ui.IDebugUIConstants; -import org.eclipse.debug.ui.contexts.IDebugContextListener; -import org.eclipse.debug.ui.contexts.IDebugContextProvider; import org.eclipse.jface.action.GroupMarker; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; @@ -101,16 +93,10 @@ import org.eclipse.ui.part.IShowInTarget; import org.eclipse.ui.part.IShowInTargetList; import org.eclipse.ui.part.ShowInContext; -public class LaunchView extends AbstractDebugView implements ISelectionChangedListener, IPerspectiveListener2, IPageListener, IPropertyChangeListener, IResourceChangeListener, IShowInTarget, IShowInSource, IShowInTargetList, IPartListener2 { +public class LaunchView extends AbstractDebugView implements ISelectionChangedListener, IPerspectiveListener2, IPageListener, IPropertyChangeListener, IShowInTarget, IShowInSource, IShowInTargetList, IPartListener2 { public static final String ID_CONTEXT_ACTIVITY_BINDINGS = "contextActivityBindings"; //$NON-NLS-1$ - /**s - * Cache of the stack frame that source was displayed - * for. - */ - private IStackFrame fStackFrame = null; - /** * Whether this view is in the active page of a perspective. */ @@ -228,7 +214,6 @@ public class LaunchView extends AbstractDebugView implements ISelectionChangedLi */ public LaunchView() { DebugUIPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(this); - ResourcesPlugin.getWorkspace().addResourceChangeListener(this); } /* (non-Javadoc) @@ -502,19 +487,9 @@ public class LaunchView extends AbstractDebugView implements ISelectionChangedLi window.removePerspectiveListener(this); window.removePageListener(this); - cleanup(); - DebugUIPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(this); - ResourcesPlugin.getWorkspace().removeResourceChangeListener(this); super.dispose(); } - - /** - * Disposes of cached information - */ - protected void cleanup() { - setStackFrame(null); - } /** * The selection has changed in the viewer. Show the @@ -538,36 +513,6 @@ public class LaunchView extends AbstractDebugView implements ISelectionChangedLi fProvider.possibleContextChange(element); } - /** - * Lookup source element for current stack frame again. - */ - public void redoSourceLookup() { - setStackFrame(null); - selectionChanged(null); - } - - /** - * Notifies this view to clean up for the given launches (they've been terminated, - * removed, etc.). Remove all context submissions associated with these launches. - * Clear the cache of the last stack frame that source was displayed for - * if that launch is terminated. - * - * @param launches the terminated launches - */ - protected void cleanupLaunches(ILaunch[] launches) { - fContextListener.launchesTerminated(launches); - IStackFrame frame = getStackFrame(); - if (frame != null) { - ILaunch frameLaunch= frame.getLaunch(); - for (int i = 0; i < launches.length; i++) { - ILaunch launch = launches[i]; - if (launch.equals(frameLaunch)) { - setStackFrame(null); - } - } - } - } - /* (non-Javadoc) * @see org.eclipse.jface.viewers.IDoubleClickListener#doubleClick(org.eclipse.jface.viewers.DoubleClickEvent) */ @@ -647,24 +592,6 @@ public class LaunchView extends AbstractDebugView implements ISelectionChangedLi public IDebugModelPresentation getPresentation(String id) { return ((DelegatingModelPresentation)fEditorPresentation).getPresentation(id); } - - /** - * Deselects any source decorations associated with the given thread or - * debug target. - * - * @param source thread or debug target - */ - public void clearSourceSelection(Object source) { - if (source instanceof IThread) { - IThread thread = (IThread)source; - DecorationManager.removeDecorations(thread); - InstructionPointerManager.getDefault().removeAnnotations(thread); - } else if (source instanceof IDebugTarget) { - IDebugTarget target = (IDebugTarget)source; - DecorationManager.removeDecorations(target); - InstructionPointerManager.getDefault().removeAnnotations(target); - } - } /* (non-Javadoc) * @see org.eclipse.debug.ui.AbstractDebugView#fillContextMenu(org.eclipse.jface.action.IMenuManager) @@ -743,29 +670,6 @@ public class LaunchView extends AbstractDebugView implements ISelectionChangedLi } } } - - /** - * Returns the last stack frame that source was retrieved - * for. Used to avoid source lookups for the same stack - * frame when stepping. - * - * @return stack frame, or <code>null</code> - */ - protected IStackFrame getStackFrame() { - return fStackFrame; - } - - /** - * Sets the last stack frame that source was retrieved - * for. Used to avoid source lookups for the same stack - * frame when stepping. Setting the stack frame to <code>null</code> - * effectively forces a source lookup. - * - * @param frame The stack frame or <code>null</code> - */ - protected void setStackFrame(IStackFrame frame) { - fStackFrame= frame; - } /** * Sets whether this view is in the active page of a @@ -806,74 +710,6 @@ public class LaunchView extends AbstractDebugView implements ISelectionChangedLi fContextListener.loadTrackViews(); } } - - /** - * Visitor for handling resource deltas. When a project is closed, we must clear - * the cache of editor input/stack frame, etc., as the elements can become invalid. - */ - class LaunchViewVisitor implements IResourceDeltaVisitor { - /* (non-Javadoc) - * @see org.eclipse.core.resources.IResourceDeltaVisitor#visit(org.eclipse.core.resources.IResourceDelta) - */ - public boolean visit(IResourceDelta delta) { - if (delta == null) { - return false; - } - IResource resource = delta.getResource(); - if (0 != (delta.getFlags() & IResourceDelta.OPEN)) { - if (resource instanceof IProject) { - IProject project = (IProject)resource; - if (!project.isOpen()) { - // clear - cleanup(); - } - } - return false; - } - return resource instanceof IWorkspaceRoot; - } - } - - /* (non-Javadoc) - * @see org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org.eclipse.core.resources.IResourceChangeEvent) - */ - public void resourceChanged(IResourceChangeEvent event) { - IResourceDelta delta= event.getDelta(); - if (delta != null) { - try { - delta.accept(getVisitor()); - } catch (CoreException e) { - DebugUIPlugin.log(e); - } - } - } - - /** - * Returns the resource delta visitor for this view, - * creating if required. - * - * @return resource delta visitor - */ - protected IResourceDeltaVisitor getVisitor() { - if (fVisitor == null) { - fVisitor = new LaunchViewVisitor(); - } - return fVisitor; - } - - /** - * When this view becomes visible, selects the last stack frame whose - * location was revealed. - * - * @see org.eclipse.debug.ui.AbstractDebugView#becomesVisible() - */ - protected void becomesVisible() { - super.becomesVisible(); - IStructuredSelection selection= (IStructuredSelection) getViewer().getSelection(); - if (selection.isEmpty() || !selection.getFirstElement().equals(getStackFrame())) { - initializeSelection(); - } - } /* (non-Javadoc) * @see org.eclipse.ui.part.IShowInTarget#show(org.eclipse.ui.part.ShowInContext) diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/variables/VariablesView.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/variables/VariablesView.java index 9be1eaa19..c42134f7b 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/variables/VariablesView.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/variables/VariablesView.java @@ -46,6 +46,7 @@ import org.eclipse.debug.internal.ui.actions.ShowTypesAction; import org.eclipse.debug.internal.ui.actions.ToggleDetailPaneAction; import org.eclipse.debug.internal.ui.actions.context.FindVariableAction; import org.eclipse.debug.internal.ui.contexts.DebugContextManager; +import org.eclipse.debug.internal.ui.contexts.IDebugContextListener; import org.eclipse.debug.internal.ui.preferences.IDebugPreferenceConstants; import org.eclipse.debug.internal.ui.viewers.AsynchronousTreeViewer; import org.eclipse.debug.internal.ui.viewers.PresentationContext; @@ -55,7 +56,6 @@ import org.eclipse.debug.ui.AbstractDebugView; import org.eclipse.debug.ui.IDebugModelPresentation; import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.debug.ui.IValueDetailListener; -import org.eclipse.debug.ui.contexts.IDebugContextListener; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IMenuListener; |