Handle all error by showing message

This commit is contained in:
Pine Wu
2016-10-20 22:54:52 -07:00
parent 0b84a56e4f
commit 37398ea53e
4 changed files with 46 additions and 21 deletions

View File

@@ -12,6 +12,7 @@ import { MainContext, ExtHostTreeExplorersShape, MainThreadTreeExplorersShape }
import { InternalTreeExplorerNode } from 'vs/workbench/parts/explorers/common/treeExplorerViewModel';
import { ExtHostCommands } from 'vs/workbench/api/node/extHostCommands';
import { asWinJsPromise } from 'vs/base/common/async';
import { Severity } from 'vs/platform/message/common/message';
export class ExtHostTreeExplorers extends ExtHostTreeExplorersShape {
private _proxy: MainThreadTreeExplorersShape;
@@ -41,10 +42,7 @@ export class ExtHostTreeExplorers extends ExtHostTreeExplorersShape {
}
$provideRootNode(providerId: string): TPromise<InternalTreeExplorerNode> {
const provider = this._treeExplorerNodeProviders[providerId];
if (!provider) {
throw new Error(`no TreeExplorerNodeProvider registered with id '${providerId}'`);
}
const provider = this.getProvider(providerId);
return asWinJsPromise(() => provider.provideRootNode()).then(externalRootNode => {
const treeNodeMap = Object.create(null);
@@ -54,15 +52,12 @@ export class ExtHostTreeExplorers extends ExtHostTreeExplorersShape {
this._externalNodeMaps[providerId][internalRootNode.id] = externalRootNode;
return internalRootNode;
}, err => {
throw new Error(`TreeExplorerNodeProvider '${providerId}' failed to provide root node`);
this.showErrorMessage(`TreeExplorerNodeProvider '${providerId}' failed to provide root node.`);
});
}
$resolveChildren(providerId: string, mainThreadNode: InternalTreeExplorerNode): TPromise<InternalTreeExplorerNode[]> {
const provider = this._treeExplorerNodeProviders[providerId];
if (!provider) {
throw new Error(`no TreeExplorerNodeProvider registered with id '${providerId}'`);
}
const provider = this.getProvider(providerId);
const externalNodeMap = this._externalNodeMaps[providerId];
const externalNode = externalNodeMap[mainThreadNode.id];
@@ -74,25 +69,33 @@ export class ExtHostTreeExplorers extends ExtHostTreeExplorersShape {
return internalChild;
});
}, err => {
throw new Error(`TreeExplorerNodeProvider '${providerId}' failed to resolveChildren`);
this.showErrorMessage(`TreeExplorerNodeProvider '${providerId}' failed to resolve children.`);
});
}
$executeCommand(providerId: string, mainThreadNode: InternalTreeExplorerNode): TPromise<void> {
const provider = this._treeExplorerNodeProviders[providerId];
if (!provider) {
throw new Error(`no TreeExplorerNodeProvider registered with id '${providerId}'`);
}
if (mainThreadNode.clickCommand) {
const externalNode = this._externalNodeMaps[providerId][mainThreadNode.id];
return asWinJsPromise(() => this.commands.executeCommand(mainThreadNode.clickCommand, externalNode)).then(() => {
return null;
}, err => {
throw new Error(`Failed to execute command '${mainThreadNode.clickCommand}' provided by TreeExplorerNodeProvider '${providerId}'`);
this.showErrorMessage(`Failed to execute command '${mainThreadNode.clickCommand}' provided by TreeExplorerNodeProvider '${providerId}'.`);
});
}
return TPromise.as(null);
}
getProvider(providerId: string): TreeExplorerNodeProvider<any> {
const provider = this._treeExplorerNodeProviders[providerId];
if (!provider) {
this.showErrorMessage(`No TreeExplorerNodeProvider with id '${providerId}' registered.`);
}
return provider;
}
private showErrorMessage(message: string): void {
this._proxy.$showMessage(Severity.Error, message);
}
}