diff --git a/packages/plugin-ext/src/common/plugin-protocol.ts b/packages/plugin-ext/src/common/plugin-protocol.ts index 01528100e7358..73a3b65c1a6b4 100644 --- a/packages/plugin-ext/src/common/plugin-protocol.ts +++ b/packages/plugin-ext/src/common/plugin-protocol.ts @@ -685,9 +685,15 @@ export interface ServerPluginRunner { clientClosed(): void; /** - * Provides additional metadata. + * Provides additional deployed plugins. */ - getExtraPluginMetadata(): Promise; + getExtraDeployedPlugins(): Promise; + + /** + * Provides additional plugin ids. + */ + getExtraDeployedPluginIds(): Promise; + } export const PluginHostEnvironmentVariable = Symbol('PluginHostEnvironmentVariable'); diff --git a/packages/plugin-ext/src/hosted/node/hosted-plugin-process.ts b/packages/plugin-ext/src/hosted/node/hosted-plugin-process.ts index 5f581f4b6449d..9a1636e73fc91 100644 --- a/packages/plugin-ext/src/hosted/node/hosted-plugin-process.ts +++ b/packages/plugin-ext/src/hosted/node/hosted-plugin-process.ts @@ -20,7 +20,7 @@ import { injectable, inject, named } from 'inversify'; import { ILogger, ConnectionErrorHandler, ContributionProvider, MessageService } from '@theia/core/lib/common'; import { Emitter } from '@theia/core/lib/common/event'; import { createIpcEnv } from '@theia/core/lib/node/messaging/ipc-protocol'; -import { HostedPluginClient, ServerPluginRunner, PluginMetadata, PluginHostEnvironmentVariable } from '../../common/plugin-protocol'; +import { HostedPluginClient, ServerPluginRunner, PluginHostEnvironmentVariable, DeployedPlugin } from '../../common/plugin-protocol'; import { RPCProtocolImpl } from '../../common/rpc-protocol'; import { MAIN_RPC_CONTEXT } from '../../common/plugin-api-rpc'; import { HostedPluginCliContribution } from './hosted-plugin-cli-contribution'; @@ -192,7 +192,17 @@ export class HostedPluginProcess implements ServerPluginRunner { this.logger.error(`Error from plugin host: ${err.message}`); } - async getExtraPluginMetadata(): Promise { + /** + * Provides additional plugin ids. + */ + public async getExtraDeployedPluginIds(): Promise { + return []; + } + + /** + * Provides additional deployed plugins. + */ + public async getExtraDeployedPlugins(): Promise { return []; } diff --git a/packages/plugin-ext/src/hosted/node/hosted-plugin.ts b/packages/plugin-ext/src/hosted/node/hosted-plugin.ts index 9da14b926b43c..70c6ee49992cc 100644 --- a/packages/plugin-ext/src/hosted/node/hosted-plugin.ts +++ b/packages/plugin-ext/src/hosted/node/hosted-plugin.ts @@ -16,7 +16,7 @@ import { injectable, inject, multiInject, postConstruct, optional } from 'inversify'; import { ILogger, ConnectionErrorHandler } from '@theia/core/lib/common'; -import { HostedPluginClient, PluginModel, ServerPluginRunner, PluginMetadata } from '../../common/plugin-protocol'; +import { HostedPluginClient, PluginModel, ServerPluginRunner, DeployedPlugin } from '../../common/plugin-protocol'; import { LogPart } from '../../common/types'; import { HostedPluginProcess } from './hosted-plugin-process'; @@ -98,8 +98,18 @@ export class HostedPluginSupport { } } - public async getExtraPluginMetadata(): Promise { - return [].concat.apply([], await Promise.all(this.pluginRunners.map(runner => runner.getExtraPluginMetadata()))); + /** + * Provides additional plugin ids. + */ + public async getExtraDeployedPluginIds(): Promise { + return [].concat.apply([], await Promise.all(this.pluginRunners.map(runner => runner.getExtraDeployedPluginIds()))); + } + + /** + * Provides additional deployed plugins. + */ + public async getExtraDeployedPlugins(): Promise { + return [].concat.apply([], await Promise.all(this.pluginRunners.map(runner => runner.getExtraDeployedPlugins()))); } public sendLog(logPart: LogPart): void { diff --git a/packages/plugin-ext/src/hosted/node/plugin-service.ts b/packages/plugin-ext/src/hosted/node/plugin-service.ts index e385c55acfea0..8e7df0174ce12 100644 --- a/packages/plugin-ext/src/hosted/node/plugin-service.ts +++ b/packages/plugin-ext/src/hosted/node/plugin-service.ts @@ -14,7 +14,7 @@ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 ********************************************************************************/ import { injectable, inject, named, postConstruct } from 'inversify'; -import { HostedPluginServer, HostedPluginClient, PluginMetadata, PluginDeployer, GetDeployedPluginsParams, DeployedPlugin } from '../../common/plugin-protocol'; +import { HostedPluginServer, HostedPluginClient, PluginDeployer, GetDeployedPluginsParams, DeployedPlugin } from '../../common/plugin-protocol'; import { HostedPluginSupport } from './hosted-plugin'; import { ILogger, Disposable } from '@theia/core'; import { ContributionProvider } from '@theia/core'; @@ -75,9 +75,8 @@ export class HostedPluginServerImpl implements HostedPluginServer { for (const pluginId of backendMetadata) { plugins.add(pluginId); } - const extraPluginMetadata = await this.hostedPlugin.getExtraPluginMetadata(); - for (const plugin of extraPluginMetadata) { - plugins.add(plugin.model.id); + for (const pluginId of await this.hostedPlugin.getExtraDeployedPluginIds()) { + plugins.add(pluginId); } return [...plugins.values()]; } @@ -87,20 +86,17 @@ export class HostedPluginServerImpl implements HostedPluginServer { return []; } const plugins = []; - let extraPluginMetadata: Map | undefined; + let extraDeployedPlugins: Map | undefined; for (const pluginId of pluginIds) { let plugin = this.deployerHandler.getDeployedPlugin(pluginId); if (!plugin) { - if (!extraPluginMetadata) { - extraPluginMetadata = new Map(); - for (const extraMetadata of await this.hostedPlugin.getExtraPluginMetadata()) { - extraPluginMetadata.set(extraMetadata.model.id, extraMetadata); + if (!extraDeployedPlugins) { + extraDeployedPlugins = new Map(); + for (const extraDeployedPlugin of await this.hostedPlugin.getExtraDeployedPlugins()) { + extraDeployedPlugins.set(extraDeployedPlugin.metadata.model.id, extraDeployedPlugin); } } - const metadata = extraPluginMetadata.get(pluginId); - if (metadata) { - plugin = { metadata }; - } + plugin = extraDeployedPlugins.get(pluginId); } if (plugin) { plugins.push(plugin);