diff --git a/src/vs/workbench/parts/files/common/editors/fileEditorInput.ts b/src/vs/workbench/parts/files/common/editors/fileEditorInput.ts index 1393994840d3f7debfe3a1272dd1f88399c5a953..e3806ca1e36c0453f2ae883cbdf85b3db1d9d348 100644 --- a/src/vs/workbench/parts/files/common/editors/fileEditorInput.ts +++ b/src/vs/workbench/parts/files/common/editors/fileEditorInput.ts @@ -6,6 +6,7 @@ import { localize } from 'vs/nls'; import { TPromise } from 'vs/base/common/winjs.base'; +import { memoize } from 'vs/base/common/decorators'; import paths = require('vs/base/common/paths'); import labels = require('vs/base/common/labels'); import URI from 'vs/base/common/uri'; @@ -33,14 +34,6 @@ export class FileEditorInput extends EditorInput implements IFileEditorInput { private name: string; - private shortDescription: string; - private mediumDescription: string; - private longDescription: string; - - private shortTitle: string; - private mediumTitle: string; - private longTitle: string; - private toUnbind: IDisposable[]; /** @@ -130,35 +123,65 @@ export class FileEditorInput extends EditorInput implements IFileEditorInput { return this.decorateOrphanedFiles(this.name); } + @memoize + private get shortDescription(): string { + return paths.basename(labels.getPathLabel(paths.dirname(this.resource.path), void 0, this.environmentService)); + } + + @memoize + private get mediumDescription(): string { + return labels.getPathLabel(paths.dirname(this.resource.path), this.contextService, this.environmentService); + } + + @memoize + private get longDescription(): string { + return labels.getPathLabel(paths.dirname(this.resource.path), void 0, this.environmentService); + } + public getDescription(verbosity: Verbosity = Verbosity.MEDIUM): string { let description: string; switch (verbosity) { case Verbosity.SHORT: - description = this.shortDescription ? this.shortDescription : (this.shortDescription = paths.basename(labels.getPathLabel(paths.dirname(this.resource.fsPath), void 0, this.environmentService))); + description = this.shortDescription; break; case Verbosity.LONG: - description = this.longDescription ? this.longDescription : (this.longDescription = labels.getPathLabel(paths.dirname(this.resource.fsPath), void 0, this.environmentService)); + description = this.longDescription; break; case Verbosity.MEDIUM: default: - description = this.mediumDescription ? this.mediumDescription : (this.mediumDescription = labels.getPathLabel(paths.dirname(this.resource.fsPath), this.contextService, this.environmentService)); + description = this.mediumDescription; break; } return description; } + @memoize + private get shortTitle(): string { + return this.getName(); + } + + @memoize + private get mediumTitle(): string { + return labels.getPathLabel(this.resource, this.contextService, this.environmentService); + } + + @memoize + private get longTitle(): string { + return labels.getPathLabel(this.resource, void 0, this.environmentService); + } + public getTitle(verbosity: Verbosity): string { let title: string; switch (verbosity) { case Verbosity.SHORT: - title = this.shortTitle ? this.shortTitle : (this.shortTitle = this.getName()); + title = this.shortTitle; break; case Verbosity.MEDIUM: - title = this.mediumTitle ? this.mediumTitle : (this.mediumTitle = labels.getPathLabel(this.resource, this.contextService, this.environmentService)); + title = this.mediumTitle; break; case Verbosity.LONG: - title = this.longTitle ? this.longTitle : (this.longTitle = labels.getPathLabel(this.resource, void 0, this.environmentService)); + title = this.longTitle; break; }