From bbde6d2bc0ffbb4e5a2de7a31534be1b274bc4b7 Mon Sep 17 00:00:00 2001 From: Joao Moreno Date: Sun, 21 Jul 2019 16:29:23 +0200 Subject: [PATCH] compressed trees: typing --- .../ui/tree/compressedObjectTreeModel.ts | 55 +++++++++++++------ .../base/browser/ui/tree/objectTreeModel.ts | 4 +- 2 files changed, 40 insertions(+), 19 deletions(-) diff --git a/src/vs/base/browser/ui/tree/compressedObjectTreeModel.ts b/src/vs/base/browser/ui/tree/compressedObjectTreeModel.ts index 5d8090bc34a..f224cacc1b6 100644 --- a/src/vs/base/browser/ui/tree/compressedObjectTreeModel.ts +++ b/src/vs/base/browser/ui/tree/compressedObjectTreeModel.ts @@ -82,18 +82,18 @@ export function splice(treeElement: ICompressedTreeElement, element: T, ch export interface ICompressedObjectTreeModelOptions extends IObjectTreeModelOptions, TFilterData> { } -export class CompressedObjectTreeModel, TFilterData extends NonNullable = void> implements ITreeModel { +export class CompressedObjectTreeModel, TFilterData extends NonNullable = void> implements ITreeModel | null, TFilterData, T | null> { readonly rootRef = null; - private _onDidSplice = new Emitter>(); - readonly onDidSplice: Event> = this._onDidSplice.event; + private _onDidSplice = new Emitter | null, TFilterData>>(); + readonly onDidSplice: Event | null, TFilterData>> = this._onDidSplice.event; - private _onDidChangeCollapseState = new Emitter>(); - readonly onDidChangeCollapseState: Event> = this._onDidChangeCollapseState.event; + private _onDidChangeCollapseState = new Emitter, TFilterData>>(); + readonly onDidChangeCollapseState: Event, TFilterData>> = this._onDidChangeCollapseState.event; - private _onDidChangeRenderNodeCount = new Emitter>(); - readonly onDidChangeRenderNodeCount: Event> = this._onDidChangeRenderNodeCount.event; + private _onDidChangeRenderNodeCount = new Emitter, TFilterData>>(); + readonly onDidChangeRenderNodeCount: Event, TFilterData>> = this._onDidChangeRenderNodeCount.event; private model: ObjectTreeModel, TFilterData>; private nodes = new Map>(); @@ -171,19 +171,26 @@ export class CompressedObjectTreeModel, TFilterData e return Iterator.empty(); } - getListIndex(location: T | null): number { - throw new Error('Method not implemented.'); + getListIndex(location: T): number { + const node = this.getCompressedNode(location); + return this.model.getListIndex(node); } - getListRenderCount(location: T | null): number { - throw new Error('Method not implemented.'); + getListRenderCount(location: T): number { + const node = this.getCompressedNode(location); + return this.model.getListRenderCount(node); } - getNode(location?: T | null | undefined): ITreeNode { - throw new Error('Method not implemented.'); + getNode(location?: T | null | undefined): ITreeNode | null, TFilterData> { + if (typeof location === 'undefined') { + return this.model.getNode(); + } + + const node = this.getCompressedNode(location); + return this.model.getNode(node); } - getNodeLocation(node: ITreeNode): T | null { + getNodeLocation(node: ITreeNode | null, TFilterData>): T | null { throw new Error('Method not implemented.'); } @@ -191,15 +198,15 @@ export class CompressedObjectTreeModel, TFilterData e throw new Error('Method not implemented.'); } - getParentElement(location: T | null): T | null { + getParentElement(location: T | null): ICompressedTreeNode | null { throw new Error('Method not implemented.'); } - getFirstElementChild(location: T | null): T | null | undefined { + getFirstElementChild(location: T | null): ICompressedTreeNode | null | undefined { throw new Error('Method not implemented.'); } - getLastElementAncestor(location?: T | null | undefined): T | null | undefined { + getLastElementAncestor(location?: T | null | undefined): ICompressedTreeNode | null | undefined { throw new Error('Method not implemented.'); } @@ -222,4 +229,18 @@ export class CompressedObjectTreeModel, TFilterData e refilter(): void { this.model.refilter(); } + + private getCompressedNode(element: T | null): ICompressedTreeNode | null { + if (element === null) { + return null; + } + + const node = this.nodes.get(element); + + if (!node) { + throw new Error(`Tree element not found: ${element}`); + } + + return node; + } } diff --git a/src/vs/base/browser/ui/tree/objectTreeModel.ts b/src/vs/base/browser/ui/tree/objectTreeModel.ts index 8ab76b67adc..29d4314e375 100644 --- a/src/vs/base/browser/ui/tree/objectTreeModel.ts +++ b/src/vs/base/browser/ui/tree/objectTreeModel.ts @@ -190,12 +190,12 @@ export class ObjectTreeModel, TFilterData extends Non return this.model.getLastElementAncestor(location); } - getListIndex(element: T): number { + getListIndex(element: T | null): number { const location = this.getElementLocation(element); return this.model.getListIndex(location); } - getListRenderCount(element: T): number { + getListRenderCount(element: T | null): number { const location = this.getElementLocation(element); return this.model.getListRenderCount(location); }