Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoreutarass2009-04-20 23:40:18 +0000
committereutarass2009-04-20 23:40:18 +0000
commit851bca5c584001206952e2bfcec8f3ae1a38f6b3 (patch)
treee53975c0eb933eb33b73e76adc7fb69b87d561db
parent9738bba29b873ebe6a7ba166c6e67215bcb81745 (diff)
downloadorg.eclipse.tcf-851bca5c584001206952e2bfcec8f3ae1a38f6b3.tar.gz
org.eclipse.tcf-851bca5c584001206952e2bfcec8f3ae1a38f6b3.tar.xz
org.eclipse.tcf-851bca5c584001206952e2bfcec8f3ae1a38f6b3.zip
TCF Debugger UI: Implemented ISuspendTrigger adapter
-rw-r--r--plugins/org.eclipse.tm.tcf.debug.ui/plugin.xml1
-rw-r--r--plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/adapters/TCFLaunchAdapterFactory.java2
-rw-r--r--plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFAnnotationManager.java2
-rw-r--r--plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFModel.java45
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);
+ };
+ }
+ }
+ });
+ }
}

Back to the top