diff options
author | Uwe Stieber | 2012-02-22 13:15:57 +0000 |
---|---|---|
committer | Uwe Stieber | 2012-02-22 13:15:57 +0000 |
commit | 3d557ba75c9d6914620d352384fb9820a740ea88 (patch) | |
tree | 50165172a3ca224b51d82db7938b27c5a5fd4e53 /target_explorer | |
parent | b57e418e3be56fefd803d3c4c8f1b18b0d156498 (diff) | |
download | org.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')
2 files changed, 46 insertions, 1 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;
+ }
}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.locator/src/org/eclipse/tcf/te/tcf/locator/nodes/PeerModel.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.locator/src/org/eclipse/tcf/te/tcf/locator/nodes/PeerModel.java index d7df59572..0aa5da9e6 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.locator/src/org/eclipse/tcf/te/tcf/locator/nodes/PeerModel.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.locator/src/org/eclipse/tcf/te/tcf/locator/nodes/PeerModel.java @@ -162,11 +162,13 @@ public class PeerModel extends ContainerModelNode implements IPeerModel, IWorkin protected Object doGetAdapter(Class<?> adapter) { Assert.isTrue(checkThreadAccess(), "Illegal Thread Access"); //$NON-NLS-1$ - if (adapter.isAssignableFrom(ILocatorModel.class)) { + if (ILocatorModel.class.equals(adapter)) { return model; } Object peer = getProperty(IPeerModelProperties.PROP_INSTANCE); + // Check with adapter.isAssignableFrom(...) to return the peer instance + // correctly if adapter is IPeer.class. if (peer != null && adapter.isAssignableFrom(peer.getClass())) { return peer; } |