diff --git a/src/vs/editor/common/model.ts b/src/vs/editor/common/model.ts index e41f1fdbcba9428556d91edf347b01a824d2c1ec..98ce23d7b0e86a2c3a4c7832b5d193d67224b698 100644 --- a/src/vs/editor/common/model.ts +++ b/src/vs/editor/common/model.ts @@ -1327,7 +1327,7 @@ export interface IReadonlyTextBuffer { /** * @internal */ -export interface ITextBuffer extends IReadonlyTextBuffer, IDisposable { +export interface ITextBuffer extends IReadonlyTextBuffer { setEOL(newEOL: '\r\n' | '\n'): void; applyEdits(rawOperations: ValidAnnotatedEditOperation[], recordTrimAutoWhitespace: boolean, computeUndoEdits: boolean): ApplyEditsResult; } diff --git a/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.ts b/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.ts index 2401eba3b3cd9f1f26bdf66c97724b287417e06f..2b73835b2f4e5fdb82ac04e8750f475b9aae01ec 100644 --- a/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.ts +++ b/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.ts @@ -51,12 +51,6 @@ export class PieceTreeTextBuffer extends Disposable implements ITextBuffer { this._pieceTree = new PieceTreeBase(chunks, eol, eolNormalized); } - dispose(): void { - super.dispose(); - // Manually release reference to previous piece tree to avoid large leaks - this._pieceTree = new PieceTreeBase([], '\n', true); - } - // #region TextBuffer public equals(other: ITextBuffer): boolean { if (!(other instanceof PieceTreeTextBuffer)) { diff --git a/src/vs/editor/common/model/textModel.ts b/src/vs/editor/common/model/textModel.ts index 9b161cb202a655a20cbad7f759ad0c042fe92429..2ba7cb4ee89c818c1329cbec9375908355d37209 100644 --- a/src/vs/editor/common/model/textModel.ts +++ b/src/vs/editor/common/model/textModel.ts @@ -328,7 +328,7 @@ export class TextModel extends Disposable implements model.ITextModel { this._undoRedoService = undoRedoService; this._attachedEditorCount = 0; - this._buffer = this._register(createTextBuffer(source, creationOptions.defaultEOL)); + this._buffer = createTextBuffer(source, creationOptions.defaultEOL); this._options = TextModel.resolveOptions(this._buffer, creationOptions); @@ -387,6 +387,9 @@ export class TextModel extends Disposable implements model.ITextModel { this._isDisposed = true; super.dispose(); this._isDisposing = false; + // Manually release reference to previous text buffer to avoid large leaks + // in case someone leaks a TextModel reference + this._buffer = createTextBuffer('', this._options.defaultEOL); } private _assertNotDisposed(): void {