extensionService.ts 4.2 KB
Newer Older
1 2 3 4 5
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

A
Alex Dima 已提交
6
import { ipcRenderer as ipc } from 'electron';
7
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
A
Alex Dima 已提交
8
import { IExtensionEnablementService, IExtensionManagementService } from 'vs/platform/extensionManagement/common/extensionManagement';
A
Alex Dima 已提交
9 10
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService';
A
Alex Dima 已提交
11
import { IRemoteAuthorityResolverService } from 'vs/platform/remote/common/remoteAuthorityResolver';
B
Benjamin Pasero 已提交
12
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
A
Alex Dima 已提交
13 14
import { ILifecycleService } from 'vs/platform/lifecycle/common/lifecycle';
import { INotificationService } from 'vs/platform/notification/common/notification';
A
Alex Dima 已提交
15
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
A
Alex Dima 已提交
16 17
import { IWindowService } from 'vs/platform/windows/common/windows';
import { IExtensionService, IExtensionHostStarter } from 'vs/workbench/services/extensions/common/extensions';
18
import { ExtensionHostProcessWorker } from 'vs/workbench/services/extensions/electron-browser/extensionHost';
A
Alex Dima 已提交
19 20
import { CachedExtensionScanner } from 'vs/workbench/services/extensions/electron-browser/cachedExtensionScanner';
import { IExtensionDescription } from 'vs/platform/extensions/common/extensions';
21
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
22
import { IFileService } from 'vs/platform/files/common/files';
23
import { nodeWebSocketFactory } from 'vs/platform/remote/node/nodeWebSocketFactory';
24
import { IProductService } from 'vs/platform/product/common/product';
A
Alex Dima 已提交
25
import { AbstractExtensionService } from 'vs/workbench/services/extensions/common/abstractExtensionService';
26

A
Alex Dima 已提交
27
export class ExtensionService extends AbstractExtensionService implements IExtensionService {
28
	constructor(
A
Alex Dima 已提交
29 30 31 32 33 34 35 36 37 38 39
		@IInstantiationService instantiationService: IInstantiationService,
		@INotificationService notificationService: INotificationService,
		@IWorkbenchEnvironmentService environmentService: IWorkbenchEnvironmentService,
		@ITelemetryService telemetryService: ITelemetryService,
		@IExtensionEnablementService extensionEnablementService: IExtensionEnablementService,
		@IExtensionManagementService extensionManagementService: IExtensionManagementService,
		@IWindowService windowService: IWindowService,
		@IRemoteAgentService remoteAgentService: IRemoteAgentService,
		@IRemoteAuthorityResolverService remoteAuthorityResolverService: IRemoteAuthorityResolverService,
		@IConfigurationService configurationService: IConfigurationService,
		@ILifecycleService lifecycleService: ILifecycleService,
40
		@IFileService fileService: IFileService,
A
Alex Dima 已提交
41
		@IProductService productService: IProductService
42
	) {
A
Alex Dima 已提交
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
		super(
			instantiationService.createInstance(CachedExtensionScanner),
			nodeWebSocketFactory,
			instantiationService,
			notificationService,
			environmentService,
			telemetryService,
			extensionEnablementService,
			extensionManagementService,
			windowService,
			remoteAgentService,
			remoteAuthorityResolverService,
			configurationService,
			lifecycleService,
			fileService,
			productService,
59
		);
A
Alex Dima 已提交
60 61
	}

A
Alex Dima 已提交
62 63
	protected _createLocalExtHostProcessWorker(autoStart: boolean, extensions: Promise<IExtensionDescription[]>): IExtensionHostStarter {
		return this._instantiationService.createInstance(ExtensionHostProcessWorker, autoStart, extensions, this._extensionHostLogsLocation);
A
Alex Dima 已提交
64
	}
A
Alex Dima 已提交
65 66

	public _onExtensionHostExit(code: number): void {
67
		// Expected development extension termination: When the extension host goes down we also shutdown the window
68
		if (!this._isExtensionDevTestFromCli) {
69 70 71 72 73 74 75
			this._windowService.closeWindow();
		}

		// When CLI testing make sure to exit with proper exit code
		else {
			ipc.send('vscode:exit', code);
		}
A
Alex Dima 已提交
76
	}
77
}
78

79
registerSingleton(IExtensionService, ExtensionService);
A
Alex Dima 已提交
80