Refactor and put id as property of TreeContentProvider

This commit is contained in:
Pine Wu
2016-09-28 11:11:22 -07:00
parent aa1ffcd8fb
commit c2bdd6a853
9 changed files with 112 additions and 4 deletions

View File

@@ -0,0 +1,51 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'use strict';
import * as vscode from 'vscode';
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';
import {MainContext, ExtHostExplorersShape, MainThreadExplorersShape} from './extHost.protocol';
export class ExtHostExplorers extends ExtHostExplorersShape {
private _proxy: MainThreadExplorersShape;
private _treeContentProviders: { [treeContentProviderId: string]: vscode.TreeContentProvider; };
constructor(threadService: IThreadService) {
super();
this._proxy = threadService.get(MainContext.MainThreadExplorers);
this._treeContentProviders = Object.create(null);
}
public registerTreeContentProvider(provider: vscode.TreeContentProvider): vscode.Disposable {
const treeContentProviderId = provider.id;
if (this._treeContentProviders[treeContentProviderId]) {
throw new Error(`TreeContentProvider with id '${provider.id} already registered`);
}
this._treeContentProviders[treeContentProviderId] = provider;
this._proxy.$registerTreeContentProvider(treeContentProviderId);
return new Disposable(() => {
if (delete this._treeContentProviders[treeContentProviderId]) {
this._proxy.$unregisterTreeContentProvider(treeContentProviderId);
}
});
}
$provideTextDocumentContent(treeContentProviderId: string): vscode.ITree {
const provider = this._treeContentProviders[treeContentProviderId];
if (!provider) {
throw new Error(`no TreeContentProvider registered with id '${treeContentProviderId}'`);
}
return provider.provideTreeContent();
}
}