separate rpc and init data into separate services

This commit is contained in:
Johannes Rieken
2019-08-07 19:51:28 +02:00
parent 2cf97fc2e5
commit 2420d4c505
23 changed files with 124 additions and 119 deletions

View File

@@ -19,8 +19,8 @@ import { Position } from 'vs/editor/common/core/position';
import { URI } from 'vs/base/common/uri';
import { Event, Emitter } from 'vs/base/common/event';
import { DisposableStore, toDisposable } from 'vs/base/common/lifecycle';
import { IExtHostContextService } from 'vs/workbench/api/common/extHostContextService';
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
import { IExtHostRpcService } from 'vs/workbench/api/common/rpcService';
interface CommandHandler {
callback: Function;
@@ -46,10 +46,10 @@ export class ExtHostCommands implements ExtHostCommandsShape {
private readonly _argumentProcessors: ArgumentProcessor[];
constructor(
@IExtHostContextService extHostContext: IExtHostContextService,
@IExtHostRpcService extHostRpc: IExtHostRpcService,
@ILogService logService: ILogService
) {
this._proxy = extHostContext.rpc.getProxy(MainContext.MainThreadCommands);
this._proxy = extHostRpc.getProxy(MainContext.MainThreadCommands);
this._onDidExecuteCommand = new Emitter<vscode.CommandExecutionEvent>({
onFirstListenerDidAdd: () => this._proxy.$registerCommandListener(),
onLastListenerRemove: () => this._proxy.$unregisterCommandListener(),

View File

@@ -18,8 +18,8 @@ import { ConfigurationScope, OVERRIDE_PROPERTY_PATTERN } from 'vs/platform/confi
import { isObject } from 'vs/base/common/types';
import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions';
import { Barrier } from 'vs/base/common/async';
import { IExtHostContextService } from 'vs/workbench/api/common/extHostContextService';
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
import { IExtHostRpcService } from 'vs/workbench/api/common/rpcService';
function lookUp(tree: any, key: string) {
if (key) {
@@ -50,10 +50,10 @@ export class ExtHostConfiguration implements ExtHostConfigurationShape {
private _actual: ExtHostConfigProvider | null;
constructor(
@IExtHostContextService extHostContext: IExtHostContextService,
@IExtHostRpcService extHostRpc: IExtHostRpcService,
@IExtHostWorkspace extHostWorkspace: IExtHostWorkspace
) {
this._proxy = extHostContext.rpc.getProxy(MainContext.MainThreadConfiguration);
this._proxy = extHostRpc.getProxy(MainContext.MainThreadConfiguration);
this._extHostWorkspace = extHostWorkspace;
this._barrier = new Barrier();
this._actual = null;

View File

@@ -11,7 +11,7 @@ import { CancellationToken } from 'vs/base/common/cancellation';
import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions';
import { asArray } from 'vs/base/common/arrays';
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
import { IExtHostContextService } from 'vs/workbench/api/common/extHostContextService';
import { IExtHostRpcService } from 'vs/workbench/api/common/rpcService';
interface ProviderData {
provider: vscode.DecorationProvider;
@@ -27,9 +27,9 @@ export class ExtHostDecorations implements IExtHostDecorations {
private readonly _proxy: MainThreadDecorationsShape;
constructor(
@IExtHostContextService contextService: IExtHostContextService,
@IExtHostRpcService extHostRpc: IExtHostRpcService,
) {
this._proxy = contextService.rpc.getProxy(MainContext.MainThreadDecorations);
this._proxy = extHostRpc.getProxy(MainContext.MainThreadDecorations);
}
registerDecorationProvider(provider: vscode.DecorationProvider, extensionId: ExtensionIdentifier): vscode.Disposable {

View File

@@ -12,8 +12,8 @@ import { ExtHostDocumentData } from 'vs/workbench/api/common/extHostDocumentData
import { ExtHostTextEditor } from 'vs/workbench/api/common/extHostTextEditor';
import * as typeConverters from 'vs/workbench/api/common/extHostTypeConverters';
import { Disposable } from 'vs/workbench/api/common/extHostTypes';
import { IExtHostContextService } from 'vs/workbench/api/common/extHostContextService';
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
import { IExtHostRpcService } from 'vs/workbench/api/common/rpcService';
export class ExtHostDocumentsAndEditors implements ExtHostDocumentsAndEditorsShape {
@@ -37,7 +37,7 @@ export class ExtHostDocumentsAndEditors implements ExtHostDocumentsAndEditorsSha
readonly onDidChangeActiveTextEditor: Event<ExtHostTextEditor | undefined> = this._onDidChangeActiveTextEditor.event;
constructor(
@IExtHostContextService private readonly _ctx: IExtHostContextService,
@IExtHostRpcService private readonly _extHostRpc: IExtHostRpcService,
) { }
dispose() {
@@ -68,7 +68,7 @@ export class ExtHostDocumentsAndEditors implements ExtHostDocumentsAndEditorsSha
assert.ok(!this._documents.has(resource.toString()), `document '${resource} already exists!'`);
const documentData = new ExtHostDocumentData(
this._ctx.rpc.getProxy(MainContext.MainThreadDocuments),
this._extHostRpc.getProxy(MainContext.MainThreadDocuments),
resource,
data.lines,
data.EOL,
@@ -99,7 +99,7 @@ export class ExtHostDocumentsAndEditors implements ExtHostDocumentsAndEditorsSha
const documentData = this._documents.get(resource.toString())!;
const editor = new ExtHostTextEditor(
this._ctx.rpc.getProxy(MainContext.MainThreadTextEditors),
this._extHostRpc.getProxy(MainContext.MainThreadTextEditors),
data.id,
documentData,
data.selections.map(typeConverters.Selection.to),

View File

@@ -3,22 +3,12 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { IMainContext, IInitData } from './extHost.protocol';
import { IInitData } from './extHost.protocol';
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
export const IExtHostContextService = createDecorator<IExtHostContextService>('IExtHostContextService');
export const IExtHostInitDataService = createDecorator<IExtHostInitDataService>('IExtHostInitDataService');
export interface IExtHostContextService {
export interface IExtHostInitDataService extends Readonly<IInitData> {
_serviceBrand: undefined;
readonly rpc: IMainContext;
readonly initData: IInitData;
}
export class ExtHostContextService implements IExtHostContextService {
_serviceBrand: any;
constructor(
readonly rpc: IMainContext,
readonly initData: IInitData
) { }
}

View File

@@ -10,7 +10,7 @@ import { Event, Emitter } from 'vs/base/common/event';
import { Disposable, MutableDisposable } from 'vs/base/common/lifecycle';
import { VSBuffer } from 'vs/base/common/buffer';
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
import { IExtHostContextService } from 'vs/workbench/api/common/extHostContextService';
import { IExtHostRpcService } from 'vs/workbench/api/common/rpcService';
export abstract class AbstractExtHostOutputChannel extends Disposable implements vscode.OutputChannel {
@@ -143,8 +143,8 @@ export class ExtHostOutputService implements ExtHostOutputServiceShape {
protected readonly _channels: Map<string, AbstractExtHostOutputChannel> = new Map<string, AbstractExtHostOutputChannel>();
protected readonly _visibleChannelDisposable = new MutableDisposable();
constructor(@IExtHostContextService extHostContext: IExtHostContextService) {
this._proxy = extHostContext.rpc.getProxy(MainContext.MainThreadOutputService);
constructor(@IExtHostRpcService extHostRpc: IExtHostRpcService) {
this._proxy = extHostRpc.getProxy(MainContext.MainThreadOutputService);
}
$setVisibleChannel(channelId: string): void {

View File

@@ -25,8 +25,9 @@ import { ExtensionIdentifier, IExtensionDescription } from 'vs/platform/extensio
import { Barrier } from 'vs/base/common/async';
import { Schemas } from 'vs/base/common/network';
import { withUndefinedAsNull } from 'vs/base/common/types';
import { IExtHostContextService } from 'vs/workbench/api/common/extHostContextService';
import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService';
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
import { IExtHostRpcService } from 'vs/workbench/api/common/rpcService';
export interface IExtHostWorkspaceProvider {
getWorkspaceFolder2(uri: vscode.Uri, resolveParent?: boolean): Promise<vscode.WorkspaceFolder | undefined>;
@@ -173,16 +174,17 @@ export class ExtHostWorkspace implements ExtHostWorkspaceShape, IExtHostWorkspac
private readonly _activeSearchCallbacks: ((match: IRawFileMatch2) => any)[] = [];
constructor(
@IExtHostContextService extHostContext: IExtHostContextService,
@IExtHostRpcService extHostRpc: IExtHostRpcService,
@IExtHostInitDataService initData: IExtHostInitDataService,
@ILogService logService: ILogService,
) {
this._logService = logService;
this._requestIdProvider = new Counter();
this._barrier = new Barrier();
this._proxy = extHostContext.rpc.getProxy(MainContext.MainThreadWorkspace);
this._messageService = extHostContext.rpc.getProxy(MainContext.MainThreadMessageService);
const data = extHostContext.initData.workspace;
this._proxy = extHostRpc.getProxy(MainContext.MainThreadWorkspace);
this._messageService = extHostRpc.getProxy(MainContext.MainThreadMessageService);
const data = initData.workspace;
this._confirmedWorkspace = data ? new ExtHostWorkspaceImpl(data.id, data.name, [], data.configuration ? URI.revive(data.configuration) : null, !!data.isUntitled) : undefined;
}

View File

@@ -0,0 +1,25 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { IMainContext } from 'vs/workbench/api/common/extHost.protocol';
import { ProxyIdentifier } from 'vs/workbench/services/extensions/common/proxyIdentifier';
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
export const IExtHostRpcService = createDecorator<IExtHostRpcService>('IExtHostRpcService');
export interface IExtHostRpcService {
_serviceBrand: any;
getProxy<T>(identifier: ProxyIdentifier<T>): T;
}
export class ExtHostRpcService implements IExtHostRpcService {
readonly _serviceBrand: any;
constructor(private readonly _mainContext: IMainContext) { }
getProxy<T>(identifier: ProxyIdentifier<T>): T {
return this._mainContext.getProxy(identifier);
}
}