Add extension support to InspectorSonarPlugin
Summary: This mirrors the extension support added to the desktop plugin and allows people to dynamically add extension commands Reviewed By: danielbuechele Differential Revision: D8691167 fbshipit-source-id: 60136b960f8bbdfa42b2077d1f5f7b391fc44443
This commit is contained in:
committed by
Facebook Github Bot
parent
44f561a683
commit
e6fa377d75
@@ -38,6 +38,19 @@ public class InspectorSonarPlugin implements SonarPlugin {
|
|||||||
private String mHighlightedId;
|
private String mHighlightedId;
|
||||||
private TouchOverlayView mTouchOverlay;
|
private TouchOverlayView mTouchOverlay;
|
||||||
private SonarConnection mConnection;
|
private SonarConnection mConnection;
|
||||||
|
private @Nullable List<ExtensionCommand> mExtensionCommands;
|
||||||
|
|
||||||
|
/** An interface for extensions to the Inspector Sonar plugin */
|
||||||
|
public interface ExtensionCommand {
|
||||||
|
/** The command to respond to */
|
||||||
|
String command();
|
||||||
|
/** The corresponding SonarReceiver for the command */
|
||||||
|
SonarReceiver receiver(ObjectTracker tracker, SonarConnection connection);
|
||||||
|
}
|
||||||
|
|
||||||
|
public InspectorSonarPlugin(Context context, DescriptorMapping descriptorMapping) {
|
||||||
|
this(context, descriptorMapping, new NullScriptingEnvironment());
|
||||||
|
}
|
||||||
|
|
||||||
public InspectorSonarPlugin(
|
public InspectorSonarPlugin(
|
||||||
Context context,
|
Context context,
|
||||||
@@ -46,23 +59,45 @@ public class InspectorSonarPlugin implements SonarPlugin {
|
|||||||
this(
|
this(
|
||||||
new ApplicationWrapper((Application) context.getApplicationContext()),
|
new ApplicationWrapper((Application) context.getApplicationContext()),
|
||||||
descriptorMapping,
|
descriptorMapping,
|
||||||
scriptingEnvironment);
|
scriptingEnvironment,
|
||||||
|
null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public InspectorSonarPlugin(Context context, DescriptorMapping descriptorMapping) {
|
public InspectorSonarPlugin(
|
||||||
this(context, descriptorMapping, new NullScriptingEnvironment());
|
Context context,
|
||||||
|
DescriptorMapping descriptorMapping,
|
||||||
|
@Nullable List<ExtensionCommand> extensions) {
|
||||||
|
this(
|
||||||
|
new ApplicationWrapper((Application) context.getApplicationContext()),
|
||||||
|
descriptorMapping,
|
||||||
|
new NullScriptingEnvironment(),
|
||||||
|
extensions);
|
||||||
|
}
|
||||||
|
|
||||||
|
public InspectorSonarPlugin(
|
||||||
|
Context context,
|
||||||
|
DescriptorMapping descriptorMapping,
|
||||||
|
ScriptingEnvironment scriptingEnvironment,
|
||||||
|
@Nullable List<ExtensionCommand> extensions) {
|
||||||
|
this(
|
||||||
|
new ApplicationWrapper((Application) context.getApplicationContext()),
|
||||||
|
descriptorMapping,
|
||||||
|
scriptingEnvironment,
|
||||||
|
extensions);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Package visible for testing
|
// Package visible for testing
|
||||||
InspectorSonarPlugin(
|
InspectorSonarPlugin(
|
||||||
ApplicationWrapper wrapper,
|
ApplicationWrapper wrapper,
|
||||||
DescriptorMapping descriptorMapping,
|
DescriptorMapping descriptorMapping,
|
||||||
ScriptingEnvironment scriptingEnvironment) {
|
ScriptingEnvironment scriptingEnvironment,
|
||||||
|
@Nullable List<ExtensionCommand> extensions) {
|
||||||
mDescriptorMapping = descriptorMapping;
|
mDescriptorMapping = descriptorMapping;
|
||||||
|
|
||||||
mObjectTracker = new ObjectTracker();
|
mObjectTracker = new ObjectTracker();
|
||||||
mApplication = wrapper;
|
mApplication = wrapper;
|
||||||
mScriptingEnvironment = scriptingEnvironment;
|
mScriptingEnvironment = scriptingEnvironment;
|
||||||
|
mExtensionCommands = extensions;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -91,6 +126,13 @@ public class InspectorSonarPlugin implements SonarPlugin {
|
|||||||
connection.receive("setHighlighted", mSetHighlighted);
|
connection.receive("setHighlighted", mSetHighlighted);
|
||||||
connection.receive("setSearchActive", mSetSearchActive);
|
connection.receive("setSearchActive", mSetSearchActive);
|
||||||
connection.receive("getSearchResults", mGetSearchResults);
|
connection.receive("getSearchResults", mGetSearchResults);
|
||||||
|
|
||||||
|
if (mExtensionCommands != null) {
|
||||||
|
for (ExtensionCommand extensionCommand : mExtensionCommands) {
|
||||||
|
connection.receive(
|
||||||
|
extensionCommand.command(), extensionCommand.receiver(mObjectTracker, mConnection));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -13,7 +13,9 @@ import java.util.HashMap;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
class ObjectTracker {
|
public class ObjectTracker {
|
||||||
|
ObjectTracker() {}
|
||||||
|
|
||||||
private final Map<String, WeakReference<Object>> mObjects = new HashMap<>();
|
private final Map<String, WeakReference<Object>> mObjects = new HashMap<>();
|
||||||
|
|
||||||
void put(String id, Object obj) {
|
void put(String id, Object obj) {
|
||||||
@@ -21,7 +23,7 @@ class ObjectTracker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
Object get(String id) {
|
public Object get(String id) {
|
||||||
final WeakReference<Object> weakObj = mObjects.get(id);
|
final WeakReference<Object> weakObj = mObjects.get(id);
|
||||||
if (weakObj == null) {
|
if (weakObj == null) {
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ public class InspectorSonarPluginTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testOnConnect() throws Exception {
|
public void testOnConnect() throws Exception {
|
||||||
final InspectorSonarPlugin plugin =
|
final InspectorSonarPlugin plugin =
|
||||||
new InspectorSonarPlugin(mApp, mDescriptorMapping, mScriptingEnvironment);
|
new InspectorSonarPlugin(mApp, mDescriptorMapping, mScriptingEnvironment, null);
|
||||||
final SonarConnection connection = new SonarConnectionMock();
|
final SonarConnection connection = new SonarConnectionMock();
|
||||||
|
|
||||||
plugin.onConnect(connection);
|
plugin.onConnect(connection);
|
||||||
@@ -72,7 +72,7 @@ public class InspectorSonarPluginTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testOnDisconnect() throws Exception {
|
public void testOnDisconnect() throws Exception {
|
||||||
final InspectorSonarPlugin plugin =
|
final InspectorSonarPlugin plugin =
|
||||||
new InspectorSonarPlugin(mApp, mDescriptorMapping, mScriptingEnvironment);
|
new InspectorSonarPlugin(mApp, mDescriptorMapping, mScriptingEnvironment, null);
|
||||||
final SonarConnection connection = new SonarConnectionMock();
|
final SonarConnection connection = new SonarConnectionMock();
|
||||||
|
|
||||||
plugin.onConnect(connection);
|
plugin.onConnect(connection);
|
||||||
@@ -83,7 +83,7 @@ public class InspectorSonarPluginTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testGetRoot() throws Exception {
|
public void testGetRoot() throws Exception {
|
||||||
final InspectorSonarPlugin plugin =
|
final InspectorSonarPlugin plugin =
|
||||||
new InspectorSonarPlugin(mApp, mDescriptorMapping, mScriptingEnvironment);
|
new InspectorSonarPlugin(mApp, mDescriptorMapping, mScriptingEnvironment, null);
|
||||||
final SonarResponderMock responder = new SonarResponderMock();
|
final SonarResponderMock responder = new SonarResponderMock();
|
||||||
final SonarConnectionMock connection = new SonarConnectionMock();
|
final SonarConnectionMock connection = new SonarConnectionMock();
|
||||||
plugin.onConnect(connection);
|
plugin.onConnect(connection);
|
||||||
@@ -109,7 +109,7 @@ public class InspectorSonarPluginTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testGetNodes() throws Exception {
|
public void testGetNodes() throws Exception {
|
||||||
final InspectorSonarPlugin plugin =
|
final InspectorSonarPlugin plugin =
|
||||||
new InspectorSonarPlugin(mApp, mDescriptorMapping, mScriptingEnvironment);
|
new InspectorSonarPlugin(mApp, mDescriptorMapping, mScriptingEnvironment, null);
|
||||||
final SonarResponderMock responder = new SonarResponderMock();
|
final SonarResponderMock responder = new SonarResponderMock();
|
||||||
final SonarConnectionMock connection = new SonarConnectionMock();
|
final SonarConnectionMock connection = new SonarConnectionMock();
|
||||||
plugin.onConnect(connection);
|
plugin.onConnect(connection);
|
||||||
@@ -145,7 +145,7 @@ public class InspectorSonarPluginTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testGetNodesThatDontExist() throws Exception {
|
public void testGetNodesThatDontExist() throws Exception {
|
||||||
final InspectorSonarPlugin plugin =
|
final InspectorSonarPlugin plugin =
|
||||||
new InspectorSonarPlugin(mApp, mDescriptorMapping, mScriptingEnvironment);
|
new InspectorSonarPlugin(mApp, mDescriptorMapping, mScriptingEnvironment, null);
|
||||||
final SonarResponderMock responder = new SonarResponderMock();
|
final SonarResponderMock responder = new SonarResponderMock();
|
||||||
final SonarConnectionMock connection = new SonarConnectionMock();
|
final SonarConnectionMock connection = new SonarConnectionMock();
|
||||||
plugin.onConnect(connection);
|
plugin.onConnect(connection);
|
||||||
@@ -171,7 +171,7 @@ public class InspectorSonarPluginTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testSetData() throws Exception {
|
public void testSetData() throws Exception {
|
||||||
final InspectorSonarPlugin plugin =
|
final InspectorSonarPlugin plugin =
|
||||||
new InspectorSonarPlugin(mApp, mDescriptorMapping, mScriptingEnvironment);
|
new InspectorSonarPlugin(mApp, mDescriptorMapping, mScriptingEnvironment, null);
|
||||||
final SonarConnectionMock connection = new SonarConnectionMock();
|
final SonarConnectionMock connection = new SonarConnectionMock();
|
||||||
final SonarResponderMock responder = new SonarResponderMock();
|
final SonarResponderMock responder = new SonarResponderMock();
|
||||||
plugin.onConnect(connection);
|
plugin.onConnect(connection);
|
||||||
@@ -207,7 +207,7 @@ public class InspectorSonarPluginTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testSetHighlighted() throws Exception {
|
public void testSetHighlighted() throws Exception {
|
||||||
final InspectorSonarPlugin plugin =
|
final InspectorSonarPlugin plugin =
|
||||||
new InspectorSonarPlugin(mApp, mDescriptorMapping, mScriptingEnvironment);
|
new InspectorSonarPlugin(mApp, mDescriptorMapping, mScriptingEnvironment, null);
|
||||||
final SonarConnectionMock connection = new SonarConnectionMock();
|
final SonarConnectionMock connection = new SonarConnectionMock();
|
||||||
final SonarResponderMock responder = new SonarResponderMock();
|
final SonarResponderMock responder = new SonarResponderMock();
|
||||||
plugin.onConnect(connection);
|
plugin.onConnect(connection);
|
||||||
@@ -236,7 +236,7 @@ public class InspectorSonarPluginTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testHitTest() throws Exception {
|
public void testHitTest() throws Exception {
|
||||||
final InspectorSonarPlugin plugin =
|
final InspectorSonarPlugin plugin =
|
||||||
new InspectorSonarPlugin(mApp, mDescriptorMapping, mScriptingEnvironment);
|
new InspectorSonarPlugin(mApp, mDescriptorMapping, mScriptingEnvironment, null);
|
||||||
final SonarConnectionMock connection = new SonarConnectionMock();
|
final SonarConnectionMock connection = new SonarConnectionMock();
|
||||||
plugin.onConnect(connection);
|
plugin.onConnect(connection);
|
||||||
|
|
||||||
@@ -273,7 +273,7 @@ public class InspectorSonarPluginTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testSetSearchActive() throws Exception {
|
public void testSetSearchActive() throws Exception {
|
||||||
final InspectorSonarPlugin plugin =
|
final InspectorSonarPlugin plugin =
|
||||||
new InspectorSonarPlugin(mApp, mDescriptorMapping, mScriptingEnvironment);
|
new InspectorSonarPlugin(mApp, mDescriptorMapping, mScriptingEnvironment, null);
|
||||||
final SonarConnectionMock connection = new SonarConnectionMock();
|
final SonarConnectionMock connection = new SonarConnectionMock();
|
||||||
final SonarResponderMock responder = new SonarResponderMock();
|
final SonarResponderMock responder = new SonarResponderMock();
|
||||||
plugin.onConnect(connection);
|
plugin.onConnect(connection);
|
||||||
@@ -295,7 +295,7 @@ public class InspectorSonarPluginTest {
|
|||||||
@Test(expected = AssertionError.class)
|
@Test(expected = AssertionError.class)
|
||||||
public void testNullChildThrows() throws Exception {
|
public void testNullChildThrows() throws Exception {
|
||||||
final InspectorSonarPlugin plugin =
|
final InspectorSonarPlugin plugin =
|
||||||
new InspectorSonarPlugin(mApp, mDescriptorMapping, mScriptingEnvironment);
|
new InspectorSonarPlugin(mApp, mDescriptorMapping, mScriptingEnvironment, null);
|
||||||
final SonarResponderMock responder = new SonarResponderMock();
|
final SonarResponderMock responder = new SonarResponderMock();
|
||||||
final SonarConnectionMock connection = new SonarConnectionMock();
|
final SonarConnectionMock connection = new SonarConnectionMock();
|
||||||
plugin.onConnect(connection);
|
plugin.onConnect(connection);
|
||||||
|
|||||||
Reference in New Issue
Block a user