#28538 Prepare for sending configuration data to extension host

This commit is contained in:
Sandeep Somavarapu
2017-06-15 20:35:06 +02:00
parent 4f888ef65d
commit b3191eecc1
5 changed files with 40 additions and 32 deletions
@@ -8,7 +8,7 @@ import { Schemas } from 'vs/base/common/network';
import Severity from 'vs/base/common/severity';
import URI from 'vs/base/common/uri';
import { TPromise } from 'vs/base/common/winjs.base';
import { IConfigurationService, IConfigurationServiceEvent, IConfigurationValue, getConfigurationValue, IConfigurationKeys, IConfigurationValues, ConfigurationData, ConfigurationModel } from 'vs/platform/configuration/common/configuration';
import { IConfigurationService, IConfigurationServiceEvent, IConfigurationValue, getConfigurationValue, IConfigurationKeys, IConfigurationValues, Configuration, IConfigurationData, ConfigurationModel } from 'vs/platform/configuration/common/configuration';
import { IEditor, IEditorInput, IEditorOptions, IEditorService, IResourceInput, Position } from 'vs/platform/editor/common/editor';
import { ICommandService, ICommand, ICommandEvent, ICommandHandler, CommandsRegistry } from 'vs/platform/commands/common/commands';
import { AbstractKeybindingService } from 'vs/platform/keybinding/common/abstractKeybindingService';
@@ -442,8 +442,8 @@ export class SimpleConfigurationService implements IConfigurationService {
return this._config;
}
public getConfigurationData(): ConfigurationData<any> {
return new ConfigurationData(new ConfigurationModel(this._config), new ConfigurationModel());
public getConfigurationData(): IConfigurationData<any> {
return new Configuration(new ConfigurationModel(this._config), new ConfigurationModel()).toData();
}
public reloadConfiguration<T>(section?: string): TPromise<T> {
@@ -25,7 +25,7 @@ export type IConfigurationValues = { [key: string]: IConfigurationValue<any> };
export interface IConfigurationService {
_serviceBrand: any;
getConfigurationData<T>(): ConfigurationData<T>;
getConfigurationData<T>(): IConfigurationData<T>;
/**
* Fetches the appropriate section of the configuration JSON file.
@@ -204,7 +204,7 @@ export interface IConfigurationData<T> {
workspaceUri: string;
}
export class ConfigurationData<T> {
export class Configuration<T> {
private _global: ConfigurationModel<T>;
private _workspace: ConfigurationModel<T>;
@@ -303,7 +303,7 @@ export class ConfigurationData<T> {
return options.overrideIdentifier ? configurationModel.override<T>(options.overrideIdentifier) : configurationModel;
}
public toJSON(): IConfigurationData<any> {
public toData(): IConfigurationData<any> {
return {
defaults: {
contents: this._defaults.contents,
@@ -318,19 +318,19 @@ export class ConfigurationData<T> {
result[folder.toString()] = { contents, overrides };
return result;
}, Object.create({})),
workspaceUri: this.workspaceUri.toString()
workspaceUri: this.workspaceUri ? this.workspaceUri.toString() : void 0
};
}
public static parse(data: IConfigurationData<any>): ConfigurationData<any> {
const defaults = ConfigurationData.parseConfigurationModel(data.defaults);
const user = ConfigurationData.parseConfigurationModel(data.user);
public static parse(data: IConfigurationData<any>): Configuration<any> {
const defaults = Configuration.parseConfigurationModel(data.defaults);
const user = Configuration.parseConfigurationModel(data.user);
const folders: StrictResourceMap<ConfigurationModel<any>> = Object.keys(data.folders).reduce((result, key) => {
result.set(URI.parse(key), ConfigurationData.parseConfigurationModel(data.folders[key]));
result.set(URI.parse(key), Configuration.parseConfigurationModel(data.folders[key]));
return result;
}, new StrictResourceMap<ConfigurationModel<any>>());
const workspaceUri = data.workspaceUri ? URI.parse(data.workspaceUri) : void 0;
return new ConfigurationData<any>(defaults, user, folders, workspaceUri);
return new Configuration<any>(defaults, user, folders, workspaceUri);
}
private static parseConfigurationModel(model: IConfiguraionModel<any>): ConfigurationModel<any> {
@@ -9,7 +9,7 @@ import { ConfigWatcher } from 'vs/base/node/config';
import { Registry } from 'vs/platform/platform';
import { IConfigurationRegistry, Extensions } from 'vs/platform/configuration/common/configurationRegistry';
import { IDisposable, toDisposable, Disposable } from 'vs/base/common/lifecycle';
import { ConfigurationSource, IConfigurationService, IConfigurationServiceEvent, IConfigurationValue, IConfigurationKeys, ConfigurationModel, IConfigurationOptions, ConfigurationData, IConfigurationValues } from 'vs/platform/configuration/common/configuration';
import { ConfigurationSource, IConfigurationService, IConfigurationServiceEvent, IConfigurationValue, IConfigurationKeys, ConfigurationModel, IConfigurationOptions, Configuration, IConfigurationValues, IConfigurationData } from 'vs/platform/configuration/common/configuration';
import { CustomConfigurationModel, DefaultConfigurationModel } from 'vs/platform/configuration/common/model';
import Event, { Emitter } from 'vs/base/common/event';
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
@@ -18,7 +18,7 @@ export class ConfigurationService<T> extends Disposable implements IConfiguratio
_serviceBrand: any;
private _configuration: ConfigurationData<T>;
private _configuration: Configuration<T>;
private userConfigModelWatcher: ConfigWatcher<ConfigurationModel<T>>;
private _onDidUpdateConfiguration: Emitter<IConfigurationServiceEvent> = this._register(new Emitter<IConfigurationServiceEvent>());
@@ -43,10 +43,14 @@ export class ConfigurationService<T> extends Disposable implements IConfiguratio
this._register(Registry.as<IConfigurationRegistry>(Extensions.Configuration).onDidRegisterConfiguration(() => this.onConfigurationChange(ConfigurationSource.Default)));
}
public get configuration(): Configuration<any> {
return this._configuration || (this._configuration = this.consolidateConfigurations());
}
private onConfigurationChange(source: ConfigurationSource): void {
this.reset(); // reset our caches
const cache = this.getConfigurationData();
const cache = this.configuration;
this._onDidUpdateConfiguration.fire({
source,
@@ -66,23 +70,23 @@ export class ConfigurationService<T> extends Disposable implements IConfiguratio
public getConfiguration<C>(section?: string): C
public getConfiguration<C>(options?: IConfigurationOptions): C
public getConfiguration<C>(arg?: any): C {
return this.getConfigurationData().getValue<C>(this.toOptions(arg));
return this.configuration.getValue<C>(this.toOptions(arg));
}
public lookup<C>(key: string, overrideIdentifier?: string): IConfigurationValue<C> {
return this.getConfigurationData().lookup<C>(key, overrideIdentifier);
return this.configuration.lookup<C>(key, overrideIdentifier);
}
public keys(): IConfigurationKeys {
return this.getConfigurationData().keys();
return this.configuration.keys();
}
public values<V>(): IConfigurationValues {
return this._configuration.values();
}
public getConfigurationData(): ConfigurationData<T> {
return this._configuration || (this._configuration = this.consolidateConfigurations());
public getConfigurationData(): IConfigurationData<T> {
return this.configuration.toData();
}
private reset(): void {
@@ -99,9 +103,9 @@ export class ConfigurationService<T> extends Disposable implements IConfiguratio
return {};
}
private consolidateConfigurations(): ConfigurationData<T> {
private consolidateConfigurations(): Configuration<T> {
const defaults = new DefaultConfigurationModel<T>();
const user = this.userConfigModelWatcher.getConfig();
return new ConfigurationData(defaults, user);
return new Configuration(defaults, user);
}
}
@@ -8,7 +8,7 @@
import { TPromise } from 'vs/base/common/winjs.base';
import { EventEmitter } from 'vs/base/common/eventEmitter';
import { getConfigurationKeys } from 'vs/platform/configuration/common/model';
import { IConfigurationService, getConfigurationValue, IConfigurationValue, IConfigurationKeys, IConfigurationValues, ConfigurationData, ConfigurationModel } from 'vs/platform/configuration/common/configuration';
import { IConfigurationService, getConfigurationValue, IConfigurationValue, IConfigurationKeys, IConfigurationValues, IConfigurationData, Configuration, ConfigurationModel } from 'vs/platform/configuration/common/configuration';
export class TestConfigurationService extends EventEmitter implements IConfigurationService {
public _serviceBrand: any;
@@ -23,8 +23,8 @@ export class TestConfigurationService extends EventEmitter implements IConfigura
return this.configuration;
}
public getConfigurationData(): ConfigurationData<any> {
return new ConfigurationData(new ConfigurationModel(), new ConfigurationModel(this.configuration));
public getConfigurationData(): IConfigurationData<any> {
return new Configuration(new ConfigurationModel(), new ConfigurationModel(this.configuration)).toData();
}
public setUserConfiguration(key: any, value: any): Thenable<void> {
@@ -24,7 +24,7 @@ import { isLinux } from 'vs/base/common/platform';
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
import { CustomConfigurationModel } from 'vs/platform/configuration/common/model';
import { ScopedConfigurationModel, FolderConfigurationModel, FolderSettingsModel } from 'vs/workbench/services/configuration/common/configurationModels';
import { IConfigurationServiceEvent, ConfigurationSource, IConfigurationKeys, IConfigurationValue, ConfigurationModel, IConfigurationOptions, ConfigurationData, IConfigurationValues } from 'vs/platform/configuration/common/configuration';
import { IConfigurationServiceEvent, ConfigurationSource, IConfigurationKeys, IConfigurationValue, ConfigurationModel, IConfigurationOptions, Configuration as BaseConfiguration, IConfigurationValues, IConfigurationData } from 'vs/platform/configuration/common/configuration';
import { IWorkspaceConfigurationService, WORKSPACE_CONFIG_FOLDER_DEFAULT_NAME, WORKSPACE_STANDALONE_CONFIGURATIONS, WORKSPACE_CONFIG_DEFAULT_PATH } from 'vs/workbench/services/configuration/common/configuration';
import { ConfigurationService as GlobalConfigurationService } from 'vs/platform/configuration/node/configurationService';
import { createHash } from "crypto";
@@ -193,7 +193,11 @@ export class WorkspaceConfigurationService extends Disposable implements IWorksp
return this.workspace ? this.legacyWorkspace.toResource(workspaceRelativePath) : null;
}
public getConfigurationData<T>(): ConfigurationData<T> {
public getConfigurationData<T>(): IConfigurationData<T> {
return this._configuration.toData();
}
public get configuration(): BaseConfiguration<any> {
return this._configuration;
}
@@ -275,7 +279,7 @@ export class WorkspaceConfigurationService extends Disposable implements IWorksp
private initCaches(): void {
this.cachedFolderConfigs = new StrictResourceMap<FolderConfiguration<any>>();
this._configuration = new Configuration(this.baseConfigurationService.getConfigurationData(), new StrictResourceMap<FolderConfigurationModel<any>>(), this.workspaceUri);
this._configuration = new Configuration(<any>this.baseConfigurationService.configuration, new StrictResourceMap<FolderConfigurationModel<any>>(), this.workspaceUri);
this.initCachesForFolders(this.workspace ? this.workspace.roots : []);
}
@@ -298,7 +302,7 @@ export class WorkspaceConfigurationService extends Disposable implements IWorksp
}
}
if (this._configuration.updateBaseConfiguration(this.baseConfigurationService.getConfigurationData())) {
if (this._configuration.updateBaseConfiguration(<any>this.baseConfigurationService.configuration)) {
this.trigger(event.source, event.sourceConfig);
}
}
@@ -517,13 +521,13 @@ function resolveStat(resource: URI): TPromise<IStat> {
});
}
class Configuration<T> extends ConfigurationData<T> {
class Configuration<T> extends BaseConfiguration<T> {
constructor(private _baseConfiguration: ConfigurationData<T>, protected folders: StrictResourceMap<FolderConfigurationModel<T>>, workspaceUri: URI) {
constructor(private _baseConfiguration: Configuration<T>, protected folders: StrictResourceMap<FolderConfigurationModel<T>>, workspaceUri: URI) {
super(_baseConfiguration.defaults, _baseConfiguration.user, folders, workspaceUri);
}
updateBaseConfiguration(baseConfiguration: ConfigurationData<T>): boolean {
updateBaseConfiguration(baseConfiguration: Configuration<T>): boolean {
const current = new Configuration(this._baseConfiguration, this.folders, this.workspaceUri);
this._defaults = baseConfiguration.defaults;