提交 92fed798 编写于 作者: S Sandeep Somavarapu

#74846 Dispose internal commands

上级 1bf2cab7
......@@ -8,7 +8,7 @@ import * as vscode from 'vscode';
import { basename } from 'vs/base/common/resources';
import { URI } from 'vs/base/common/uri';
import { Emitter, Event } from 'vs/base/common/event';
import { Disposable } from 'vs/base/common/lifecycle';
import { Disposable, DisposableStore, IDisposable } from 'vs/base/common/lifecycle';
import { ExtHostTreeViewsShape, MainThreadTreeViewsShape } from './extHost.protocol';
import { ITreeItem, TreeViewItemHandleArg, ITreeItemLabel, IRevealOptions } from 'vs/workbench/common/views';
import { ExtHostCommands, CommandsConverter } from 'vs/workbench/api/common/extHostCommands';
......@@ -139,7 +139,7 @@ export class ExtHostTreeViews implements ExtHostTreeViewsShape {
type Root = null | undefined;
type TreeData<T> = { message: boolean, element: T | Root | false };
interface TreeNode {
interface TreeNode extends IDisposable {
item: ITreeItem;
parent: TreeNode | Root;
children?: TreeNode[];
......@@ -421,6 +421,7 @@ class ExtHostTreeView<T> extends Disposable {
if (extTreeItem) {
const newNode = this.createTreeNode(extElement, extTreeItem, existing.parent);
this.updateNodeCache(extElement, newNode, existing, existing.parent);
existing.dispose();
return newNode;
}
return null;
......@@ -441,15 +442,7 @@ class ExtHostTreeView<T> extends Disposable {
}
private createTreeNode(element: T, extensionTreeItem: vscode.TreeItem, parent: TreeNode | Root): TreeNode {
return {
item: this.createTreeItem(element, extensionTreeItem, parent),
parent,
children: undefined
};
}
private createTreeItem(element: T, extensionTreeItem: vscode.TreeItem, parent: TreeNode | Root): ITreeItem {
const disposable: DisposableStore = new DisposableStore();
const handle = this.createHandle(element, extensionTreeItem, parent);
const icon = this.getLightIconPath(extensionTreeItem);
const item = {
......@@ -459,7 +452,7 @@ class ExtHostTreeView<T> extends Disposable {
description: extensionTreeItem.description,
resourceUri: extensionTreeItem.resourceUri,
tooltip: typeof extensionTreeItem.tooltip === 'string' ? extensionTreeItem.tooltip : undefined,
command: extensionTreeItem.command ? this.commands.toInternal(extensionTreeItem.command) : undefined,
command: extensionTreeItem.command ? this.commands.toInternal2(extensionTreeItem.command, disposable) : undefined,
contextValue: extensionTreeItem.contextValue,
icon,
iconDark: this.getDarkIconPath(extensionTreeItem) || icon,
......@@ -467,7 +460,12 @@ class ExtHostTreeView<T> extends Disposable {
collapsibleState: isUndefinedOrNull(extensionTreeItem.collapsibleState) ? TreeItemCollapsibleState.None : extensionTreeItem.collapsibleState
};
return item;
return {
item,
parent,
children: undefined,
dispose() { disposable.dispose(); }
};
}
private createHandle(element: T, { id, label, resourceUri }: vscode.TreeItem, parent: TreeNode | Root, returnFirst?: boolean): TreeItemHandle {
......@@ -593,12 +591,14 @@ class ExtHostTreeView<T> extends Disposable {
}
this.nodes.delete(element);
this.elements.delete(node.item.handle);
node.dispose();
}
}
private clearAll(): void {
this.roots = null;
this.elements.clear();
this.nodes.forEach(node => node.dispose());
this.nodes.clear();
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册