Skip to content

Commit bcfc3e9

Browse files
committed
microsoft#64755 Strict null check - MultiExtensionManagementService
1 parent 6221391 commit bcfc3e9

8 files changed

Lines changed: 49 additions & 56 deletions

File tree

src/tsconfig.strictNullChecks.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -730,7 +730,8 @@
730730
"./vs/workbench/services/themes/electron-browser/fileIconThemeStore.ts",
731731
"./vs/workbench/services/title/common/titleService.ts",
732732
"./vs/workbench/services/workspace/common/workspaceEditing.ts",
733-
"./vs/workbench/test/electron-browser/api/mock.ts"
733+
"./vs/workbench/test/electron-browser/api/mock.ts",
734+
"./vs/platform/extensionManagement/node/multiExtensionManagement.ts"
734735
],
735736
"exclude": [
736737
"./typings/require-monaco.d.ts"

src/vs/platform/extensionManagement/common/extensionManagement.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,7 @@ export interface IExtensionManagementServer {
342342

343343
export interface IExtensionManagementServerService {
344344
_serviceBrand: any;
345-
readonly localExtensionManagementServer: IExtensionManagementServer | null;
345+
readonly localExtensionManagementServer: IExtensionManagementServer;
346346
readonly remoteExtensionManagementServer: IExtensionManagementServer | null;
347347
getExtensionManagementServer(location: URI): IExtensionManagementServer | null;
348348
}

src/vs/platform/extensionManagement/node/multiExtensionManagement.ts

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import { CancellationToken } from 'vs/base/common/cancellation';
1717
import { IRemoteAuthorityResolverService, ResolvedAuthority } from 'vs/platform/remote/common/remoteAuthorityResolver';
1818
import { getManifest } from 'vs/platform/extensionManagement/node/extensionManagementUtil';
1919

20-
export class MulitExtensionManagementService extends Disposable implements IExtensionManagementService {
20+
export class MultiExtensionManagementService extends Disposable implements IExtensionManagementService {
2121

2222
_serviceBrand: any;
2323

@@ -49,54 +49,66 @@ export class MulitExtensionManagementService extends Disposable implements IExte
4949
}
5050

5151
uninstall(extension: ILocalExtension, force?: boolean): Promise<void> {
52-
return this.getServer(extension).extensionManagementService.uninstall(extension, force);
52+
const server = this.getServer(extension);
53+
if (server) {
54+
return server.extensionManagementService.uninstall(extension, force);
55+
}
56+
return Promise.reject(`Invalid location ${extension.location.toString()}`);
5357
}
5458

5559
reinstallFromGallery(extension: ILocalExtension): Promise<void> {
56-
return this.getServer(extension).extensionManagementService.reinstallFromGallery(extension);
60+
const server = this.getServer(extension);
61+
if (server) {
62+
return server.extensionManagementService.reinstallFromGallery(extension);
63+
}
64+
return Promise.reject(`Invalid location ${extension.location.toString()}`);
5765
}
5866

5967
updateMetadata(extension: ILocalExtension, metadata: IGalleryMetadata): Promise<ILocalExtension> {
60-
return this.getServer(extension).extensionManagementService.updateMetadata(extension, metadata);
68+
const server = this.getServer(extension);
69+
if (server) {
70+
return server.extensionManagementService.updateMetadata(extension, metadata);
71+
}
72+
return Promise.reject(`Invalid location ${extension.location.toString()}`);
6173
}
6274

6375
zip(extension: ILocalExtension): Promise<URI> {
6476
throw new Error('Not Supported');
6577
}
6678

6779
unzip(zipLocation: URI, type: LocalExtensionType): Promise<IExtensionIdentifier> {
68-
return Promise.all(this.servers.map(({ extensionManagementService }) => extensionManagementService.unzip(zipLocation, type))).then(() => null);
80+
return Promise.all(this.servers.map(({ extensionManagementService }) => extensionManagementService.unzip(zipLocation, type))).then(([extensionIdentifier]) => extensionIdentifier);
6981
}
7082

7183
install(vsix: URI): Promise<IExtensionIdentifier> {
72-
if (!this.extensionManagementServerService.remoteExtensionManagementServer) {
73-
return this.extensionManagementServerService.localExtensionManagementServer.extensionManagementService.install(vsix);
84+
if (this.extensionManagementServerService.remoteExtensionManagementServer) {
85+
return Promise.all([getManifest(vsix.fsPath), this.hasToSyncExtensions()])
86+
.then(([manifest, syncExtensions]) => {
87+
const servers = isUIExtension(manifest, this.configurationService) ? [this.extensionManagementServerService.localExtensionManagementServer] : syncExtensions ? this.servers : [this.extensionManagementServerService.remoteExtensionManagementServer!];
88+
return Promise.all(servers.map(server => server.extensionManagementService.install(vsix)))
89+
.then(([extensionIdentifier]) => extensionIdentifier);
90+
});
7491
}
75-
return Promise.all([getManifest(vsix.fsPath), this.hasToSyncExtensions()])
76-
.then(([manifest, syncExtensions]) => {
77-
const servers = isUIExtension(manifest, this.configurationService) ? [this.extensionManagementServerService.localExtensionManagementServer] : syncExtensions ? this.servers : [this.extensionManagementServerService.remoteExtensionManagementServer];
78-
return Promise.all(servers.map(server => server.extensionManagementService.install(vsix)))
79-
.then(() => null);
80-
});
92+
return this.extensionManagementServerService.localExtensionManagementServer.extensionManagementService.install(vsix);
8193
}
8294

8395
installFromGallery(gallery: IGalleryExtension): Promise<void> {
84-
if (!this.extensionManagementServerService.remoteExtensionManagementServer) {
85-
return this.extensionManagementServerService.localExtensionManagementServer.extensionManagementService.installFromGallery(gallery);
96+
if (this.extensionManagementServerService.remoteExtensionManagementServer) {
97+
return Promise.all([this.extensionGalleryService.getManifest(gallery, CancellationToken.None), this.hasToSyncExtensions()])
98+
.then(([manifest, syncExtensions]) => {
99+
const servers = isUIExtension(manifest, this.configurationService) ? [this.extensionManagementServerService.localExtensionManagementServer] : syncExtensions ? this.servers : [this.extensionManagementServerService.remoteExtensionManagementServer!];
100+
return Promise.all(servers.map(server => server.extensionManagementService.installFromGallery(gallery)))
101+
.then(() => void 0);
102+
});
86103
}
87-
return Promise.all([this.extensionGalleryService.getManifest(gallery, CancellationToken.None), this.hasToSyncExtensions()])
88-
.then(([manifest, syncExtensions]) => {
89-
const servers = isUIExtension(manifest, this.configurationService) ? [this.extensionManagementServerService.localExtensionManagementServer] : syncExtensions ? this.servers : [this.extensionManagementServerService.remoteExtensionManagementServer];
90-
return Promise.all(servers.map(server => server.extensionManagementService.installFromGallery(gallery)))
91-
.then(() => null);
92-
});
104+
return this.extensionManagementServerService.localExtensionManagementServer.extensionManagementService.installFromGallery(gallery);
93105
}
94106

95107
getExtensionsReport(): Promise<IReportedExtension[]> {
96108
return this.extensionManagementServerService.localExtensionManagementServer.extensionManagementService.getExtensionsReport();
97109
}
98110

99-
private getServer(extension: ILocalExtension): IExtensionManagementServer {
111+
private getServer(extension: ILocalExtension): IExtensionManagementServer | null {
100112
return this.extensionManagementServerService.getExtensionManagementServer(extension.location);
101113
}
102114

src/vs/workbench/electron-browser/shell.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ import { IDownloadService } from 'vs/platform/download/common/download';
101101
import { DownloadService } from 'vs/platform/download/node/downloadService';
102102
import { DownloadServiceChannel } from 'vs/platform/download/node/downloadIpc';
103103
import { TextResourcePropertiesService } from 'vs/workbench/services/textfile/electron-browser/textResourcePropertiesService';
104-
import { MulitExtensionManagementService } from 'vs/platform/extensionManagement/node/multiExtensionManagement';
104+
import { MultiExtensionManagementService } from 'vs/platform/extensionManagement/node/multiExtensionManagement';
105105
import { IRemoteAuthorityResolverService } from 'vs/platform/remote/common/remoteAuthorityResolver';
106106
import { RemoteAuthorityResolverService } from 'vs/platform/remote/electron-browser/remoteAuthorityResolverService';
107107

@@ -474,7 +474,7 @@ export class WorkbenchShell extends Disposable {
474474
const extensionManagementChannel = getDelayedChannel(sharedProcess.then(c => c.getChannel('extensions')));
475475
const extensionManagementChannelClient = new ExtensionManagementChannelClient(extensionManagementChannel);
476476
serviceCollection.set(IExtensionManagementServerService, new SyncDescriptor(ExtensionManagementServerService, [extensionManagementChannelClient]));
477-
serviceCollection.set(IExtensionManagementService, new SyncDescriptor(MulitExtensionManagementService));
477+
serviceCollection.set(IExtensionManagementService, new SyncDescriptor(MultiExtensionManagementService));
478478

479479
const extensionEnablementService = this._register(instantiationService.createInstance(ExtensionEnablementService));
480480
serviceCollection.set(IExtensionEnablementService, extensionEnablementService);

src/vs/workbench/parts/extensions/electron-browser/extensionsViewlet.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ import { ViewletPanel } from 'vs/workbench/browser/parts/views/panelViewlet';
5050
import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection';
5151
import { ExtensionsWorkbenchService } from 'vs/workbench/parts/extensions/node/extensionsWorkbenchService';
5252
import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors';
53-
import { SingleServerExtensionManagementServerService } from 'vs/workbench/services/extensions/node/extensionManagementServerService';
5453
import { Query } from 'vs/workbench/parts/extensions/common/extensionQuery';
5554
import { SuggestEnabledInput, attachSuggestEnabledInputBoxStyler } from 'vs/workbench/parts/codeEditor/electron-browser/suggestEnabledInput';
5655
import { alert } from 'vs/base/browser/ui/aria/aria';
@@ -510,7 +509,6 @@ export class ExtensionsViewlet extends ViewContainerViewlet implements IExtensio
510509
: viewDescriptor.id === `server.extensionsList.${this.extensionManagementServerService.remoteExtensionManagementServer.authority}` ? this.extensionManagementServerService.remoteExtensionManagementServer : null;
511510
if (extensionManagementServer) {
512511
const servicesCollection: ServiceCollection = new ServiceCollection();
513-
servicesCollection.set(IExtensionManagementServerService, new SingleServerExtensionManagementServerService(extensionManagementServer));
514512
servicesCollection.set(IExtensionManagementService, extensionManagementServer.extensionManagementService);
515513
servicesCollection.set(IExtensionsWorkbenchService, new SyncDescriptor(ExtensionsWorkbenchService));
516514
const instantiationService = this.instantiationService.createChild(servicesCollection);

src/vs/workbench/parts/extensions/test/electron-browser/extensionsActions.test.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,10 @@ import { ILogService, NullLogService } from 'vs/platform/log/common/log';
3232
import { IWindowService } from 'vs/platform/windows/common/windows';
3333
import { URLService } from 'vs/platform/url/common/urlService';
3434
import { URI } from 'vs/base/common/uri';
35-
import { SingleServerExtensionManagementServerService } from 'vs/workbench/services/extensions/node/extensionManagementServerService';
3635
import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService';
36+
import { ExtensionManagementServerService } from 'vs/workbench/services/extensions/node/extensionManagementServerService';
37+
import { IRemoteAgentService } from 'vs/workbench/services/remote/node/remoteAgentService';
38+
import { RemoteAgentService } from 'vs/workbench/services/remote/electron-browser/remoteAgentServiceImpl';
3739

3840
suite('ExtensionsActions Test', () => {
3941

@@ -67,8 +69,9 @@ suite('ExtensionsActions Test', () => {
6769
instantiationService.stub(IExtensionManagementService, 'onDidInstallExtension', didInstallEvent.event);
6870
instantiationService.stub(IExtensionManagementService, 'onUninstallExtension', uninstallEvent.event);
6971
instantiationService.stub(IExtensionManagementService, 'onDidUninstallExtension', didUninstallEvent.event);
72+
instantiationService.stub(IRemoteAgentService, RemoteAgentService);
7073

71-
instantiationService.stub(IExtensionManagementServerService, instantiationService.createInstance(SingleServerExtensionManagementServerService, <IExtensionManagementServer>{ authority: 'vscode-local', extensionManagementService: instantiationService.get(IExtensionManagementService), label: 'local' }));
74+
instantiationService.stub(IExtensionManagementServerService, instantiationService.createInstance(ExtensionManagementServerService, <IExtensionManagementServer>{ authority: 'vscode-local', extensionManagementService: instantiationService.get(IExtensionManagementService), label: 'local' }));
7275

7376
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
7477

src/vs/workbench/parts/extensions/test/electron-browser/extensionsViews.test.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,12 @@ import { ILogService, NullLogService } from 'vs/platform/log/common/log';
3232
import { IWindowService } from 'vs/platform/windows/common/windows';
3333
import { URLService } from 'vs/platform/url/common/urlService';
3434
import { URI } from 'vs/base/common/uri';
35-
import { SingleServerExtensionManagementServerService } from 'vs/workbench/services/extensions/node/extensionManagementServerService';
3635
import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService';
3736
import { SinonStub } from 'sinon';
3837
import { IExperimentService, ExperimentService, ExperimentState, ExperimentActionType } from 'vs/workbench/parts/experiments/node/experimentService';
38+
import { IRemoteAgentService } from 'vs/workbench/services/remote/node/remoteAgentService';
39+
import { RemoteAgentService } from 'vs/workbench/services/remote/electron-browser/remoteAgentServiceImpl';
40+
import { ExtensionManagementServerService } from 'vs/workbench/services/extensions/node/extensionManagementServerService';
3941

4042

4143
suite('ExtensionsListView Tests', () => {
@@ -83,8 +85,9 @@ suite('ExtensionsListView Tests', () => {
8385
instantiationService.stub(IExtensionManagementService, 'onDidInstallExtension', didInstallEvent.event);
8486
instantiationService.stub(IExtensionManagementService, 'onUninstallExtension', uninstallEvent.event);
8587
instantiationService.stub(IExtensionManagementService, 'onDidUninstallExtension', didUninstallEvent.event);
88+
instantiationService.stub(IRemoteAgentService, RemoteAgentService);
8689

87-
instantiationService.stub(IExtensionManagementServerService, instantiationService.createInstance(SingleServerExtensionManagementServerService, <IExtensionManagementServer>{ authority: 'vscode-local', extensionManagementService: instantiationService.get(IExtensionManagementService), label: 'local' }));
90+
instantiationService.stub(IExtensionManagementServerService, instantiationService.createInstance(ExtensionManagementServerService, <IExtensionManagementServer>{ authority: 'vscode-local', extensionManagementService: instantiationService.get(IExtensionManagementService), label: 'local' }));
8891

8992
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
9093

src/vs/workbench/services/extensions/node/extensionManagementServerService.ts

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -42,28 +42,4 @@ export class ExtensionManagementServerService implements IExtensionManagementSer
4242
}
4343
return null;
4444
}
45-
}
46-
47-
export class SingleServerExtensionManagementServerService implements IExtensionManagementServerService {
48-
49-
_serviceBrand: any;
50-
51-
52-
constructor(
53-
private readonly extensionManagementServer: IExtensionManagementServer
54-
) {
55-
}
56-
57-
getExtensionManagementServer(location: URI): IExtensionManagementServer | null {
58-
const authority = location.scheme === Schemas.file ? localExtensionManagementServerAuthority : location.authority;
59-
return this.extensionManagementServer.authority === authority ? this.extensionManagementServer : null;
60-
}
61-
62-
get localExtensionManagementServer(): IExtensionManagementServer | null {
63-
return this.extensionManagementServer.authority === localExtensionManagementServerAuthority ? this.extensionManagementServer : null;
64-
}
65-
66-
get remoteExtensionManagementServer(): IExtensionManagementServer | null {
67-
return this.extensionManagementServer.authority !== localExtensionManagementServerAuthority ? this.extensionManagementServer : null;
68-
}
6945
}

0 commit comments

Comments
 (0)