diff --git a/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.ts b/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.ts index 7fee4c8e629..03a9cc7540c 100644 --- a/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.ts +++ b/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.ts @@ -753,7 +753,7 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService, for (const extension of extensions) { let dependents = this.getDependentsAfterDisablement(extension, allExtensions, this.local, enablementState); if (dependents.length) { - return TPromise.wrapError(new Error(this.getDependentsErrorMessage(extension, dependents))); + return TPromise.wrapError(new Error(this.getDependentsErrorMessage(extension, allExtensions, dependents))); } } } @@ -806,7 +806,17 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService, }); } - private getDependentsErrorMessage(extension: IExtension, dependents: IExtension[]): string { + private getDependentsErrorMessage(extension: IExtension, allDisabledExtensions: IExtension[], dependents: IExtension[]): string { + for (const e of [extension, ...allDisabledExtensions]) { + let dependentsOfTheExtension = dependents.filter(d => d.dependencies.some(id => areSameExtensions({ id }, e))); + if (dependentsOfTheExtension.length) { + return this.getErrorMessageForDisablingAnExtensionWithDependents(e, dependentsOfTheExtension); + } + } + return ''; + } + + private getErrorMessageForDisablingAnExtensionWithDependents(extension: IExtension, dependents: IExtension[]): string { if (dependents.length === 1) { return nls.localize('singleDependentError', "Cannot disable extension '{0}'. Extension '{1}' depends on this.", extension.displayName, dependents[0].displayName); }