diff --git a/src/vs/workbench/api/node/extHostTreeExplorers.ts b/src/vs/workbench/api/node/extHostTreeExplorers.ts index 22a6af7a136..7a7da986d09 100644 --- a/src/vs/workbench/api/node/extHostTreeExplorers.ts +++ b/src/vs/workbench/api/node/extHostTreeExplorers.ts @@ -6,6 +6,7 @@ import { localize } from 'vs/nls'; import { TreeExplorerNodeProvider } from 'vscode'; +import { defaultGenerator } from 'vs/base/common/idGenerator'; import { TPromise } from 'vs/base/common/winjs.base'; import { Disposable } from 'vs/workbench/api/node/extHostTypes'; import { IThreadService } from 'vs/workbench/services/thread/common/threadService'; @@ -15,11 +16,26 @@ import { ExtHostCommands } from 'vs/workbench/api/node/extHostCommands'; import { asWinJsPromise } from 'vs/base/common/async'; import * as modes from 'vs/editor/common/modes'; +class InternalTreeExplorerNodeImpl implements InternalTreeExplorerNode { + + readonly id: string; + label: string; + hasChildren: boolean; + clickCommand: string; + + constructor(node: any, provider: TreeExplorerNodeProvider) { + this.id = defaultGenerator.nextId(); + this.label = provider.getLabel ? provider.getLabel(node) : node.toString(); + this.hasChildren = provider.getHasChildren ? provider.getHasChildren(node) : true; + this.clickCommand = provider.getClickCommand ? provider.getClickCommand(node) : null; + } +} + export class ExtHostTreeExplorers extends ExtHostTreeExplorersShape { private _proxy: MainThreadTreeExplorersShape; private _extNodeProviders: { [providerId: string]: TreeExplorerNodeProvider }; - private _extNodeMaps: { [providerId: string]: { [id: number]: any } }; + private _extNodeMaps: { [providerId: string]: { [id: string]: InternalTreeExplorerNode } }; constructor( threadService: IThreadService, @@ -51,8 +67,8 @@ export class ExtHostTreeExplorers extends ExtHostTreeExplorersShape { } return asWinJsPromise(() => provider.provideRootNode()).then(extRootNode => { - const extNodeMap = Object.create(null); - const internalRootNode = new InternalTreeExplorerNode(extRootNode, provider); + const extNodeMap: { [id: string]: InternalTreeExplorerNode } = Object.create(null); + const internalRootNode = new InternalTreeExplorerNodeImpl(extRootNode, provider); extNodeMap[internalRootNode.id] = extRootNode; this._extNodeMaps[providerId] = extNodeMap; @@ -76,7 +92,7 @@ export class ExtHostTreeExplorers extends ExtHostTreeExplorersShape { return asWinJsPromise(() => provider.resolveChildren(extNode)).then(children => { return children.map(extChild => { - const internalChild = new InternalTreeExplorerNode(extChild, provider); + const internalChild = new InternalTreeExplorerNodeImpl(extChild, provider); extNodeMap[internalChild.id] = extChild; return internalChild; }); diff --git a/src/vs/workbench/parts/explorers/common/treeExplorerViewModel.ts b/src/vs/workbench/parts/explorers/common/treeExplorerViewModel.ts index f82df34a574..7e6b265faf3 100644 --- a/src/vs/workbench/parts/explorers/common/treeExplorerViewModel.ts +++ b/src/vs/workbench/parts/explorers/common/treeExplorerViewModel.ts @@ -5,7 +5,6 @@ 'use strict'; import { TPromise } from 'vs/base/common/winjs.base'; -import { TreeExplorerNodeProvider } from 'vscode'; export interface InternalTreeExplorerNodeContent { label: string; @@ -13,22 +12,8 @@ export interface InternalTreeExplorerNodeContent { clickCommand: string; } -export class InternalTreeExplorerNode implements InternalTreeExplorerNodeContent { - private static idCounter = 1; - - id: number; - - label: string; - hasChildren: boolean; - clickCommand: string; - - constructor(node: any, provider: TreeExplorerNodeProvider) { - this.id = InternalTreeExplorerNode.idCounter++; - - this.label = provider.getLabel ? provider.getLabel(node) : node.toString(); - this.hasChildren = provider.getHasChildren ? provider.getHasChildren(node) : true; - this.clickCommand = provider.getClickCommand ? provider.getClickCommand(node) : null; - } +export interface InternalTreeExplorerNode extends InternalTreeExplorerNodeContent { + readonly id: string; } export interface InternalTreeExplorerNodeProvider {