From 22400b5e651775b696dbebb2539ec870d6e4670e Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Wed, 2 Sep 2020 21:38:13 +0200 Subject: [PATCH] Fix #105717 --- .../browser/extensionsWorkbenchService.ts | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts b/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts index 996f4bb2fed..2d2944cf720 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts @@ -218,7 +218,11 @@ class Extension implements IExtension { return Promise.resolve(null); } - return Promise.resolve(this.local!.manifest); + if (this.local) { + return Promise.resolve(this.local.manifest); + } + + return Promise.resolve(null); } hasReadme(): boolean { @@ -673,9 +677,18 @@ export class ExtensionsWorkbenchService extends Disposable implements IExtension } const extensionsToChoose = enabledExtensions.length ? enabledExtensions : extensions; + const manifest = extensionsToChoose.find(e => e.local && e.local.manifest)?.local?.manifest; + + // Manifest is not found which should not happen. + // In which case return the first extension. + if (!manifest) { + return extensionsToChoose[0]; + } + + const extensionKinds = getExtensionKind(manifest, this.productService, this.configurationService); let extension = extensionsToChoose.find(extension => { - for (const extensionKind of getExtensionKind(extension.local!.manifest, this.productService, this.configurationService)) { + for (const extensionKind of extensionKinds) { switch (extensionKind) { case 'ui': /* UI extension is chosen only if it is installed locally */ @@ -702,7 +715,7 @@ export class ExtensionsWorkbenchService extends Disposable implements IExtension if (!extension && this.extensionManagementServerService.localExtensionManagementServer) { extension = extensionsToChoose.find(extension => { - for (const extensionKind of getExtensionKind(extension.local!.manifest, this.productService, this.configurationService)) { + for (const extensionKind of extensionKinds) { switch (extensionKind) { case 'workspace': /* Choose local workspace extension if exists */ @@ -724,7 +737,7 @@ export class ExtensionsWorkbenchService extends Disposable implements IExtension if (!extension && this.extensionManagementServerService.remoteExtensionManagementServer) { extension = extensionsToChoose.find(extension => { - for (const extensionKind of getExtensionKind(extension.local!.manifest, this.productService, this.configurationService)) { + for (const extensionKind of extensionKinds) { switch (extensionKind) { case 'web': /* Choose remote web extension if exists */ -- GitLab