diff --git a/src/vs/workbench/api/node/extHost.protocol.ts b/src/vs/workbench/api/node/extHost.protocol.ts index a408ee583e7..08baa733711 100644 --- a/src/vs/workbench/api/node/extHost.protocol.ts +++ b/src/vs/workbench/api/node/extHost.protocol.ts @@ -742,6 +742,7 @@ export interface ExtHostExtensionServiceShape { $activate(extensionId: ExtensionIdentifier, activationEvent: string): Promise; $addExtension(extension: IExtensionDescription): Promise; + $removeExtension(extension: ExtensionIdentifier): Promise; $test_latency(n: number): Promise; $test_up(b: Buffer): Promise; diff --git a/src/vs/workbench/api/node/extHostExtensionService.ts b/src/vs/workbench/api/node/extHostExtensionService.ts index b9b2916c111..fe143a9989f 100644 --- a/src/vs/workbench/api/node/extHostExtensionService.ts +++ b/src/vs/workbench/api/node/extHostExtensionService.ts @@ -675,6 +675,11 @@ export class ExtHostExtensionService implements ExtHostExtensionServiceShape { return Promise.resolve(undefined); } + public $removeExtension(extensionId: ExtensionIdentifier): Promise { + this._registry.remove(extensionId); + return Promise.resolve(undefined); + } + public async $test_latency(n: number): Promise { return n; } diff --git a/src/vs/workbench/services/extensions/electron-browser/extensionHostProcessManager.ts b/src/vs/workbench/services/extensions/electron-browser/extensionHostProcessManager.ts index e55bd38105d..f108a8b8e57 100644 --- a/src/vs/workbench/services/extensions/electron-browser/extensionHostProcessManager.ts +++ b/src/vs/workbench/services/extensions/electron-browser/extensionHostProcessManager.ts @@ -252,6 +252,10 @@ export class ExtensionHostProcessManager extends Disposable { public addExtension(extension: IExtensionDescription): Promise { return this._extensionHostProcessProxy.then(proxy => proxy.value.$addExtension(extension)); } + + public removeExtension(extensionId: ExtensionIdentifier): Promise { + return this._extensionHostProcessProxy.then(proxy => proxy.value.$removeExtension(extensionId)); + } } const colorTables = [ diff --git a/src/vs/workbench/services/extensions/electron-browser/extensionService.ts b/src/vs/workbench/services/extensions/electron-browser/extensionService.ts index 0d047f46657..1cf2e65d437 100644 --- a/src/vs/workbench/services/extensions/electron-browser/extensionService.ts +++ b/src/vs/workbench/services/extensions/electron-browser/extensionService.ts @@ -142,7 +142,7 @@ export class ExtensionService extends Disposable implements IExtensionService { } } - private _removeExtension(extensionId: string): void { + private async _removeExtension(extensionId: string): Promise { const extensionDescription = this._registry.getExtensionDescription(extensionId); if (!extensionDescription) { // ignore disabling an extension which is not running @@ -156,9 +156,12 @@ export class ExtensionService extends Disposable implements IExtensionService { // Remove the extension from the local registry and from the extension host this._registry.remove(extensionDescription.identifier); - // TODO@Alex: remove from the extension host this._rehandleExtensionPoints(extensionDescription); + + if (this._extensionHostProcessManagers.length > 0) { + await this._extensionHostProcessManagers[0].removeExtension(extensionDescription.identifier); + } } private _rehandleExtensionPoints(extensionDescription: IExtensionDescription): void {