Path: blob/main/src/vs/workbench/common/editor/textDiffEditorModel.ts
3296 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { IDiffEditorModel } from '../../../editor/common/editorCommon.js';6import { BaseTextEditorModel } from './textEditorModel.js';7import { DiffEditorModel } from './diffEditorModel.js';8import { IMarkdownString } from '../../../base/common/htmlContent.js';910/**11* The base text editor model for the diff editor. It is made up of two text editor models, the original version12* and the modified version.13*/14export class TextDiffEditorModel extends DiffEditorModel {1516protected override readonly _originalModel: BaseTextEditorModel | undefined;17override get originalModel(): BaseTextEditorModel | undefined { return this._originalModel; }1819protected override readonly _modifiedModel: BaseTextEditorModel | undefined;20override get modifiedModel(): BaseTextEditorModel | undefined { return this._modifiedModel; }2122private _textDiffEditorModel: IDiffEditorModel | undefined = undefined;23get textDiffEditorModel(): IDiffEditorModel | undefined { return this._textDiffEditorModel; }2425constructor(originalModel: BaseTextEditorModel, modifiedModel: BaseTextEditorModel) {26super(originalModel, modifiedModel);2728this._originalModel = originalModel;29this._modifiedModel = modifiedModel;3031this.updateTextDiffEditorModel();32}3334override async resolve(): Promise<void> {35await super.resolve();3637this.updateTextDiffEditorModel();38}3940private updateTextDiffEditorModel(): void {41if (this.originalModel?.isResolved() && this.modifiedModel?.isResolved()) {4243// Create new44if (!this._textDiffEditorModel) {45this._textDiffEditorModel = {46original: this.originalModel.textEditorModel,47modified: this.modifiedModel.textEditorModel48};49}5051// Update existing52else {53this._textDiffEditorModel.original = this.originalModel.textEditorModel;54this._textDiffEditorModel.modified = this.modifiedModel.textEditorModel;55}56}57}5859override isResolved(): boolean {60return !!this._textDiffEditorModel;61}6263isReadonly(): boolean | IMarkdownString {64return !!this.modifiedModel && this.modifiedModel.isReadonly();65}6667override dispose(): void {6869// Free the diff editor model but do not propagate the dispose() call to the two models70// inside. We never created the two models (original and modified) so we can not dispose71// them without sideeffects. Rather rely on the models getting disposed when their related72// inputs get disposed from the diffEditorInput.73this._textDiffEditorModel = undefined;7475super.dispose();76}77}787980