From 2e6578fc37eb28fef042a643c5ea9a30d6579dea Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Thu, 14 Dec 2017 10:37:58 +0100 Subject: [PATCH] native json for exthost/mainthread-workspace, #40169 --- src/vs/workbench/api/node/extHost.protocol.ts | 7 +++---- src/vs/workbench/api/node/extHostWorkspace.ts | 15 ++++++++++++--- src/vs/workbench/node/extensionHostMain.ts | 5 +++-- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/vs/workbench/api/node/extHost.protocol.ts b/src/vs/workbench/api/node/extHost.protocol.ts index a0b316029b2..9a21e4409dd 100644 --- a/src/vs/workbench/api/node/extHost.protocol.ts +++ b/src/vs/workbench/api/node/extHost.protocol.ts @@ -48,7 +48,6 @@ import { ITreeItem } from 'vs/workbench/common/views'; import { ThemeColor } from 'vs/platform/theme/common/themeService'; import { IDisposable } from 'vs/base/common/lifecycle'; import { SerializedError } from 'vs/base/common/errors'; -import { IWorkspaceFolderData } from 'vs/platform/workspace/common/workspace'; import { IStat, IFileChange } from 'vs/platform/files/common/files'; import { ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry'; import { ParsedArgs } from 'vs/platform/environment/common/environment'; @@ -68,7 +67,7 @@ export interface IEnvironment { export interface IWorkspaceData { id: string; name: string; - folders: IWorkspaceFolderData[]; + folders: { uri: UriComponents, name: string, index: number }[]; } export interface IInitData { @@ -686,7 +685,7 @@ export const MainContext = { MainThreadStorage: createMainId('MainThreadStorage'), MainThreadTelemetry: createMainId('MainThreadTelemetry'), MainThreadTerminalService: createMainId('MainThreadTerminalService'), - MainThreadWorkspace: createMainId('MainThreadWorkspace', ProxyType.CustomMarshaller), + MainThreadWorkspace: createMainId('MainThreadWorkspace'), MainThreadFileSystem: createMainId('MainThreadFileSystem'), MainThreadExtensionService: createMainId('MainThreadExtensionService'), MainThreadSCM: createMainId('MainThreadSCM', ProxyType.CustomMarshaller), @@ -715,6 +714,6 @@ export const ExtHostContext = { ExtHostTerminalService: createExtId('ExtHostTerminalService'), ExtHostSCM: createExtId('ExtHostSCM', ProxyType.CustomMarshaller), ExtHostTask: createExtId('ExtHostTask', ProxyType.CustomMarshaller), - ExtHostWorkspace: createExtId('ExtHostWorkspace', ProxyType.CustomMarshaller), + ExtHostWorkspace: createExtId('ExtHostWorkspace'), ExtHostWindow: createExtId('ExtHostWindow'), }; diff --git a/src/vs/workbench/api/node/extHostWorkspace.ts b/src/vs/workbench/api/node/extHostWorkspace.ts index 9423952a852..2152866058e 100644 --- a/src/vs/workbench/api/node/extHostWorkspace.ts +++ b/src/vs/workbench/api/node/extHostWorkspace.ts @@ -18,14 +18,23 @@ import { TernarySearchTree } from 'vs/base/common/map'; class Workspace2 extends Workspace { static fromData(data: IWorkspaceData) { - return data ? new Workspace2(data) : null; + if (!data) { + return null; + } else { + const { id, name, folders } = data; + return new Workspace2( + id, + name, + folders.map(({ uri, name, index }) => new WorkspaceFolder({ name, index, uri: URI.revive(uri) })) + ); + } } private readonly _workspaceFolders: vscode.WorkspaceFolder[] = []; private readonly _structure = TernarySearchTree.forPaths(); - private constructor(data: IWorkspaceData) { - super(data.id, data.name, data.folders.map(folder => new WorkspaceFolder(folder))); + private constructor(id: string, name: string, folders: WorkspaceFolder[]) { + super(id, name, folders); // setup the workspace folder data structure this.folders.forEach(({ name, uri, index }) => { diff --git a/src/vs/workbench/node/extensionHostMain.ts b/src/vs/workbench/node/extensionHostMain.ts index 24e02e00271..8bcaf3ad23c 100644 --- a/src/vs/workbench/node/extensionHostMain.ts +++ b/src/vs/workbench/node/extensionHostMain.ts @@ -26,6 +26,7 @@ import { IDisposable, dispose } from 'vs/base/common/lifecycle'; import { ILogService } from 'vs/platform/log/common/log'; import { IMessagePassingProtocol } from 'vs/base/parts/ipc/common/ipc'; import { RPCProtocol } from 'vs/workbench/services/extensions/node/rpcProtocol'; +import URI from 'vs/base/common/uri'; // const nativeExit = process.exit.bind(process); function patchProcess(allowExit: boolean) { @@ -234,7 +235,7 @@ export class ExtensionHostMain { // find exact path for (const { uri } of this._workspace.folders) { - if (await pfs.exists(join(uri.fsPath, fileName))) { + if (await pfs.exists(join(URI.revive(uri).fsPath, fileName))) { // the file was found return ( this._extensionService.activateById(extensionId, new ExtensionActivatedByEvent(true, `workspaceContains:${fileName}`)) @@ -261,7 +262,7 @@ export class ExtensionHostMain { includes[globPattern] = true; }); - const folderQueries = this._workspace.folders.map(folder => ({ folder: folder.uri })); + const folderQueries = this._workspace.folders.map(folder => ({ folder: URI.revive(folder.uri) })); const config = this._extHostConfiguration.getConfiguration('search'); const useRipgrep = config.get('useRipgrep', true); const followSymlinks = config.get('followSymlinks', true); -- GitLab