diff --git a/src/vs/editor/browser/standalone/simpleServices.ts b/src/vs/editor/browser/standalone/simpleServices.ts index 990e6cf2109..7365d6ccdb5 100644 --- a/src/vs/editor/browser/standalone/simpleServices.ts +++ b/src/vs/editor/browser/standalone/simpleServices.ts @@ -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 { - return new ConfigurationData(new ConfigurationModel(this._config), new ConfigurationModel()); + public getConfigurationData(): IConfigurationData { + return new Configuration(new ConfigurationModel(this._config), new ConfigurationModel()).toData(); } public reloadConfiguration(section?: string): TPromise { diff --git a/src/vs/platform/configuration/common/configuration.ts b/src/vs/platform/configuration/common/configuration.ts index 4aee67a6091..35d4dd6762e 100644 --- a/src/vs/platform/configuration/common/configuration.ts +++ b/src/vs/platform/configuration/common/configuration.ts @@ -25,7 +25,7 @@ export type IConfigurationValues = { [key: string]: IConfigurationValue }; export interface IConfigurationService { _serviceBrand: any; - getConfigurationData(): ConfigurationData; + getConfigurationData(): IConfigurationData; /** * Fetches the appropriate section of the configuration JSON file. @@ -204,7 +204,7 @@ export interface IConfigurationData { workspaceUri: string; } -export class ConfigurationData { +export class Configuration { private _global: ConfigurationModel; private _workspace: ConfigurationModel; @@ -303,7 +303,7 @@ export class ConfigurationData { return options.overrideIdentifier ? configurationModel.override(options.overrideIdentifier) : configurationModel; } - public toJSON(): IConfigurationData { + public toData(): IConfigurationData { return { defaults: { contents: this._defaults.contents, @@ -318,19 +318,19 @@ export class ConfigurationData { 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): ConfigurationData { - const defaults = ConfigurationData.parseConfigurationModel(data.defaults); - const user = ConfigurationData.parseConfigurationModel(data.user); + public static parse(data: IConfigurationData): Configuration { + const defaults = Configuration.parseConfigurationModel(data.defaults); + const user = Configuration.parseConfigurationModel(data.user); const folders: StrictResourceMap> = 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>()); const workspaceUri = data.workspaceUri ? URI.parse(data.workspaceUri) : void 0; - return new ConfigurationData(defaults, user, folders, workspaceUri); + return new Configuration(defaults, user, folders, workspaceUri); } private static parseConfigurationModel(model: IConfiguraionModel): ConfigurationModel { diff --git a/src/vs/platform/configuration/node/configurationService.ts b/src/vs/platform/configuration/node/configurationService.ts index f5775b842c1..d93ccf72d91 100644 --- a/src/vs/platform/configuration/node/configurationService.ts +++ b/src/vs/platform/configuration/node/configurationService.ts @@ -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 extends Disposable implements IConfiguratio _serviceBrand: any; - private _configuration: ConfigurationData; + private _configuration: Configuration; private userConfigModelWatcher: ConfigWatcher>; private _onDidUpdateConfiguration: Emitter = this._register(new Emitter()); @@ -43,10 +43,14 @@ export class ConfigurationService extends Disposable implements IConfiguratio this._register(Registry.as(Extensions.Configuration).onDidRegisterConfiguration(() => this.onConfigurationChange(ConfigurationSource.Default))); } + public get configuration(): Configuration { + 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 extends Disposable implements IConfiguratio public getConfiguration(section?: string): C public getConfiguration(options?: IConfigurationOptions): C public getConfiguration(arg?: any): C { - return this.getConfigurationData().getValue(this.toOptions(arg)); + return this.configuration.getValue(this.toOptions(arg)); } public lookup(key: string, overrideIdentifier?: string): IConfigurationValue { - return this.getConfigurationData().lookup(key, overrideIdentifier); + return this.configuration.lookup(key, overrideIdentifier); } public keys(): IConfigurationKeys { - return this.getConfigurationData().keys(); + return this.configuration.keys(); } public values(): IConfigurationValues { return this._configuration.values(); } - public getConfigurationData(): ConfigurationData { - return this._configuration || (this._configuration = this.consolidateConfigurations()); + public getConfigurationData(): IConfigurationData { + return this.configuration.toData(); } private reset(): void { @@ -99,9 +103,9 @@ export class ConfigurationService extends Disposable implements IConfiguratio return {}; } - private consolidateConfigurations(): ConfigurationData { + private consolidateConfigurations(): Configuration { const defaults = new DefaultConfigurationModel(); const user = this.userConfigModelWatcher.getConfig(); - return new ConfigurationData(defaults, user); + return new Configuration(defaults, user); } } \ No newline at end of file diff --git a/src/vs/platform/configuration/test/common/testConfigurationService.ts b/src/vs/platform/configuration/test/common/testConfigurationService.ts index 91823b939bf..31c59305997 100644 --- a/src/vs/platform/configuration/test/common/testConfigurationService.ts +++ b/src/vs/platform/configuration/test/common/testConfigurationService.ts @@ -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 { - return new ConfigurationData(new ConfigurationModel(), new ConfigurationModel(this.configuration)); + public getConfigurationData(): IConfigurationData { + return new Configuration(new ConfigurationModel(), new ConfigurationModel(this.configuration)).toData(); } public setUserConfiguration(key: any, value: any): Thenable { diff --git a/src/vs/workbench/services/configuration/node/configuration.ts b/src/vs/workbench/services/configuration/node/configuration.ts index 367c9ae2c24..dfd762bf308 100644 --- a/src/vs/workbench/services/configuration/node/configuration.ts +++ b/src/vs/workbench/services/configuration/node/configuration.ts @@ -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(): ConfigurationData { + public getConfigurationData(): IConfigurationData { + return this._configuration.toData(); + } + + public get configuration(): BaseConfiguration { return this._configuration; } @@ -275,7 +279,7 @@ export class WorkspaceConfigurationService extends Disposable implements IWorksp private initCaches(): void { this.cachedFolderConfigs = new StrictResourceMap>(); - this._configuration = new Configuration(this.baseConfigurationService.getConfigurationData(), new StrictResourceMap>(), this.workspaceUri); + this._configuration = new Configuration(this.baseConfigurationService.configuration, new StrictResourceMap>(), 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(this.baseConfigurationService.configuration)) { this.trigger(event.source, event.sourceConfig); } } @@ -517,13 +521,13 @@ function resolveStat(resource: URI): TPromise { }); } -class Configuration extends ConfigurationData { +class Configuration extends BaseConfiguration { - constructor(private _baseConfiguration: ConfigurationData, protected folders: StrictResourceMap>, workspaceUri: URI) { + constructor(private _baseConfiguration: Configuration, protected folders: StrictResourceMap>, workspaceUri: URI) { super(_baseConfiguration.defaults, _baseConfiguration.user, folders, workspaceUri); } - updateBaseConfiguration(baseConfiguration: ConfigurationData): boolean { + updateBaseConfiguration(baseConfiguration: Configuration): boolean { const current = new Configuration(this._baseConfiguration, this.folders, this.workspaceUri); this._defaults = baseConfiguration.defaults;