提交 87f7ce05 编写于 作者: A Alex Dima

Native promise adoption

上级 0dcc8e4d
......@@ -12,7 +12,6 @@ import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { Counter } from 'vs/base/common/numbers';
import { URI, setUriThrowOnMissingScheme } from 'vs/base/common/uri';
import { IURITransformer } from 'vs/base/common/uriIpc';
import { TPromise } from 'vs/base/common/winjs.base';
import * as pfs from 'vs/base/node/pfs';
import { IMessagePassingProtocol } from 'vs/base/parts/ipc/node/ipc';
import { IEnvironment, IInitData, IWorkspaceData, MainContext, MainThreadWorkspaceShape } from 'vs/workbench/api/node/extHost.protocol';
......@@ -130,7 +129,7 @@ export class ExtensionHostMain {
this._mainThreadWorkspace = rpcProtocol.getProxy(MainContext.MainThreadWorkspace);
}
start(): TPromise<void> {
start(): Thenable<void> {
return this._extensionService.onExtensionAPIReady()
.then(() => this.handleEagerExtensions())
.then(() => this.handleExtensionTests())
......@@ -152,7 +151,7 @@ export class ExtensionHostMain {
// TODO: write to log once we have one
});
let allPromises: TPromise<void>[] = [];
let allPromises: Thenable<void>[] = [];
try {
const allExtensions = this._extensionService.getAllExtensionDescriptions();
const allExtensionsIds = allExtensions.map(ext => ext.id);
......@@ -165,7 +164,7 @@ export class ExtensionHostMain {
// TODO: write to log once we have one
}
const extensionsDeactivated = TPromise.join(allPromises).then<void>(() => void 0);
const extensionsDeactivated = Promise.all(allPromises).then<void>(() => void 0);
// Give extensions 1 second to wrap up any async dispose, then exit
setTimeout(() => {
......@@ -174,7 +173,7 @@ export class ExtensionHostMain {
}
// Handle "eager" activation extensions
private handleEagerExtensions(): TPromise<void> {
private handleEagerExtensions(): Promise<void> {
this._extensionService.activateByEvent('*', true).then(null, (err) => {
console.error(err);
});
......@@ -182,22 +181,22 @@ export class ExtensionHostMain {
return this.handleWorkspaceContainsEagerExtensions();
}
private handleWorkspaceContainsEagerExtensions(): TPromise<void> {
private handleWorkspaceContainsEagerExtensions(): Promise<void> {
if (!this._workspace || this._workspace.folders.length === 0) {
return TPromise.as(null);
return Promise.resolve(null);
}
return TPromise.join(
return Promise.all(
this._extensionService.getAllExtensionDescriptions().map((desc) => {
return this.handleWorkspaceContainsEagerExtension(desc);
})
).then(() => { });
}
private handleWorkspaceContainsEagerExtension(desc: IExtensionDescription): TPromise<void> {
private handleWorkspaceContainsEagerExtension(desc: IExtensionDescription): Promise<void> {
const activationEvents = desc.activationEvents;
if (!activationEvents) {
return TPromise.as(void 0);
return Promise.resolve(void 0);
}
const fileNames: string[] = [];
......@@ -215,13 +214,13 @@ export class ExtensionHostMain {
}
if (fileNames.length === 0 && globPatterns.length === 0) {
return TPromise.as(void 0);
return Promise.resolve(void 0);
}
const fileNamePromise = TPromise.join(fileNames.map((fileName) => this.activateIfFileName(desc.id, fileName))).then(() => { });
const fileNamePromise = Promise.all(fileNames.map((fileName) => this.activateIfFileName(desc.id, fileName))).then(() => { });
const globPatternPromise = this.activateIfGlobPatterns(desc.id, globPatterns);
return TPromise.join([fileNamePromise, globPatternPromise]).then(() => { });
return Promise.all([fileNamePromise, globPatternPromise]).then(() => { });
}
private async activateIfFileName(extensionId: string, fileName: string): Promise<void> {
......@@ -244,7 +243,7 @@ export class ExtensionHostMain {
this._extHostLogService.trace(`extensionHostMain#activateIfGlobPatterns: fileSearch, extension: ${extensionId}, entryPoint: workspaceContains`);
if (globPatterns.length === 0) {
return TPromise.as(void 0);
return Promise.resolve(void 0);
}
const tokenSource = new CancellationTokenSource();
......@@ -276,12 +275,12 @@ export class ExtensionHostMain {
);
}
return TPromise.as(void 0);
return Promise.resolve(void 0);
}
private handleExtensionTests(): TPromise<void> {
private handleExtensionTests(): Promise<void> {
if (!this._environment.extensionTestsPath || !this._environment.extensionDevelopmentLocationURI) {
return TPromise.as(null);
return Promise.resolve(null);
}
// Require the test runner via node require from the provided path
......@@ -314,7 +313,7 @@ export class ExtensionHostMain {
this.gracefulExit(1 /* ERROR */);
}
return TPromise.wrapError<void>(new Error(requireError ? requireError.toString() : nls.localize('extensionTestError', "Path {0} does not point to a valid extension test runner.", this._environment.extensionTestsPath)));
return Promise.reject(new Error(requireError ? requireError.toString() : nls.localize('extensionTestError', "Path {0} does not point to a valid extension test runner.", this._environment.extensionTestsPath)));
}
private transform(initData: IInitData, rpcProtocol: RPCProtocol): IInitData {
......
......@@ -6,7 +6,6 @@
import { Event } from 'vs/base/common/event';
import Severity from 'vs/base/common/severity';
import { URI } from 'vs/base/common/uri';
import { TPromise } from 'vs/base/common/winjs.base';
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
import { IExtensionPoint } from 'vs/workbench/services/extensions/common/extensionsRegistry';
......@@ -160,23 +159,23 @@ export interface IExtensionService {
/**
* Send an activation event and activate interested extensions.
*/
activateByEvent(activationEvent: string): TPromise<void>;
activateByEvent(activationEvent: string): Thenable<void>;
/**
* An promise that resolves when the installed extensions are registered after
* their extension points got handled.
*/
whenInstalledExtensionsRegistered(): TPromise<boolean>;
whenInstalledExtensionsRegistered(): Promise<boolean>;
/**
* Return all registered extensions
*/
getExtensions(): TPromise<IExtensionDescription[]>;
getExtensions(): Promise<IExtensionDescription[]>;
/**
* Read all contributions to an extension point.
*/
readExtensionPointContributions<T>(extPoint: IExtensionPoint<T>): TPromise<ExtensionPointContribution<T>[]>;
readExtensionPointContributions<T>(extPoint: IExtensionPoint<T>): Promise<ExtensionPointContribution<T>[]>;
/**
* Get information about extensions status.
......@@ -191,7 +190,7 @@ export interface IExtensionService {
/**
* Begin an extension host process profile session.
*/
startExtensionHostProfile(): TPromise<ProfileSession>;
startExtensionHostProfile(): Promise<ProfileSession>;
/**
* Return the inspect port or 0.
......
......@@ -94,7 +94,7 @@ export class ExtensionHostProcessWorker implements IExtensionHostStarter {
private _messageProtocol: TPromise<IMessagePassingProtocol>;
constructor(
private readonly _extensions: TPromise<IExtensionDescription[]>,
private readonly _extensions: Promise<IExtensionDescription[]>,
private readonly _extensionHostLogsLocation: URI,
@IWorkspaceContextService private readonly _contextService: IWorkspaceContextService,
@INotificationService private readonly _notificationService: INotificationService,
......
......@@ -19,7 +19,6 @@ import * as platform from 'vs/base/common/platform';
import { fsPath, isEqualOrParent } from 'vs/base/common/resources';
import * as strings from 'vs/base/common/strings';
import { URI } from 'vs/base/common/uri';
import { TPromise } from 'vs/base/common/winjs.base';
import * as pfs from 'vs/base/node/pfs';
import { IMessagePassingProtocol } from 'vs/base/parts/ipc/node/ipc';
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
......@@ -80,7 +79,7 @@ class ExtraBuiltInExtensionResolver implements IExtensionResolver {
constructor(private builtInExtensions: IBuiltInExtension[], private control: IBuiltInExtensionControl) { }
resolveExtensions(): TPromise<IExtensionReference[]> {
resolveExtensions(): Promise<IExtensionReference[]> {
const result: IExtensionReference[] = [];
for (const ext of this.builtInExtensions) {
......@@ -98,7 +97,7 @@ class ExtraBuiltInExtensionResolver implements IExtensionResolver {
}
}
return TPromise.as(result);
return Promise.resolve(result);
}
}
......@@ -110,7 +109,7 @@ function messageWithSource(source: string, message: string): string {
}
const hasOwnProperty = Object.hasOwnProperty;
const NO_OP_VOID_PROMISE = TPromise.wrap<void>(void 0);
const NO_OP_VOID_PROMISE = Promise.resolve<void>(void 0);
export class ExtensionHostProcessManager extends Disposable {
......@@ -129,7 +128,7 @@ export class ExtensionHostProcessManager extends Disposable {
/**
* winjs believes a proxy is a promise because it has a `then` method, so wrap the result in an object.
*/
private _extensionHostProcessProxy: TPromise<{ value: ExtHostExtensionServiceShape; }>;
private _extensionHostProcessProxy: Thenable<{ value: ExtHostExtensionServiceShape; }>;
constructor(
extensionHostProcessWorker: IExtensionHostStarter,
......@@ -224,7 +223,7 @@ export class ExtensionHostProcessManager extends Disposable {
return this._extensionHostProcessRPCProtocol.getProxy(ExtHostContext.ExtHostExtensionService);
}
public activateByEvent(activationEvent: string): TPromise<void> {
public activateByEvent(activationEvent: string): Thenable<void> {
if (this._extensionHostProcessFinishedActivateEvents[activationEvent] || !this._extensionHostProcessProxy) {
return NO_OP_VOID_PROMISE;
}
......@@ -478,7 +477,7 @@ export class ExtensionService extends Disposable implements IExtensionService {
// ---- begin IExtensionService
public activateByEvent(activationEvent: string): TPromise<void> {
public activateByEvent(activationEvent: string): Promise<void> {
if (this._installedExtensionsReady.isOpen()) {
// Extensions have been scanned and interpreted
......@@ -501,8 +500,8 @@ export class ExtensionService extends Disposable implements IExtensionService {
}
}
private _activateByEvent(activationEvent: string): TPromise<void> {
const result = TPromise.join(
private _activateByEvent(activationEvent: string): Promise<void> {
const result = Promise.all(
this._extensionHostProcessManagers.map(extHostManager => extHostManager.activateByEvent(activationEvent))
).then(() => { });
this._onWillActivateByEvent.fire({
......@@ -512,17 +511,17 @@ export class ExtensionService extends Disposable implements IExtensionService {
return result;
}
public whenInstalledExtensionsRegistered(): TPromise<boolean> {
public whenInstalledExtensionsRegistered(): Promise<boolean> {
return this._installedExtensionsReady.wait();
}
public getExtensions(): TPromise<IExtensionDescription[]> {
public getExtensions(): Promise<IExtensionDescription[]> {
return this._installedExtensionsReady.wait().then(() => {
return this._registry.getAllExtensionDescriptions();
});
}
public readExtensionPointContributions<T>(extPoint: IExtensionPoint<T>): TPromise<ExtensionPointContribution<T>[]> {
public readExtensionPointContributions<T>(extPoint: IExtensionPoint<T>): Promise<ExtensionPointContribution<T>[]> {
return this._installedExtensionsReady.wait().then(() => {
let availableExtensions = this._registry.getAllExtensionDescriptions();
......@@ -610,7 +609,7 @@ export class ExtensionService extends Disposable implements IExtensionService {
});
}
private _scanExtensions(): TPromise<IExtensionDescription[]> {
private _scanExtensions(): Promise<IExtensionDescription[]> {
const log = new Logger((severity, source, message) => {
this._logOrShowMessage(severity, this._isDev ? messageWithSource(source, message) : message);
});
......@@ -693,7 +692,7 @@ export class ExtensionService extends Disposable implements IExtensionService {
return this.extensionManagementService.getInstalled(LocalExtensionType.User)
.then(installed => {
const toDisable = installed.filter(i => extensionsToDisable.some(e => areSameExtensions({ id: getGalleryExtensionIdFromLocal(i) }, e)));
return TPromise.join(toDisable.map(e => this._extensionEnablementService.setEnablement(e, EnablementState.Disabled)));
return Promise.all(toDisable.map(e => this._extensionEnablementService.setEnablement(e, EnablementState.Disabled)));
})
.then(() => {
this._storageService.store(BetterMergeDisabledNowKey, true, StorageScope.GLOBAL);
......@@ -872,9 +871,9 @@ export class ExtensionService extends Disposable implements IExtensionService {
return result;
}
private static _scanInstalledExtensions(windowService: IWindowService, notificationService: INotificationService, environmentService: IEnvironmentService, extensionEnablementService: IExtensionEnablementService, log: ILog): TPromise<{ system: IExtensionDescription[], user: IExtensionDescription[], development: IExtensionDescription[] }> {
private static _scanInstalledExtensions(windowService: IWindowService, notificationService: INotificationService, environmentService: IEnvironmentService, extensionEnablementService: IExtensionEnablementService, log: ILog): Promise<{ system: IExtensionDescription[], user: IExtensionDescription[], development: IExtensionDescription[] }> {
const translationConfig: TPromise<Translations> = platform.translationsConfigFile
const translationConfig: Promise<Translations> = platform.translationsConfigFile
? pfs.readFile(platform.translationsConfigFile, 'utf8').then((content) => {
try {
return JSON.parse(content) as Translations;
......@@ -884,7 +883,7 @@ export class ExtensionService extends Disposable implements IExtensionService {
}, (err) => {
return Object.create(null);
})
: TPromise.as(Object.create(null));
: Promise.resolve(Object.create(null));
return translationConfig.then((translations) => {
const version = pkg.version;
......@@ -901,7 +900,7 @@ export class ExtensionService extends Disposable implements IExtensionService {
log
);
let finalBuiltinExtensions: TPromise<IExtensionDescription[]> = TPromise.wrap(builtinExtensions);
let finalBuiltinExtensions: Promise<IExtensionDescription[]> = builtinExtensions;
if (devMode) {
const builtInExtensionsFilePath = path.normalize(path.join(getPathFromAmdModule(require, ''), '..', 'build', 'builtInExtensions.json'));
......@@ -913,11 +912,11 @@ export class ExtensionService extends Disposable implements IExtensionService {
.then<IBuiltInExtensionControl>(raw => JSON.parse(raw), () => ({} as any));
const input = new ExtensionScannerInput(version, commit, locale, devMode, getExtraDevSystemExtensionsRoot(), true, false, translations);
const extraBuiltinExtensions = TPromise.join([builtInExtensions, controlFile])
const extraBuiltinExtensions = Promise.all([builtInExtensions, controlFile])
.then(([builtInExtensions, control]) => new ExtraBuiltInExtensionResolver(builtInExtensions, control))
.then(resolver => ExtensionScanner.scanExtensions(input, log, resolver));
finalBuiltinExtensions = TPromise.join([builtinExtensions, extraBuiltinExtensions]).then(([builtinExtensions, extraBuiltinExtensions]) => {
finalBuiltinExtensions = Promise.all([builtinExtensions, extraBuiltinExtensions]).then(([builtinExtensions, extraBuiltinExtensions]) => {
let resultMap: { [id: string]: IExtensionDescription; } = Object.create(null);
for (let i = 0, len = builtinExtensions.length; i < len; i++) {
resultMap[builtinExtensions[i].id] = builtinExtensions[i];
......@@ -945,7 +944,7 @@ export class ExtensionService extends Disposable implements IExtensionService {
const userExtensions = (
extensionEnablementService.allUserExtensionsDisabled || !environmentService.extensionsPath
? TPromise.as([])
? Promise.resolve([])
: this._scanExtensionsWithCache(
windowService,
notificationService,
......@@ -957,14 +956,14 @@ export class ExtensionService extends Disposable implements IExtensionService {
);
// Always load developed extensions while extensions development
let developedExtensions = TPromise.as([]);
let developedExtensions = Promise.resolve([]);
if (environmentService.isExtensionDevelopment && environmentService.extensionDevelopmentLocationURI.scheme === Schemas.file) {
developedExtensions = ExtensionScanner.scanOneOrMultipleExtensions(
new ExtensionScannerInput(version, commit, locale, devMode, fsPath(environmentService.extensionDevelopmentLocationURI), false, true, translations), log
);
}
return TPromise.join([finalBuiltinExtensions, userExtensions, developedExtensions]).then((extensionDescriptions: IExtensionDescription[][]) => {
return Promise.all([finalBuiltinExtensions, userExtensions, developedExtensions]).then((extensionDescriptions: IExtensionDescription[][]) => {
const system = extensionDescriptions[0];
const user = extensionDescriptions[1];
const development = extensionDescriptions[2];
......
......@@ -10,7 +10,6 @@ import * as json from 'vs/base/common/json';
import { getParseErrorMessage } from 'vs/base/common/jsonErrorMessages';
import * as types from 'vs/base/common/types';
import { URI } from 'vs/base/common/uri';
import { TPromise } from 'vs/base/common/winjs.base';
import * as pfs from 'vs/base/node/pfs';
import { getGalleryExtensionId, getLocalExtensionId, groupByExtension } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
import { getIdAndVersionFromLocalExtensionId } from 'vs/platform/extensionManagement/node/extensionManagementUtil';
......@@ -81,7 +80,7 @@ abstract class ExtensionManifestHandler {
class ExtensionManifestParser extends ExtensionManifestHandler {
public parse(): TPromise<IExtensionDescription> {
public parse(): Promise<IExtensionDescription> {
return pfs.readFile(this._absoluteManifestPath).then((manifestContents) => {
try {
const manifest = JSON.parse(manifestContents.toString());
......@@ -114,7 +113,7 @@ class ExtensionManifestNLSReplacer extends ExtensionManifestHandler {
this._nlsConfig = nlsConfig;
}
public replaceNLS(extensionDescription: IExtensionDescription): TPromise<IExtensionDescription> {
public replaceNLS(extensionDescription: IExtensionDescription): Promise<IExtensionDescription> {
interface MessageBag {
[key: string]: string;
}
......@@ -141,7 +140,7 @@ class ExtensionManifestNLSReplacer extends ExtensionManifestHandler {
const translationId = `${extensionDescription.publisher}.${extensionDescription.name}`;
let translationPath = this._nlsConfig.translations[translationId];
let localizedMessages: TPromise<LocalizedMessages>;
let localizedMessages: Promise<LocalizedMessages>;
if (translationPath) {
localizedMessages = pfs.readFile(translationPath, 'utf8').then<LocalizedMessages, LocalizedMessages>((content) => {
let errors: json.ParseError[] = [];
......@@ -206,7 +205,7 @@ class ExtensionManifestNLSReplacer extends ExtensionManifestHandler {
* Parses original message bundle, returns null if the original message bundle is null.
*/
private static resolveOriginalMessageBundle(originalMessageBundle: string, errors: json.ParseError[]) {
return new TPromise<{ [key: string]: string; }>((c, e) => {
return new Promise<{ [key: string]: string; }>((c, e) => {
if (originalMessageBundle) {
pfs.readFile(originalMessageBundle).then(originalBundleContent => {
c(json.parse(originalBundleContent.toString(), errors));
......@@ -223,8 +222,8 @@ class ExtensionManifestNLSReplacer extends ExtensionManifestHandler {
* Finds localized message bundle and the original (unlocalized) one.
* If the localized file is not present, returns null for the original and marks original as localized.
*/
private static findMessageBundles(nlsConfig: NlsConfiguration, basename: string): TPromise<{ localized: string, original: string }> {
return new TPromise<{ localized: string, original: string }>((c, e) => {
private static findMessageBundles(nlsConfig: NlsConfiguration, basename: string): Promise<{ localized: string, original: string }> {
return new Promise<{ localized: string, original: string }>((c, e) => {
function loop(basename: string, locale: string): void {
let toCheck = `${basename}.nls.${locale}.json`;
pfs.fileExists(toCheck).then(exists => {
......@@ -485,14 +484,14 @@ export interface IExtensionReference {
}
export interface IExtensionResolver {
resolveExtensions(): TPromise<IExtensionReference[]>;
resolveExtensions(): Promise<IExtensionReference[]>;
}
class DefaultExtensionResolver implements IExtensionResolver {
constructor(private root: string) { }
resolveExtensions(): TPromise<IExtensionReference[]> {
resolveExtensions(): Promise<IExtensionReference[]> {
return pfs.readDirsInDir(this.root)
.then(folders => folders.map(name => ({ name, path: join(this.root, name) })));
}
......@@ -503,7 +502,7 @@ export class ExtensionScanner {
/**
* Read the extension defined in `absoluteFolderPath`
*/
public static scanExtension(version: string, log: ILog, absoluteFolderPath: string, isBuiltin: boolean, isUnderDevelopment: boolean, nlsConfig: NlsConfiguration): TPromise<IExtensionDescription> {
public static scanExtension(version: string, log: ILog, absoluteFolderPath: string, isBuiltin: boolean, isUnderDevelopment: boolean, nlsConfig: NlsConfiguration): Promise<IExtensionDescription> {
absoluteFolderPath = normalize(absoluteFolderPath);
let parser = new ExtensionManifestParser(version, log, absoluteFolderPath, isBuiltin, isUnderDevelopment);
......@@ -571,7 +570,7 @@ export class ExtensionScanner {
}
const nlsConfig = ExtensionScannerInput.createNLSConfig(input);
let extensionDescriptions = await TPromise.join(refs.map(r => this.scanExtension(input.ourVersion, log, r.path, isBuiltin, isUnderDevelopment, nlsConfig)));
let extensionDescriptions = await Promise.all(refs.map(r => this.scanExtension(input.ourVersion, log, r.path, isBuiltin, isUnderDevelopment, nlsConfig)));
extensionDescriptions = extensionDescriptions.filter(item => item !== null && !obsolete[getLocalExtensionId(getGalleryExtensionId(item.publisher, item.name), item.version)]);
if (!isBuiltin) {
......@@ -597,7 +596,7 @@ export class ExtensionScanner {
* Combination of scanExtension and scanExtensions: If an extension manifest is found at root, we load just this extension,
* otherwise we assume the folder contains multiple extensions.
*/
public static scanOneOrMultipleExtensions(input: ExtensionScannerInput, log: ILog): TPromise<IExtensionDescription[]> {
public static scanOneOrMultipleExtensions(input: ExtensionScannerInput, log: ILog): Promise<IExtensionDescription[]> {
const absoluteFolderPath = input.absoluteFolderPath;
const isBuiltin = input.isBuiltin;
const isUnderDevelopment = input.isUnderDevelopment;
......
......@@ -311,14 +311,14 @@ export class TestExtensionService implements IExtensionService {
onDidRegisterExtensions: Event<void> = Event.None;
onDidChangeExtensionsStatus: Event<string[]> = Event.None;
onWillActivateByEvent: Event<IWillActivateEvent> = Event.None;
activateByEvent(_activationEvent: string): TPromise<void> { return TPromise.as(void 0); }
whenInstalledExtensionsRegistered(): TPromise<boolean> { return TPromise.as(true); }
getExtensions(): TPromise<IExtensionDescription[]> { return TPromise.as([]); }
readExtensionPointContributions<T>(_extPoint: IExtensionPoint<T>): TPromise<ExtensionPointContribution<T>[]> { return TPromise.as(Object.create(null)); }
activateByEvent(_activationEvent: string): Thenable<void> { return Promise.resolve(void 0); }
whenInstalledExtensionsRegistered(): Promise<boolean> { return Promise.resolve(true); }
getExtensions(): Promise<IExtensionDescription[]> { return Promise.resolve([]); }
readExtensionPointContributions<T>(_extPoint: IExtensionPoint<T>): Promise<ExtensionPointContribution<T>[]> { return Promise.resolve(Object.create(null)); }
getExtensionsStatus(): { [id: string]: IExtensionsStatus; } { return Object.create(null); }
canProfileExtensionHost(): boolean { return false; }
getInspectPort(): number { return 0; }
startExtensionHostProfile(): TPromise<ProfileSession> { return TPromise.as(Object.create(null)); }
startExtensionHostProfile(): Promise<ProfileSession> { return Promise.resolve(Object.create(null)); }
restartExtensionHost(): void { }
startExtensionHost(): void { }
stopExtensionHost(): void { }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册