diff --git a/src/tsconfig.strictNullChecks.json b/src/tsconfig.strictNullChecks.json index 55f5e2c88d677be1dec28af590a6467f7cbd18c3..d37bcefd81bb4c0ca6b540c2b75aa7645e3a55e7 100644 --- a/src/tsconfig.strictNullChecks.json +++ b/src/tsconfig.strictNullChecks.json @@ -42,7 +42,9 @@ "./vs/base/parts/tree/browser/treeDnd.ts", "./vs/base/parts/tree/browser/treeModel.ts", "./vs/base/parts/tree/browser/treeUtils.ts", + "./vs/base/parts/tree/browser/treeViewModel.ts", "./vs/base/parts/tree/test/browser/treeModel.test.ts", + "./vs/base/parts/tree/test/browser/treeViewModel.test.ts", "./vs/base/test/browser/browser.test.ts", "./vs/base/test/browser/comparers.test.ts", "./vs/base/test/browser/dom.test.ts", @@ -868,4 +870,4 @@ "exclude": [ "./typings/require-monaco.d.ts" ] -} +} \ No newline at end of file diff --git a/src/vs/base/parts/tree/browser/treeViewModel.ts b/src/vs/base/parts/tree/browser/treeViewModel.ts index 07f0c852e3a75b2110d1e6ee75af8c0ef32a77ab..823f0bb0a9d14420d5e28edb039980c1348607f2 100644 --- a/src/vs/base/parts/tree/browser/treeViewModel.ts +++ b/src/vs/base/parts/tree/browser/treeViewModel.ts @@ -15,21 +15,16 @@ export interface IViewItem { export class HeightMap { - private heightMap: IViewItem[]; - private indexes: { [item: string]: number; }; + private heightMap: IViewItem[] = []; + private indexes: { [item: string]: number; } = {}; - constructor() { - this.heightMap = []; - this.indexes = {}; - } - - public getContentHeight(): number { + getContentHeight(): number { let last = this.heightMap[this.heightMap.length - 1]; return !last ? 0 : last.top + last.height; } - public onInsertItems(iterator: INextIterator, afterItemId: string | null = null): number { - let item: Item; + onInsertItems(iterator: INextIterator, afterItemId: string | null = null): number | undefined { + let item: Item | null = null; let viewItem: IViewItem; let i: number, j: number; let totalSize: number; @@ -82,16 +77,16 @@ export class HeightMap { return sizeDiff; } - public onInsertItem(item: IViewItem): void { + onInsertItem(item: IViewItem): void { // noop } // Contiguous items - public onRemoveItems(iterator: INextIterator): void { - let itemId: string; + onRemoveItems(iterator: INextIterator): void { + let itemId: string | null = null; let viewItem: IViewItem; let startIndex: number | null = null; - let i: number; + let i = 0; let sizeDiff = 0; while (itemId = iterator.next()) { @@ -112,7 +107,7 @@ export class HeightMap { } } - if (sizeDiff === 0) { + if (sizeDiff === 0 || startIndex === null) { return; } @@ -126,18 +121,18 @@ export class HeightMap { } } - public onRemoveItem(item: IViewItem): void { + onRemoveItem(item: IViewItem): void { // noop } - public onRefreshItemSet(items: Item[]): void { + onRefreshItemSet(items: Item[]): void { let sortedItems = items.sort((a, b) => this.indexes[a.id] - this.indexes[b.id]); this.onRefreshItems(new ArrayIterator(sortedItems)); } // Ordered, but not necessarily contiguous items - public onRefreshItems(iterator: INextIterator): void { - let item: Item; + onRefreshItems(iterator: INextIterator): void { + let item: Item | null = null; let viewItem: IViewItem; let newHeight: number; let i: number, j: number | null = null; @@ -171,19 +166,19 @@ export class HeightMap { } } - public onRefreshItem(item: IViewItem, needsRender: boolean = false): void { + onRefreshItem(item: IViewItem, needsRender: boolean = false): void { // noop } - public itemsCount(): number { + itemsCount(): number { return this.heightMap.length; } - public itemAt(position: number): string { + itemAt(position: number): string { return this.heightMap[this.indexAt(position)].model.id; } - public withItemsInRange(start: number, end: number, fn: (item: string) => void): void { + withItemsInRange(start: number, end: number, fn: (item: string) => void): void { start = this.indexAt(start); end = this.indexAt(end); for (let i = start; i <= end; i++) { @@ -191,7 +186,7 @@ export class HeightMap { } } - public indexAt(position: number): number { + indexAt(position: number): number { let left = 0; let right = this.heightMap.length; let center: number; @@ -217,15 +212,15 @@ export class HeightMap { return this.heightMap.length; } - public indexAfter(position: number): number { + indexAfter(position: number): number { return Math.min(this.indexAt(position) + 1, this.heightMap.length); } - public itemAtIndex(index: number): IViewItem { + itemAtIndex(index: number): IViewItem { return this.heightMap[index]; } - public itemAfter(item: IViewItem): IViewItem { + itemAfter(item: IViewItem): IViewItem { return this.heightMap[this.indexes[item.model.id] + 1] || null; } @@ -233,8 +228,8 @@ export class HeightMap { throw new Error('not implemented'); } - public dispose(): void { - this.heightMap = null; - this.indexes = null; + dispose(): void { + this.heightMap = []; + this.indexes = {}; } }