From 17c1929af632ff078cd4d4a9f081757b13fe264b Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Wed, 2 Sep 2020 16:09:09 +0200 Subject: [PATCH] model - add a isDisposed method to generic editor models --- src/vs/editor/standalone/browser/simpleServices.ts | 7 +++++++ src/vs/platform/editor/common/editor.ts | 5 +++++ src/vs/workbench/common/editor.ts | 7 +++++++ .../services/textfile/common/textFileEditorModel.ts | 12 +++--------- .../workbench/services/textfile/common/textfiles.ts | 1 - 5 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/vs/editor/standalone/browser/simpleServices.ts b/src/vs/editor/standalone/browser/simpleServices.ts index b336adc20cb..28f78a6a999 100644 --- a/src/vs/editor/standalone/browser/simpleServices.ts +++ b/src/vs/editor/standalone/browser/simpleServices.ts @@ -78,10 +78,17 @@ export class SimpleModel implements IResolvedTextEditorModel { return false; } + private disposed = false; public dispose(): void { + this.disposed = true; + this._onDispose.fire(); } + public isDisposed(): boolean { + return this.disposed; + } + public isResolved(): boolean { return true; } diff --git a/src/vs/platform/editor/common/editor.ts b/src/vs/platform/editor/common/editor.ts index ff00b046dad..585bef41bfb 100644 --- a/src/vs/platform/editor/common/editor.ts +++ b/src/vs/platform/editor/common/editor.ts @@ -18,6 +18,11 @@ export interface IEditorModel { */ load(): Promise; + /** + * Find out if this model has been disposed. + */ + isDisposed(): boolean; + /** * Dispose associated resources */ diff --git a/src/vs/workbench/common/editor.ts b/src/vs/workbench/common/editor.ts index d698bbfe734..2001ef65566 100644 --- a/src/vs/workbench/common/editor.ts +++ b/src/vs/workbench/common/editor.ts @@ -819,6 +819,8 @@ export class EditorModel extends Disposable implements IEditorModel { private readonly _onDispose = this._register(new Emitter()); readonly onDispose = this._onDispose.event; + private disposed = false; + /** * Causes this model to load returning a promise when loading is completed. */ @@ -833,10 +835,15 @@ export class EditorModel extends Disposable implements IEditorModel { return true; } + isDisposed(): boolean { + return this.disposed; + } + /** * Subclasses should implement to free resources that have been claimed through loading. */ dispose(): void { + this.disposed = true; this._onDispose.fire(); super.dispose(); diff --git a/src/vs/workbench/services/textfile/common/textFileEditorModel.ts b/src/vs/workbench/services/textfile/common/textFileEditorModel.ts index 721d459f8d4..b8b41c83741 100644 --- a/src/vs/workbench/services/textfile/common/textFileEditorModel.ts +++ b/src/vs/workbench/services/textfile/common/textFileEditorModel.ts @@ -86,7 +86,6 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil private inConflictMode = false; private inOrphanMode = false; private inErrorMode = false; - private disposed = false; constructor( public readonly resource: URI, @@ -147,7 +146,7 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil // file is really gone and not just a faulty file event. await timeout(100); - if (this.disposed) { + if (this.isDisposed()) { newInOrphanModeValidated = true; } else { const exists = await this.fileService.exists(this.resource); @@ -155,7 +154,7 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil } } - if (this.inOrphanMode !== newInOrphanModeValidated && !this.disposed) { + if (this.inOrphanMode !== newInOrphanModeValidated && !this.isDisposed()) { this.setOrphaned(newInOrphanModeValidated); } } @@ -697,7 +696,7 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil // one after the other without waiting for the save() to complete. If we are disposed(), we risk // saving contents to disk that are stale (see https://github.com/Microsoft/vscode/issues/50942). // To fix this issue, we will not store the contents to disk when we got disposed. - if (this.disposed) { + if (this.isDisposed()) { return; } @@ -955,10 +954,6 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil return this.fileService.hasCapability(this.resource, FileSystemProviderCapabilities.Readonly); } - isDisposed(): boolean { - return this.disposed; - } - getStat(): IFileStatWithMetadata | undefined { return this.lastResolvedFileStat; } @@ -966,7 +961,6 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil dispose(): void { this.logService.trace('[text file model] dispose()', this.resource.toString(true)); - this.disposed = true; this.inConflictMode = false; this.inOrphanMode = false; this.inErrorMode = false; diff --git a/src/vs/workbench/services/textfile/common/textfiles.ts b/src/vs/workbench/services/textfile/common/textfiles.ts index 30e4652777a..1f9e42af4dd 100644 --- a/src/vs/workbench/services/textfile/common/textfiles.ts +++ b/src/vs/workbench/services/textfile/common/textfiles.ts @@ -425,7 +425,6 @@ export interface ITextFileEditorModel extends ITextEditorModel, IEncodingSupport getMode(): string | undefined; isResolved(): this is IResolvedTextFileEditorModel; - isDisposed(): boolean; } export function isTextFileEditorModel(model: ITextEditorModel): model is ITextFileEditorModel {