From e830d9f9055fe5dd50c7fda476c66742a58649a2 Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Mon, 26 Oct 2020 08:09:19 +0000 Subject: [PATCH] separate global & workspace memento --- .../api/common/extHostExtensionService.ts | 6 +-- src/vs/workbench/api/common/extHostMemento.ts | 44 ++++++++++--------- 2 files changed, 27 insertions(+), 23 deletions(-) diff --git a/src/vs/workbench/api/common/extHostExtensionService.ts b/src/vs/workbench/api/common/extHostExtensionService.ts index dc794045400..0e6d982d02f 100644 --- a/src/vs/workbench/api/common/extHostExtensionService.ts +++ b/src/vs/workbench/api/common/extHostExtensionService.ts @@ -23,7 +23,7 @@ import type * as vscode from 'vscode'; import { ExtensionIdentifier, IExtensionDescription } from 'vs/platform/extensions/common/extensions'; import { Schemas } from 'vs/base/common/network'; import { VSBuffer } from 'vs/base/common/buffer'; -import { ExtensionMemento } from 'vs/workbench/api/common/extHostMemento'; +import { ExtensionGlobalMemento, ExtensionMemento } from 'vs/workbench/api/common/extHostMemento'; import { RemoteAuthorityResolverError, ExtensionMode, ExtensionRuntime } from 'vs/workbench/api/common/extHostTypes'; import { ResolvedAuthority, ResolvedOptions, RemoteAuthorityResolverErrorCode, IRemoteConnectionData } from 'vs/platform/remote/common/remoteAuthorityResolver'; import { IInstantiationService, createDecorator } from 'vs/platform/instantiation/common/instantiation'; @@ -371,8 +371,8 @@ export abstract class AbstractExtHostExtensionService extends Disposable impleme private _loadExtensionContext(extensionDescription: IExtensionDescription): Promise { - const globalState = new ExtensionMemento(extensionDescription, true, this._storage); - const workspaceState = new ExtensionMemento(extensionDescription, false, this._storage); + const globalState = new ExtensionGlobalMemento(extensionDescription, this._storage); + const workspaceState = new ExtensionMemento(extensionDescription.identifier.value, false, this._storage); const extensionMode = extensionDescription.isUnderDevelopment ? (this._initData.environment.extensionTestsLocationURI ? ExtensionMode.Test : ExtensionMode.Development) : ExtensionMode.Production; diff --git a/src/vs/workbench/api/common/extHostMemento.ts b/src/vs/workbench/api/common/extHostMemento.ts index 8a0fdfe62da..076c79eab34 100644 --- a/src/vs/workbench/api/common/extHostMemento.ts +++ b/src/vs/workbench/api/common/extHostMemento.ts @@ -9,33 +9,18 @@ import { ExtHostStorage } from 'vs/workbench/api/common/extHostStorage'; import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; import { checkProposedApiEnabled } from 'vs/workbench/services/extensions/common/extensions'; -export class ExtensionMemento implements vscode.SyncedMemento { +export class ExtensionMemento implements vscode.Memento { - private readonly _extension: IExtensionDescription; - private readonly _id: string; - private readonly _version: string; + protected readonly _id: string; private readonly _shared: boolean; - private readonly _storage: ExtHostStorage; + protected readonly _storage: ExtHostStorage; private readonly _init: Promise; private _value?: { [n: string]: any; }; private readonly _storageListener: IDisposable; - private _syncedKeys: string[] = []; - get syncedKeys(): ReadonlyArray { return Object.freeze(this._syncedKeys); } - set syncedKeys(syncKeys: ReadonlyArray) { - checkProposedApiEnabled(this._extension); - if (!this._shared) { - throw new Error('Only global state is synchronized'); - } - this._syncedKeys = [...syncKeys]; - this._storage.registerExtensionStorageKeysToSync({ id: this._id, version: this._version }, this._syncedKeys); - } - - constructor(extensionDescription: IExtensionDescription, global: boolean, storage: ExtHostStorage) { - this._extension = extensionDescription; - this._id = extensionDescription.identifier.value; - this._version = extensionDescription.version; + constructor(id: string, global: boolean, storage: ExtHostStorage) { + this._id = id; this._shared = global; this._storage = storage; @@ -74,3 +59,22 @@ export class ExtensionMemento implements vscode.SyncedMemento { this._storageListener.dispose(); } } + +export class ExtensionGlobalMemento extends ExtensionMemento implements vscode.SyncedMemento { + + private readonly _extension: IExtensionDescription; + + private _syncedKeys: string[] = []; + get syncedKeys(): ReadonlyArray { return Object.freeze(this._syncedKeys); } + set syncedKeys(syncKeys: ReadonlyArray) { + checkProposedApiEnabled(this._extension); + this._syncedKeys = [...syncKeys]; + this._storage.registerExtensionStorageKeysToSync({ id: this._id, version: this._extension.version }, this._syncedKeys); + } + + constructor(extensionDescription: IExtensionDescription, storage: ExtHostStorage) { + super(extensionDescription.identifier.value, true, storage); + this._extension = extensionDescription; + } + +} -- GitLab