diff options
author | eutarass | 2009-04-20 23:40:18 +0000 |
---|---|---|
committer | eutarass | 2009-04-20 23:40:18 +0000 |
commit | 851bca5c584001206952e2bfcec8f3ae1a38f6b3 (patch) | |
tree | e53975c0eb933eb33b73e76adc7fb69b87d561db | |
parent | 9738bba29b873ebe6a7ba166c6e67215bcb81745 (diff) | |
download | org.eclipse.tcf-851bca5c584001206952e2bfcec8f3ae1a38f6b3.tar.gz org.eclipse.tcf-851bca5c584001206952e2bfcec8f3ae1a38f6b3.tar.xz org.eclipse.tcf-851bca5c584001206952e2bfcec8f3ae1a38f6b3.zip |
TCF Debugger UI: Implemented ISuspendTrigger adapter
4 files changed, 47 insertions, 3 deletions
diff --git a/plugins/org.eclipse.tm.tcf.debug.ui/plugin.xml b/plugins/org.eclipse.tm.tcf.debug.ui/plugin.xml index 0fb1f4f2e..5393b8e64 100644 --- a/plugins/org.eclipse.tm.tcf.debug.ui/plugin.xml +++ b/plugins/org.eclipse.tm.tcf.debug.ui/plugin.xml @@ -15,6 +15,7 @@ <adapter type="org.eclipse.debug.internal.ui.viewers.model.provisional.IElementContentProvider"/> <adapter type="org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider"/> <adapter type="org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxyFactory"/> + <adapter type="org.eclipse.debug.ui.contexts.ISuspendTrigger"/> </factory> <factory class="org.eclipse.tm.internal.tcf.debug.ui.adapters.TCFNodeAdapterFactory" diff --git a/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/adapters/TCFLaunchAdapterFactory.java b/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/adapters/TCFLaunchAdapterFactory.java index 149b8431b..e9d9c122b 100644 --- a/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/adapters/TCFLaunchAdapterFactory.java +++ b/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/adapters/TCFLaunchAdapterFactory.java @@ -14,6 +14,7 @@ import org.eclipse.core.runtime.IAdapterFactory; import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementContentProvider; import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxyFactory; +import org.eclipse.debug.ui.contexts.ISuspendTrigger; import org.eclipse.tm.internal.tcf.debug.model.TCFLaunch; import org.eclipse.tm.internal.tcf.debug.ui.Activator; import org.eclipse.tm.internal.tcf.debug.ui.model.TCFModel; @@ -27,6 +28,7 @@ public class TCFLaunchAdapterFactory implements IAdapterFactory { IElementLabelProvider.class, IElementContentProvider.class, IModelProxyFactory.class, + ISuspendTrigger.class, }; private static final IElementLabelProvider launch_label_provider = new TCFLaunchLabelProvider(); diff --git a/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFAnnotationManager.java b/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFAnnotationManager.java index a475cdc06..4261556d4 100644 --- a/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFAnnotationManager.java +++ b/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFAnnotationManager.java @@ -183,7 +183,7 @@ public class TCFAnnotationManager { } }; - private final Display display = Display.getDefault(); + private final Display display = PlatformUI.getWorkbench().getDisplay(); private int refresh_breakpoint_view_cnt = 0; private int update_active_launch_cnt = 0; private boolean disposed; diff --git a/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFModel.java b/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFModel.java index 0545a5e0c..573848934 100644 --- a/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFModel.java +++ b/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFModel.java @@ -14,6 +14,8 @@ import java.io.IOException; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; import java.util.Map; import org.eclipse.core.runtime.CoreException; @@ -56,6 +58,8 @@ import org.eclipse.ui.console.IConsoleManager; import org.eclipse.ui.console.IConsoleView; import org.eclipse.ui.console.MessageConsole; import org.eclipse.ui.console.MessageConsoleStream; +import org.eclipse.debug.ui.contexts.ISuspendTrigger; +import org.eclipse.debug.ui.contexts.ISuspendTriggerListener; import org.eclipse.debug.ui.sourcelookup.CommonSourceNotFoundEditorInput; import org.eclipse.debug.ui.sourcelookup.ISourceDisplay; import org.eclipse.jface.text.BadLocationException; @@ -104,11 +108,16 @@ import org.eclipse.ui.texteditor.ITextEditor; * keeping the cache in a coherent state, and feeding UI with up-to-date data. */ public class TCFModel implements IElementContentProvider, IElementLabelProvider, - IModelProxyFactory, IColumnPresentationFactory, ISourceDisplay { + IModelProxyFactory, IColumnPresentationFactory, ISourceDisplay, ISuspendTrigger { private final TCFLaunch launch; private final Display display; + private final List<ISuspendTriggerListener> suspend_trigger_listeners = + new LinkedList<ISuspendTriggerListener>(); + + private int suspend_trigger_generation; + private final Map<IPresentationContext,TCFModelProxy> model_proxies = new HashMap<IPresentationContext,TCFModelProxy>(); @@ -219,6 +228,7 @@ public class TCFModel implements IElementContentProvider, IElementLabelProvider, ((TCFNodeExecContext)node).onContextSuspended(pc, reason, params); } fireModelChanged(); + runSuspendTrigger(); } public void contextAdded(IRunControl.RunControlContext[] contexts) { @@ -280,6 +290,7 @@ public class TCFModel implements IElementContentProvider, IElementLabelProvider, setDebugViewSelection(context, false); } fireModelChanged(); + runSuspendTrigger(); display.asyncExec(new Runnable() { public void run() { Activator.getAnnotationManager().onContextSuspended(TCFModel.this, context); @@ -328,7 +339,7 @@ public class TCFModel implements IElementContentProvider, IElementLabelProvider, TCFModel(TCFLaunch launch) { this.launch = launch; - display = Display.getDefault(); + display = PlatformUI.getWorkbench().getDisplay(); selection_policy = new TCFModelSelectionPolicy(this); commands.put(ISuspendHandler.class, new SuspendCommand(this)); commands.put(IResumeHandler.class, new ResumeCommand(this)); @@ -982,5 +993,35 @@ public class TCFModel implements IElementContentProvider, IElementLabelProvider, provider.disconnect(input); } return null; + } + + public synchronized void addSuspendTriggerListener(ISuspendTriggerListener listener) { + suspend_trigger_listeners.add(listener); + } + + public synchronized void removeSuspendTriggerListener(ISuspendTriggerListener listener) { + suspend_trigger_listeners.remove(listener); } + + private synchronized void runSuspendTrigger() { + final int generation = ++suspend_trigger_generation; + final ISuspendTriggerListener[] listeners = suspend_trigger_listeners.toArray( + new ISuspendTriggerListener[suspend_trigger_listeners.size()]); + if (listeners.length == 0) return; + display.asyncExec(new Runnable() { + public void run() { + synchronized (TCFModel.this) { + if (generation != suspend_trigger_generation) return; + } + for (final ISuspendTriggerListener listener : listeners) { + try { + listener.suspended(launch, null); + } + catch (Throwable x) { + Activator.log(x); + }; + } + } + }); + } } |