Register a few more disposables in notebooks

This commit is contained in:
Matt Bierner 2021-08-19 13:49:07 -07:00
parent de9cc71487
commit 62bfac1e18
No known key found for this signature in database
GPG key ID: 099C331567E11888
3 changed files with 20 additions and 15 deletions

View file

@ -5,7 +5,7 @@
import * as DOM from 'vs/base/browser/dom';
import { Delayer } from 'vs/base/common/async';
import { Disposable } from 'vs/base/common/lifecycle';
import { Disposable, MutableDisposable } from 'vs/base/common/lifecycle';
import * as platform from 'vs/base/common/platform';
import { BaseCellRenderTemplate, expandCellRangesWithHiddenCells, ICellViewModel, INotebookCellList, INotebookEditor } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
import { cloneNotebookCellTextModel } from 'vs/workbench/contrib/notebook/common/model/notebookCellTextModel';
@ -37,7 +37,9 @@ export class CellDragAndDropController extends Disposable {
private list!: INotebookCellList;
private isScrolling = false;
private scrollingDelayer: Delayer<void>;
private readonly scrollingDelayer: Delayer<void>;
private readonly listOnWillScrollListener = this._register(new MutableDisposable());
constructor(
private readonly notebookEditor: INotebookEditor,
@ -75,13 +77,13 @@ export class CellDragAndDropController extends Disposable {
this.onCellDragLeave(event);
});
this.scrollingDelayer = new Delayer(200);
this.scrollingDelayer = this._register(new Delayer(200));
}
setList(value: INotebookCellList) {
this.list = value;
this.list.onWillScroll(e => {
this.listOnWillScrollListener.value = this.list.onWillScroll(e => {
if (!e.scrollTopChanged) {
return;
}

View file

@ -166,7 +166,7 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
readonly onWillAddRemoveCells = this._onWillAddRemoveCells.event;
readonly onDidChangeContent = this._onDidChangeContent.event;
private _cellhandlePool: number = 0;
private _cellListeners: Map<number, IDisposable> = new Map();
private readonly _cellListeners: Map<number, IDisposable> = new Map();
private _cells: NotebookCellTextModel[] = [];
metadata: NotebookDocumentMetadata = {};
@ -340,7 +340,10 @@ export class NotebookTextModel extends Disposable implements INotebookTextModel
override dispose() {
this._onWillDispose.fire();
this._undoService.removeElements(this.uri);
dispose(this._cellListeners.values());
this._cellListeners.clear();
dispose(this._cells);
super.dispose();
}

View file

@ -25,7 +25,7 @@ import { bufferToReadable, bufferToStream, streamToBuffer, VSBuffer, VSBufferRea
import { assertType } from 'vs/base/common/types';
import { IUntitledTextEditorService } from 'vs/workbench/services/untitled/common/untitledTextEditorService';
import { StoredFileWorkingCopyState, IStoredFileWorkingCopy, IStoredFileWorkingCopyModel, IStoredFileWorkingCopyModelContentChangedEvent, IStoredFileWorkingCopyModelFactory } from 'vs/workbench/services/workingCopy/common/storedFileWorkingCopy';
import { DisposableStore, IDisposable } from 'vs/base/common/lifecycle';
import { Disposable, DisposableStore } from 'vs/base/common/lifecycle';
import { canceled } from 'vs/base/common/errors';
import { NotebookEditorInput } from 'vs/workbench/contrib/notebook/common/notebookEditorInput';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
@ -561,21 +561,22 @@ export class SimpleNotebookEditorModel extends EditorModel implements INotebookE
}
}
export class NotebookFileWorkingCopyModel implements IStoredFileWorkingCopyModel, IUntitledFileWorkingCopyModel {
private readonly _onDidChangeContent = new Emitter<IStoredFileWorkingCopyModelContentChangedEvent & IUntitledFileWorkingCopyModelContentChangedEvent>();
private readonly _changeListener: IDisposable;
export class NotebookFileWorkingCopyModel extends Disposable implements IStoredFileWorkingCopyModel, IUntitledFileWorkingCopyModel {
private readonly _onDidChangeContent = this._register(new Emitter<IStoredFileWorkingCopyModelContentChangedEvent & IUntitledFileWorkingCopyModelContentChangedEvent>());
readonly onDidChangeContent = this._onDidChangeContent.event;
readonly onWillDispose: Event<void>;
constructor(
private readonly _notebookModel: NotebookTextModel,
private readonly _notebookSerializer: INotebookSerializer
) {
super();
this.onWillDispose = _notebookModel.onWillDispose.bind(_notebookModel);
this._changeListener = _notebookModel.onDidChangeContent(e => {
this._register(_notebookModel.onDidChangeContent(e => {
for (const rawEvent of e.rawEvents) {
if (rawEvent.kind === NotebookCellsChangeType.Initialize) {
continue;
@ -590,13 +591,12 @@ export class NotebookFileWorkingCopyModel implements IStoredFileWorkingCopyModel
});
break;
}
});
}));
}
dispose(): void {
this._changeListener.dispose();
this._onDidChangeContent.dispose();
override dispose(): void {
this._notebookModel.dispose();
super.dispose();
}
get notebookModel() {