diff --git a/src/vs/workbench/api/node/extHostExtensionService.ts b/src/vs/workbench/api/node/extHostExtensionService.ts index b610fc9ad73..78ab305479e 100644 --- a/src/vs/workbench/api/node/extHostExtensionService.ts +++ b/src/vs/workbench/api/node/extHostExtensionService.ts @@ -13,9 +13,10 @@ import { AbstractExtensionService, ActivatedExtension } from 'vs/platform/extens import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; import { ExtHostStorage } from 'vs/workbench/api/node/extHostStorage'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import { createApiFactory, initializeExtensionApi } from 'vs/workbench/api/node/extHost.api.impl'; import { IThreadService } from 'vs/workbench/services/thread/common/threadService'; import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; -import { MainContext, MainProcessExtensionServiceShape, IEnvironment } from './extHost.protocol'; +import { MainContext, MainProcessExtensionServiceShape, IEnvironment, IInitData } from './extHost.protocol'; import { createHash } from 'crypto'; const hasOwnProperty = Object.hasOwnProperty; @@ -172,15 +173,19 @@ export class ExtHostExtensionService extends AbstractExtensionService this._triggerOnReady()); } public getAllExtensionDescriptions(): IExtensionDescription[] { @@ -290,10 +295,12 @@ export class ExtHostExtensionService extends AbstractExtensionService NOT AN ERROR CASE return TPromise.as(new ExtHostEmptyExtension()); } - - return loadCommonJSModule(extensionDescription.main).then((extensionModule) => { - return this._loadExtensionContext(extensionDescription).then(context => { - return ExtHostExtensionService._callActivate(extensionModule, context); + return this.onReady().then(() => { + return TPromise.join([ + loadCommonJSModule(extensionDescription.main), + this._loadExtensionContext(extensionDescription) + ]).then(values => { + return ExtHostExtensionService._callActivate(values[0], values[1]); }); }); } diff --git a/src/vs/workbench/node/extensionHostMain.ts b/src/vs/workbench/node/extensionHostMain.ts index d2e762b88f9..2abb5d4111d 100644 --- a/src/vs/workbench/node/extensionHostMain.ts +++ b/src/vs/workbench/node/extensionHostMain.ts @@ -9,7 +9,6 @@ import nls = require('vs/nls'); import pfs = require('vs/base/node/pfs'); import { TPromise } from 'vs/base/common/winjs.base'; import paths = require('vs/base/common/paths'); -import { createApiFactory, initializeExtensionApi } from 'vs/workbench/api/node/extHost.api.impl'; import { IMainProcessExtHostIPC } from 'vs/platform/extensions/common/ipcRemoteCom'; import { ExtHostExtensionService } from 'vs/workbench/api/node/extHostExtensionService'; import { ExtHostThreadService } from 'vs/workbench/services/thread/common/extHostThreadService'; @@ -37,7 +36,6 @@ export class ExtensionHostMain { private _contextService: IWorkspaceContextService; private _environment: IEnvironment; private _extensionService: ExtHostExtensionService; - private _extensionApiCreation: TPromise; constructor(remoteCom: IMainProcessExtHostIPC, initData: IInitData) { // services @@ -45,19 +43,15 @@ export class ExtensionHostMain { this._contextService = new WorkspaceContextService(initData.contextService.workspace); const threadService = new ExtHostThreadService(remoteCom); const telemetryService = new RemoteTelemetryService('pluginHostTelemetry', threadService); - this._extensionService = new ExtHostExtensionService(initData.extensions, initData.environment, threadService, telemetryService, this._contextService); + this._extensionService = new ExtHostExtensionService(initData, threadService, telemetryService, this._contextService); // Error forwarding const mainThreadErrors = threadService.get(MainContext.MainThreadErrors); errors.setUnexpectedErrorHandler(err => mainThreadErrors.onUnexpectedExtHostError(errors.transformErrorForSerialization(err))); - - // Create the ext host API - const apiFactory = createApiFactory(initData, threadService, this._extensionService, this._contextService); - this._extensionApiCreation = initializeExtensionApi(this._extensionService, apiFactory); } public start(): TPromise { - return this._extensionApiCreation + return this._extensionService.onReady() .then(() => this.handleEagerExtensions()) .then(() => this.handleExtensionTests()); }