Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUwe Stieber2012-02-22 13:15:57 +0000
committerUwe Stieber2012-02-22 13:15:57 +0000
commit3d557ba75c9d6914620d352384fb9820a740ea88 (patch)
tree50165172a3ca224b51d82db7938b27c5a5fd4e53 /target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core
parentb57e418e3be56fefd803d3c4c8f1b18b0d156498 (diff)
downloadorg.eclipse.tcf-3d557ba75c9d6914620d352384fb9820a740ea88.tar.gz
org.eclipse.tcf-3d557ba75c9d6914620d352384fb9820a740ea88.tar.xz
org.eclipse.tcf-3d557ba75c9d6914620d352384fb9820a740ea88.zip
Target Explorer: Implement adapter possibilities for peer model step contexts
Diffstat (limited to 'target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core')
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core/src/org/eclipse/tcf/te/tcf/launch/core/internal/adapters/StepContextAdapter.java43
1 files changed, 43 insertions, 0 deletions
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core/src/org/eclipse/tcf/te/tcf/launch/core/internal/adapters/StepContextAdapter.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core/src/org/eclipse/tcf/te/tcf/launch/core/internal/adapters/StepContextAdapter.java
index 2e21b7c3a..0ccb2414c 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core/src/org/eclipse/tcf/te/tcf/launch/core/internal/adapters/StepContextAdapter.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core/src/org/eclipse/tcf/te/tcf/launch/core/internal/adapters/StepContextAdapter.java
@@ -221,4 +221,47 @@ public class StepContextAdapter extends PlatformObject implements IStepContext {
if (error.get() != null) throw error.get();
}
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.runtime.PlatformObject#getAdapter(java.lang.Class)
+ */
+ @Override
+ public Object getAdapter(final Class adapter) {
+ // NOTE: The getAdapter(...) method can be invoked from many place and
+ // many threads where we cannot control the calls. Therefore, this
+ // method is allowed be called from any thread.
+ final AtomicReference<Object> object = new AtomicReference<Object>();
+ Runnable runnable = new Runnable() {
+ @Override
+ public void run() {
+ object.set(doGetAdapter(adapter));
+ }
+ };
+
+ if (Protocol.isDispatchThread()) runnable.run();
+ else Protocol.invokeAndWait(runnable);
+
+ return object.get() != null ? object.get() : super.getAdapter(adapter);
+ }
+
+ /**
+ * Returns an object which is an instance of the given class associated with this object.
+ * Returns <code>null</code> if no such object can be found.
+ * <p>
+ * This method must be called within the TCF dispatch thread!
+ *
+ * @param adapter The adapter class to look up.
+ * @return The adapter or <code>null</code>.
+ */
+ protected Object doGetAdapter(Class<?> adapter) {
+ if (IModelNode.class.isAssignableFrom(adapter)) {
+ return peerModel;
+ }
+
+ if (IPeer.class.equals(adapter)) {
+ return peerModel.getPeer();
+ }
+
+ return null;
+ }
}

Back to the top