提交 8cf60f34 编写于 作者: S Sandeep Somavarapu

Fix #27670

上级 48631d68
......@@ -36,7 +36,7 @@ declare module 'vscode' {
* @param element The element for which [TreeItem](#TreeItem) representation is asked for.
* @return [TreeItem](#TreeItem) representation of the element
*/
getTreeItem(element: T): TreeItem;
getTreeItem(element: T): TreeItem | Thenable<TreeItem>;
/**
* Get the children of `element` or root.
......
......@@ -125,28 +125,35 @@ class ExtHostTreeView<T> extends Disposable {
}
private processAndMapElements(elements: T[]): TPromise<ITreeItem[]> {
const treeItemsPromises: TPromise<ITreeItem>[] = [];
for (const element of elements) {
if (element) {
if (this.extChildrenElementsMap.has(element)) {
return TPromise.wrapError<ITreeItem[]>(localize('treeView.duplicateElement', 'Element {0} is already registered', element));
}
const treeItem = this.massageTreeItem(this.dataProvider.getTreeItem(element));
return TPromise.join(
elements.filter(element => !!element)
.map(element => {
if (this.extChildrenElementsMap.has(element)) {
return TPromise.wrapError<ITreeItem>(localize('treeView.duplicateElement', 'Element {0} is already registered', element));
}
return this.resolveElement(element);
}))
.then(treeItems => treeItems.filter(treeItem => !!treeItem));
}
private resolveElement(element: T): TPromise<ITreeItem> {
return asWinJsPromise(() => this.dataProvider.getTreeItem(element))
.then(extTreeItem => {
const treeItem = this.massageTreeItem(extTreeItem);
if (treeItem) {
this.itemHandlesMap.set(element, treeItem.handle);
this.extElementsMap.set(treeItem.handle, element);
if (treeItem.collapsibleState === TreeItemCollapsibleState.Expanded) {
treeItemsPromises.push(this.getChildren(treeItem.handle).then(children => {
return this.getChildren(treeItem.handle).then(children => {
treeItem.children = children;
return treeItem;
}));
});
} else {
treeItemsPromises.push(TPromise.as(treeItem));
return treeItem;
}
}
}
}
return TPromise.join(treeItemsPromises);
return null;
});
}
private massageTreeItem(extensionTreeItem: vscode.TreeItem): ITreeItem {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册