提交 e830d9f9 编写于 作者: S Sandeep Somavarapu 提交者: GitHub

separate global & workspace memento

上级 afb0e96b
......@@ -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<vscode.ExtensionContext> {
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;
......
......@@ -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<ExtensionMemento>;
private _value?: { [n: string]: any; };
private readonly _storageListener: IDisposable;
private _syncedKeys: string[] = [];
get syncedKeys(): ReadonlyArray<string> { return Object.freeze(this._syncedKeys); }
set syncedKeys(syncKeys: ReadonlyArray<string>) {
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<string> { return Object.freeze(this._syncedKeys); }
set syncedKeys(syncKeys: ReadonlyArray<string>) {
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;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册