Cleanup and some code reuse between Device- and normal Plugins

Summary: Introducing a base abstract class (blegh) to share some life cycle management between Device- and normal plugins. Cleaned up the test utils a bit as well + some old TODO's that now have been taken care of

Reviewed By: nikoant

Differential Revision: D22727089

fbshipit-source-id: 507816f1bfdbc6e7e71d4bd365b881b6710ca917
This commit is contained in:
Michel Weststrate
2020-08-04 07:05:57 -07:00
committed by Facebook GitHub Bot
parent b9c9e89b53
commit 642261c0d0
13 changed files with 275 additions and 353 deletions

View File

@@ -15,7 +15,7 @@ import {
SandyDevicePluginInstance,
SandyPluginDefinition,
} from 'flipper-plugin';
import {DevicePluginMap} from '../plugin';
import {DevicePluginMap, FlipperDevicePlugin} from '../plugin';
export type DeviceShell = {
stdout: stream.Readable;
@@ -179,18 +179,22 @@ export default class BaseDevice {
const plugins = Array.from(devicePlugins.values());
plugins.sort(sortPluginsByName);
for (const plugin of plugins) {
if (plugin instanceof SandyPluginDefinition) {
if (plugin.asDevicePluginModule().supportsDevice(this as any)) {
this.devicePlugins.push(plugin.id);
this.sandyPluginStates.set(
plugin.id,
new SandyDevicePluginInstance(this, plugin),
); // TODO: pass initial state if applicable
}
} else {
if (plugin.supportsDevice(this)) {
this.devicePlugins.push(plugin.id);
}
this.loadDevicePlugin(plugin);
}
}
loadDevicePlugin(plugin: typeof FlipperDevicePlugin | SandyPluginDefinition) {
if (plugin instanceof SandyPluginDefinition) {
if (plugin.asDevicePluginModule().supportsDevice(this as any)) {
this.devicePlugins.push(plugin.id);
this.sandyPluginStates.set(
plugin.id,
new SandyDevicePluginInstance(this, plugin),
); // TODO T70582933: pass initial state if applicable
}
} else {
if (plugin.supportsDevice(this)) {
this.devicePlugins.push(plugin.id);
}
}
}