Make sure we register some more emitters in notebooks

This ensures we clean these up on dispose
This commit is contained in:
Matt Bierner 2021-08-18 20:10:06 -07:00
parent 9db732867d
commit f84c1c1821
No known key found for this signature in database
GPG key ID: 099C331567E11888
13 changed files with 45 additions and 44 deletions

View file

@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import { Emitter, Event } from 'vs/base/common/event';
import { DisposableStore } from 'vs/base/common/lifecycle';
import { DisposableStore, IDisposable } from 'vs/base/common/lifecycle';
import { TrackedRangeStickiness } from 'vs/editor/common/model';
import { FoldingRegion, FoldingRegions } from 'vs/editor/contrib/folding/foldingRanges';
import { IFoldingRangeData, sanitizeRanges } from 'vs/editor/contrib/folding/syntaxRangeProvider';
@ -16,7 +16,7 @@ type RegionFilter = (r: FoldingRegion) => boolean;
type RegionFilterWithLevel = (r: FoldingRegion, level: number) => boolean;
export class FoldingModel {
export class FoldingModel implements IDisposable {
private _viewModel: NotebookViewModel | null = null;
private readonly _viewModelStore = new DisposableStore();
private _regions: FoldingRegions;

View file

@ -34,9 +34,9 @@ interface ILayoutInfoDelta extends ILayoutInfoDelta0 {
export abstract class DiffElementViewModelBase extends Disposable {
public metadataFoldingState: PropertyFoldingState;
public outputFoldingState: PropertyFoldingState;
protected _layoutInfoEmitter = new Emitter<CellDiffViewModelLayoutChangeEvent>();
protected _layoutInfoEmitter = this._register(new Emitter<CellDiffViewModelLayoutChangeEvent>());
onDidLayoutChange = this._layoutInfoEmitter.event;
protected _stateChangeEmitter = new Emitter<{ renderOutput: boolean; }>();
protected _stateChangeEmitter = this._register(new Emitter<{ renderOutput: boolean; }>());
onDidStateChange = this._stateChangeEmitter.event;
protected _layoutInfo!: IDiffElementLayoutInfo;

View file

@ -69,9 +69,9 @@ export class DiffNestedCellViewModel extends Disposable implements IDiffNestedCe
protected _outputCollection: number[] = [];
protected _outputsTop: PrefixSumComputer | null = null;
protected readonly _onDidChangeOutputLayout = new Emitter<void>();
readonly onDidChangeOutputLayout = this._onDidChangeOutputLayout.event;
protected readonly _onDidChangeOutputLayout = this._register(new Emitter<void>());
readonly onDidChangeOutputLayout = this._onDidChangeOutputLayout.event;
constructor(
readonly textModel: NotebookCellTextModel,

View file

@ -4,6 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import { Emitter } from 'vs/base/common/event';
import { Disposable } from 'vs/base/common/lifecycle';
import { IDiffElementLayoutInfo } from 'vs/workbench/contrib/notebook/browser/diff/notebookDiffEditorBrowser';
import { NotebookLayoutChangeEvent, NotebookLayoutInfo } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
@ -32,14 +33,12 @@ export class NotebookCellLayoutChangedEvent {
export type NotebookDiffViewEvent = NotebookDiffLayoutChangedEvent | NotebookCellLayoutChangedEvent;
export class NotebookDiffEditorEventDispatcher {
protected readonly _onDidChangeLayout = new Emitter<NotebookDiffLayoutChangedEvent>();
export class NotebookDiffEditorEventDispatcher extends Disposable {
protected readonly _onDidChangeLayout = this._register(new Emitter<NotebookDiffLayoutChangedEvent>());
readonly onDidChangeLayout = this._onDidChangeLayout.event;
protected readonly _onDidChangeCellLayout = new Emitter<NotebookCellLayoutChangedEvent>();
readonly onDidChangeCellLayout = this._onDidChangeCellLayout.event;
constructor() {
}
protected readonly _onDidChangeCellLayout = this._register(new Emitter<NotebookCellLayoutChangedEvent>());
readonly onDidChangeCellLayout = this._onDidChangeCellLayout.event;
emit(events: NotebookDiffViewEvent[]) {
for (let i = 0, len = events.length; i < len; i++) {

View file

@ -73,7 +73,7 @@ export class NotebookTextDiffEditor extends EditorPane implements INotebookTextD
private _revealFirst: boolean;
private readonly _insetModifyQueueByOutputId = new SequencerByKey<string>();
protected _onDidDynamicOutputRendered = new Emitter<{ cell: IGenericCellViewModel, output: ICellOutputViewModel; }>();
protected _onDidDynamicOutputRendered = this._register(new Emitter<{ cell: IGenericCellViewModel, output: ICellOutputViewModel; }>());
onDidDynamicOutputRendered = this._onDidDynamicOutputRendered.event;
private _notebookOptions: NotebookOptions;

View file

@ -13,10 +13,10 @@ import { INotebookCellStatusBarItemList, INotebookCellStatusBarItemProvider } fr
export class NotebookCellStatusBarService extends Disposable implements INotebookCellStatusBarService {
private _onDidChangeProviders = new Emitter<void>();
private _onDidChangeProviders = this._register(new Emitter<void>());
readonly onDidChangeProviders: Event<void> = this._onDidChangeProviders.event;
private _onDidChangeItems = new Emitter<void>();
private _onDidChangeItems = this._register(new Emitter<void>());
readonly onDidChangeItems: Event<void> = this._onDidChangeItems.event;
private _providers: INotebookCellStatusBarItemProvider[] = [];

View file

@ -2469,7 +2469,7 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditor
//#region --- webview IPC ----
private readonly _onDidReceiveMessage = new Emitter<INotebookWebviewMessage>();
private readonly _onDidReceiveMessage = this._register(new Emitter<INotebookWebviewMessage>());
readonly onDidReceiveMessage: Event<INotebookWebviewMessage> = this._onDidReceiveMessage.event;

View file

@ -4,12 +4,13 @@
*--------------------------------------------------------------------------------------------*/
import { Emitter } from 'vs/base/common/event';
import { Disposable } from 'vs/base/common/lifecycle';
import { INotebookRendererMessagingService, IScopedRendererMessaging } from 'vs/workbench/contrib/notebook/common/notebookRendererMessagingService';
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
type MessageToSend = { editorId: string; rendererId: string; message: unknown };
export class NotebookRendererMessagingService implements INotebookRendererMessagingService {
export class NotebookRendererMessagingService extends Disposable implements INotebookRendererMessagingService {
declare _serviceBrand: undefined;
/**
* Activation promises. Maps renderer IDs to a queue of messages that should
@ -17,10 +18,14 @@ export class NotebookRendererMessagingService implements INotebookRendererMessag
*/
private readonly activations = new Map<string /* rendererId */, undefined | MessageToSend[]>();
private readonly scopedMessaging = new Map</* editorId */ string, IScopedRendererMessaging>();
private readonly postMessageEmitter = new Emitter<MessageToSend>();
private readonly postMessageEmitter = this._register(new Emitter<MessageToSend>());
public readonly onShouldPostMessage = this.postMessageEmitter.event;
constructor(@IExtensionService private readonly extensionService: IExtensionService) { }
constructor(
@IExtensionService private readonly extensionService: IExtensionService
) {
super();
}
/** @inheritdoc */
public receiveMessage(editorId: string | undefined, rendererId: string, message: unknown): Promise<boolean> {

View file

@ -46,7 +46,7 @@ export class CellEditorOptions extends Disposable {
private _value: IEditorOptions;
private _lineNumbers: 'on' | 'off' | 'inherit' = 'inherit';
private readonly _onDidChange = new Emitter<void>();
private readonly _onDidChange = this._register(new Emitter<void>());
readonly onDidChange: Event<void> = this._onDidChange.event;
private _localDisposableStore = this._register(new DisposableStore());
@ -114,11 +114,6 @@ export class CellEditorOptions extends Disposable {
return computed;
}
override dispose(): void {
this._onDidChange.dispose();
super.dispose();
}
getValue(internalMetadata?: NotebookCellInternalMetadata): IEditorOptions {
return {
...this._value,

View file

@ -23,10 +23,10 @@ import { IUndoRedoService } from 'vs/platform/undoRedo/common/undoRedo';
export abstract class BaseCellViewModel extends Disposable {
protected readonly _onDidChangeEditorAttachState = new Emitter<void>();
protected readonly _onDidChangeEditorAttachState = this._register(new Emitter<void>());
// Do not merge this event with `onDidChangeState` as we are using `Event.once(onDidChangeEditorAttachState)` elsewhere.
readonly onDidChangeEditorAttachState = this._onDidChangeEditorAttachState.event;
protected readonly _onDidChangeState: Emitter<CellViewModelStateChangeEvent> = this._register(new Emitter<CellViewModelStateChangeEvent>());
protected readonly _onDidChangeState = this._register(new Emitter<CellViewModelStateChangeEvent>());
public readonly onDidChangeState: Event<CellViewModelStateChangeEvent> = this._onDidChangeState.event;
get handle() {
@ -112,8 +112,10 @@ export abstract class BaseCellViewModel extends Disposable {
private _cursorChangeListener: IDisposable | null = null;
private _editorViewStates: editorCommon.ICodeEditorViewState | null = null;
private _resolvedCellDecorations = new Map<string, INotebookCellDecorationOptions>();
private _cellDecorationsChanged = new Emitter<{ added: INotebookCellDecorationOptions[], removed: INotebookCellDecorationOptions[] }>();
private readonly _cellDecorationsChanged = this._register(new Emitter<{ added: INotebookCellDecorationOptions[], removed: INotebookCellDecorationOptions[] }>());
onCellDecorationsChanged: Event<{ added: INotebookCellDecorationOptions[], removed: INotebookCellDecorationOptions[] }> = this._cellDecorationsChanged.event;
private _resolvedDecorations = new Map<string, {
id?: string;
options: model.IModelDeltaDecoration;
@ -121,7 +123,7 @@ export abstract class BaseCellViewModel extends Disposable {
private _lastDecorationId: number = 0;
private _cellStatusBarItems = new Map<string, INotebookCellStatusBarItem>();
private _onDidChangeCellStatusBarItems = new Emitter<void>();
private readonly _onDidChangeCellStatusBarItems = this._register(new Emitter<void>());
readonly onDidChangeCellStatusBarItems: Event<void> = this._onDidChangeCellStatusBarItems.event;
private _lastStatusBarId: number = 0;

View file

@ -6,6 +6,7 @@
import { Emitter } from 'vs/base/common/event';
import { NotebookDocumentMetadata } from 'vs/workbench/contrib/notebook/common/notebookCommon';
import { NotebookLayoutChangeEvent, NotebookLayoutInfo, CellViewModelStateChangeEvent, ICellViewModel } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
import { Disposable } from 'vs/base/common/lifecycle';
export enum NotebookViewEventType {
LayoutChanged = 1,
@ -41,16 +42,15 @@ export class NotebookCellStateChangedEvent {
export type NotebookViewEvent = NotebookLayoutChangedEvent | NotebookMetadataChangedEvent | NotebookCellStateChangedEvent;
export class NotebookEventDispatcher {
protected readonly _onDidChangeLayout = new Emitter<NotebookLayoutChangedEvent>();
export class NotebookEventDispatcher extends Disposable {
private readonly _onDidChangeLayout = this._register(new Emitter<NotebookLayoutChangedEvent>());
readonly onDidChangeLayout = this._onDidChangeLayout.event;
protected readonly _onDidChangeMetadata = new Emitter<NotebookMetadataChangedEvent>();
readonly onDidChangeMetadata = this._onDidChangeMetadata.event;
protected readonly _onDidChangeCellState = new Emitter<NotebookCellStateChangedEvent>();
readonly onDidChangeCellState = this._onDidChangeCellState.event;
constructor() {
}
private readonly _onDidChangeMetadata = this._register(new Emitter<NotebookMetadataChangedEvent>());
readonly onDidChangeMetadata = this._onDidChangeMetadata.event;
private readonly _onDidChangeCellState = this._register(new Emitter<NotebookCellStateChangedEvent>());
readonly onDidChangeCellState = this._onDidChangeCellState.event;
emit(events: NotebookViewEvent[]) {
for (let i = 0, len = events.length; i < len; i++) {

View file

@ -64,7 +64,7 @@ export class MarkupCellViewModel extends BaseCellViewModel implements ICellViewM
throw new Error('MarkdownCellViewModel.editorHeight is write only');
}
protected readonly _onDidChangeLayout = new Emitter<MarkdownCellLayoutChangeEvent>();
protected readonly _onDidChangeLayout = this._register(new Emitter<MarkdownCellLayoutChangeEvent>());
readonly onDidChangeLayout = this._onDidChangeLayout.event;
get foldingState() {
@ -103,7 +103,7 @@ export class MarkupCellViewModel extends BaseCellViewModel implements ICellViewM
return this.model.getHashValue();
}
private readonly _onDidHideInput = new Emitter<void>();
private readonly _onDidHideInput = this._register(new Emitter<void>());
readonly onDidHideInput = this._onDidHideInput.event;
constructor(

View file

@ -18,19 +18,19 @@ import { NotebookCellOutputTextModel } from 'vs/workbench/contrib/notebook/commo
import { CellInternalMetadataChangedEvent, CellKind, ICell, ICellOutput, IOutputDto, NotebookCellInternalMetadata, NotebookCellMetadata, NotebookCellOutputsSplice, TransientOptions } from 'vs/workbench/contrib/notebook/common/notebookCommon';
export class NotebookCellTextModel extends Disposable implements ICell {
private _onDidChangeOutputs = new Emitter<NotebookCellOutputsSplice>();
private readonly _onDidChangeOutputs = this._register(new Emitter<NotebookCellOutputsSplice>());
onDidChangeOutputs: Event<NotebookCellOutputsSplice> = this._onDidChangeOutputs.event;
private _onDidChangeContent = new Emitter<'content' | 'language' | 'mime'>();
private readonly _onDidChangeContent = this._register(new Emitter<'content' | 'language' | 'mime'>());
onDidChangeContent: Event<'content' | 'language' | 'mime'> = this._onDidChangeContent.event;
private _onDidChangeMetadata = new Emitter<void>();
private readonly _onDidChangeMetadata = this._register(new Emitter<void>());
onDidChangeMetadata: Event<void> = this._onDidChangeMetadata.event;
private _onDidChangeInternalMetadata = new Emitter<CellInternalMetadataChangedEvent>();
private readonly _onDidChangeInternalMetadata = this._register(new Emitter<CellInternalMetadataChangedEvent>());
onDidChangeInternalMetadata: Event<CellInternalMetadataChangedEvent> = this._onDidChangeInternalMetadata.event;
private _onDidChangeLanguage = new Emitter<string>();
private readonly _onDidChangeLanguage = this._register(new Emitter<string>());
onDidChangeLanguage: Event<string> = this._onDidChangeLanguage.event;
private _outputs: NotebookCellOutputTextModel[];