提交 d19a0709 编写于 作者: J Joao Moreno

add treeview to strict null checks

fixes #66557
上级 65fcf318
...@@ -42,7 +42,9 @@ ...@@ -42,7 +42,9 @@
"./vs/base/parts/tree/browser/treeDnd.ts", "./vs/base/parts/tree/browser/treeDnd.ts",
"./vs/base/parts/tree/browser/treeModel.ts", "./vs/base/parts/tree/browser/treeModel.ts",
"./vs/base/parts/tree/browser/treeUtils.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/treeModel.test.ts",
"./vs/base/parts/tree/test/browser/treeViewModel.test.ts",
"./vs/base/test/browser/browser.test.ts", "./vs/base/test/browser/browser.test.ts",
"./vs/base/test/browser/comparers.test.ts", "./vs/base/test/browser/comparers.test.ts",
"./vs/base/test/browser/dom.test.ts", "./vs/base/test/browser/dom.test.ts",
...@@ -868,4 +870,4 @@ ...@@ -868,4 +870,4 @@
"exclude": [ "exclude": [
"./typings/require-monaco.d.ts" "./typings/require-monaco.d.ts"
] ]
} }
\ No newline at end of file
...@@ -15,21 +15,16 @@ export interface IViewItem { ...@@ -15,21 +15,16 @@ export interface IViewItem {
export class HeightMap { export class HeightMap {
private heightMap: IViewItem[]; private heightMap: IViewItem[] = [];
private indexes: { [item: string]: number; }; private indexes: { [item: string]: number; } = {};
constructor() { getContentHeight(): number {
this.heightMap = [];
this.indexes = {};
}
public getContentHeight(): number {
let last = this.heightMap[this.heightMap.length - 1]; let last = this.heightMap[this.heightMap.length - 1];
return !last ? 0 : last.top + last.height; return !last ? 0 : last.top + last.height;
} }
public onInsertItems(iterator: INextIterator<Item>, afterItemId: string | null = null): number { onInsertItems(iterator: INextIterator<Item>, afterItemId: string | null = null): number | undefined {
let item: Item; let item: Item | null = null;
let viewItem: IViewItem; let viewItem: IViewItem;
let i: number, j: number; let i: number, j: number;
let totalSize: number; let totalSize: number;
...@@ -82,16 +77,16 @@ export class HeightMap { ...@@ -82,16 +77,16 @@ export class HeightMap {
return sizeDiff; return sizeDiff;
} }
public onInsertItem(item: IViewItem): void { onInsertItem(item: IViewItem): void {
// noop // noop
} }
// Contiguous items // Contiguous items
public onRemoveItems(iterator: INextIterator<string>): void { onRemoveItems(iterator: INextIterator<string>): void {
let itemId: string; let itemId: string | null = null;
let viewItem: IViewItem; let viewItem: IViewItem;
let startIndex: number | null = null; let startIndex: number | null = null;
let i: number; let i = 0;
let sizeDiff = 0; let sizeDiff = 0;
while (itemId = iterator.next()) { while (itemId = iterator.next()) {
...@@ -112,7 +107,7 @@ export class HeightMap { ...@@ -112,7 +107,7 @@ export class HeightMap {
} }
} }
if (sizeDiff === 0) { if (sizeDiff === 0 || startIndex === null) {
return; return;
} }
...@@ -126,18 +121,18 @@ export class HeightMap { ...@@ -126,18 +121,18 @@ export class HeightMap {
} }
} }
public onRemoveItem(item: IViewItem): void { onRemoveItem(item: IViewItem): void {
// noop // noop
} }
public onRefreshItemSet(items: Item[]): void { onRefreshItemSet(items: Item[]): void {
let sortedItems = items.sort((a, b) => this.indexes[a.id] - this.indexes[b.id]); let sortedItems = items.sort((a, b) => this.indexes[a.id] - this.indexes[b.id]);
this.onRefreshItems(new ArrayIterator(sortedItems)); this.onRefreshItems(new ArrayIterator(sortedItems));
} }
// Ordered, but not necessarily contiguous items // Ordered, but not necessarily contiguous items
public onRefreshItems(iterator: INextIterator<Item>): void { onRefreshItems(iterator: INextIterator<Item>): void {
let item: Item; let item: Item | null = null;
let viewItem: IViewItem; let viewItem: IViewItem;
let newHeight: number; let newHeight: number;
let i: number, j: number | null = null; let i: number, j: number | null = null;
...@@ -171,19 +166,19 @@ export class HeightMap { ...@@ -171,19 +166,19 @@ export class HeightMap {
} }
} }
public onRefreshItem(item: IViewItem, needsRender: boolean = false): void { onRefreshItem(item: IViewItem, needsRender: boolean = false): void {
// noop // noop
} }
public itemsCount(): number { itemsCount(): number {
return this.heightMap.length; return this.heightMap.length;
} }
public itemAt(position: number): string { itemAt(position: number): string {
return this.heightMap[this.indexAt(position)].model.id; 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); start = this.indexAt(start);
end = this.indexAt(end); end = this.indexAt(end);
for (let i = start; i <= end; i++) { for (let i = start; i <= end; i++) {
...@@ -191,7 +186,7 @@ export class HeightMap { ...@@ -191,7 +186,7 @@ export class HeightMap {
} }
} }
public indexAt(position: number): number { indexAt(position: number): number {
let left = 0; let left = 0;
let right = this.heightMap.length; let right = this.heightMap.length;
let center: number; let center: number;
...@@ -217,15 +212,15 @@ export class HeightMap { ...@@ -217,15 +212,15 @@ export class HeightMap {
return this.heightMap.length; return this.heightMap.length;
} }
public indexAfter(position: number): number { indexAfter(position: number): number {
return Math.min(this.indexAt(position) + 1, this.heightMap.length); return Math.min(this.indexAt(position) + 1, this.heightMap.length);
} }
public itemAtIndex(index: number): IViewItem { itemAtIndex(index: number): IViewItem {
return this.heightMap[index]; return this.heightMap[index];
} }
public itemAfter(item: IViewItem): IViewItem { itemAfter(item: IViewItem): IViewItem {
return this.heightMap[this.indexes[item.model.id] + 1] || null; return this.heightMap[this.indexes[item.model.id] + 1] || null;
} }
...@@ -233,8 +228,8 @@ export class HeightMap { ...@@ -233,8 +228,8 @@ export class HeightMap {
throw new Error('not implemented'); throw new Error('not implemented');
} }
public dispose(): void { dispose(): void {
this.heightMap = null; this.heightMap = [];
this.indexes = null; this.indexes = {};
} }
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册