提交 ae46d502 编写于 作者: J Joao Moreno

🎨 unhook scm from marshalling

上级 bc9a7bb1
......@@ -30,9 +30,6 @@ function replacer(key: string, value: any): any {
return value;
}
// TODO@Joao hack?
export const ResolverRegistry: { [mid: number]: (value: any) => any; } = Object.create(null);
function reviver(key: string, value: any): any {
let marshallingConst: number;
if (value !== void 0 && value !== null) {
......@@ -42,13 +39,6 @@ function reviver(key: string, value: any): any {
switch (marshallingConst) {
case 1: return URI.revive(value);
case 2: return new RegExp(value.source, value.flags);
default:
const resolver = ResolverRegistry[marshallingConst];
if (resolver) {
return resolver(value);
} else {
return value;
}
default: return value;
}
}
......@@ -23,11 +23,16 @@ interface CommandHandler {
description: ICommandHandlerDescription;
}
export interface ArgumentProcessor {
processArgument(arg: any): any;
}
export class ExtHostCommands extends ExtHostCommandsShape {
private _commands = new Map<string, CommandHandler>();
private _proxy: MainThreadCommandsShape;
private _converter: CommandsConverter;
private _argumentProcessors: ArgumentProcessor[] = [];
constructor(
threadService: IThreadService,
......@@ -42,6 +47,10 @@ export class ExtHostCommands extends ExtHostCommandsShape {
return this._converter;
}
registerArgumentProcessor(processor: ArgumentProcessor): void {
this._argumentProcessors.push(processor);
}
registerCommand(id: string, callback: <T>(...args: any[]) => T | Thenable<T>, thisArg?: any, description?: ICommandHandlerDescription): extHostTypes.Disposable {
if (!id.trim().length) {
......@@ -110,6 +119,8 @@ export class ExtHostCommands extends ExtHostCommandsShape {
}
}
args = args.map(arg => this._argumentProcessors.reduce((r, p) => p.processArgument(r), arg));
try {
let result = callback.apply(thisArg, args);
return TPromise.as(result);
......
......@@ -12,7 +12,6 @@ import { IThreadService } from 'vs/workbench/services/thread/common/threadServic
import { ExtHostCommands, CommandsConverter } from 'vs/workbench/api/node/extHostCommands';
import { MainContext, MainThreadSCMShape, SCMRawResource } from './extHost.protocol';
import * as vscode from 'vscode';
import * as marshalling from 'vs/base/common/marshalling';
function getIconPath(decorations: vscode.SourceControlResourceThemableDecorations) {
if (!decorations) {
......@@ -241,16 +240,21 @@ export class ExtHostSCM {
this._proxy = threadService.get(MainContext.MainThreadSCM);
this._inputBox = new ExtHostSCMInputBox(this._proxy);
// TODO@joao HACK
marshalling.ResolverRegistry[3] = value => {
const sourceControl = this._sourceControls.get(value.sourceControlHandle);
_commands.registerArgumentProcessor({
processArgument: arg => {
if (arg && arg.$mid === 3) {
const sourceControl = this._sourceControls.get(arg.sourceControlHandle);
if (!sourceControl) {
return value;
}
if (!sourceControl) {
return arg;
}
return sourceControl.getResourceState(arg.groupHandle, arg.handle);
}
return sourceControl.getResourceState(value.groupHandle, value.handle);
};
return arg;
}
});
}
createSourceControl(id: string, label: string): vscode.SourceControl {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册