提交 e3462718 编写于 作者: B Benjamin Pasero

cleanup workbench config service

上级 31bac4ee
...@@ -19,7 +19,7 @@ import {LegacyWorkspaceContextService} from 'vs/workbench/services/workspace/com ...@@ -19,7 +19,7 @@ import {LegacyWorkspaceContextService} from 'vs/workbench/services/workspace/com
import {IEnvironmentService} from 'vs/platform/environment/common/environment'; import {IEnvironmentService} from 'vs/platform/environment/common/environment';
import {OptionsChangeEvent, EventType} from 'vs/workbench/common/events'; import {OptionsChangeEvent, EventType} from 'vs/workbench/common/events';
import {IEventService} from 'vs/platform/event/common/event'; import {IEventService} from 'vs/platform/event/common/event';
import {IDisposable} from 'vs/base/common/lifecycle'; import {IDisposable, dispose} from 'vs/base/common/lifecycle';
import {readFile, writeFile} from 'vs/base/node/pfs'; import {readFile, writeFile} from 'vs/base/node/pfs';
import {JSONPath} from 'vs/base/common/json'; import {JSONPath} from 'vs/base/common/json';
import {applyEdits} from 'vs/base/common/jsonFormatter'; import {applyEdits} from 'vs/base/common/jsonFormatter';
...@@ -55,24 +55,26 @@ export class ConfigurationService implements IWorkbenchConfigurationService, IDi ...@@ -55,24 +55,26 @@ export class ConfigurationService implements IWorkbenchConfigurationService, IDi
private static RELOAD_CONFIGURATION_DELAY = 50; private static RELOAD_CONFIGURATION_DELAY = 50;
private _onDidUpdateConfiguration = new Emitter<IConfigurationServiceEvent>(); private _onDidUpdateConfiguration: Emitter<IConfigurationServiceEvent>;
private workspaceSettingsRootFolder: string;
private cachedConfig: ILoadConfigResult; private cachedConfig: ILoadConfigResult;
private bulkFetchFromWorkspacePromise: TPromise<any>; private bulkFetchFromWorkspacePromise: TPromise<any>;
private workspaceFilePathToConfiguration: { [relativeWorkspacePath: string]: TPromise<IConfigFile> }; private workspaceFilePathToConfiguration: { [relativeWorkspacePath: string]: TPromise<IConfigFile> };
private callOnDispose: IDisposable; private toDispose: IDisposable[];
private reloadConfigurationScheduler: RunOnceScheduler; private reloadConfigurationScheduler: RunOnceScheduler;
constructor( constructor(
@IWorkspaceContextService private contextService: IWorkspaceContextService, @IWorkspaceContextService private contextService: IWorkspaceContextService,
@IEventService private eventService: IEventService, @IEventService private eventService: IEventService,
@IEnvironmentService private environmentService: IEnvironmentService, @IEnvironmentService private environmentService: IEnvironmentService,
workspaceSettingsRootFolder: string = '.vscode' private workspaceSettingsRootFolder: string = '.vscode'
) { ) {
this.workspaceSettingsRootFolder = workspaceSettingsRootFolder; this.toDispose = [];
this._onDidUpdateConfiguration = new Emitter<IConfigurationServiceEvent>();
this.toDispose.push(this._onDidUpdateConfiguration);
this.workspaceFilePathToConfiguration = Object.create(null); this.workspaceFilePathToConfiguration = Object.create(null);
this.cachedConfig = { this.cachedConfig = {
config: {} config: {}
...@@ -86,18 +88,9 @@ export class ConfigurationService implements IWorkbenchConfigurationService, IDi ...@@ -86,18 +88,9 @@ export class ConfigurationService implements IWorkbenchConfigurationService, IDi
} }
private registerListeners(): void { private registerListeners(): void {
const unbind = this.eventService.addListener2(FileEventType.FILE_CHANGES, (events) => this.handleFileEvents(events)); this.toDispose.push(this.eventService.addListener2(FileEventType.FILE_CHANGES, (events) => this.handleFileEvents(events)));
const subscription = Registry.as<IConfigurationRegistry>(Extensions.Configuration).onDidRegisterConfiguration(() => this.onDidRegisterConfiguration()); this.toDispose.push(Registry.as<IConfigurationRegistry>(Extensions.Configuration).onDidRegisterConfiguration(() => this.onDidRegisterConfiguration()));
this.toDispose.push(this.eventService.addListener2(EventType.WORKBENCH_OPTIONS_CHANGED, (e) => this.onOptionsChanged(e)));
const unbind2 = this.eventService.addListener2(EventType.WORKBENCH_OPTIONS_CHANGED, (e) => this.onOptionsChanged(e));
this.callOnDispose = {
dispose: () => {
unbind.dispose();
subscription.dispose();
unbind2.dispose();
}
};
} }
private onOptionsChanged(e: OptionsChangeEvent): void { private onOptionsChanged(e: OptionsChangeEvent): void {
...@@ -130,7 +123,7 @@ export class ConfigurationService implements IWorkbenchConfigurationService, IDi ...@@ -130,7 +123,7 @@ export class ConfigurationService implements IWorkbenchConfigurationService, IDi
if (error) { if (error) {
if ((<any>error).code === 'ENOTDIR') { if ((<any>error).code === 'ENOTDIR') {
c({ c({
resource: resource, resource,
isDirectory: false isDirectory: false
}); });
} else { } else {
...@@ -138,7 +131,7 @@ export class ConfigurationService implements IWorkbenchConfigurationService, IDi ...@@ -138,7 +131,7 @@ export class ConfigurationService implements IWorkbenchConfigurationService, IDi
} }
} else { } else {
c({ c({
resource: resource, resource,
isDirectory: true, isDirectory: true,
children: children.map((child) => { children: children.map((child) => {
if (platform.isMacintosh) { if (platform.isMacintosh) {
...@@ -298,6 +291,8 @@ export class ConfigurationService implements IWorkbenchConfigurationService, IDi ...@@ -298,6 +291,8 @@ export class ConfigurationService implements IWorkbenchConfigurationService, IDi
this.reloadConfigurationScheduler = new RunOnceScheduler(() => { this.reloadConfigurationScheduler = new RunOnceScheduler(() => {
this.doLoadConfiguration().then((config) => this._onDidUpdateConfiguration.fire({ config: config })).done(null, errors.onUnexpectedError); this.doLoadConfiguration().then((config) => this._onDidUpdateConfiguration.fire({ config: config })).done(null, errors.onUnexpectedError);
}, ConfigurationService.RELOAD_CONFIGURATION_DELAY); }, ConfigurationService.RELOAD_CONFIGURATION_DELAY);
this.toDispose.push(this.reloadConfigurationScheduler);
} }
if (!this.reloadConfigurationScheduler.isScheduled()) { if (!this.reloadConfigurationScheduler.isScheduled()) {
...@@ -345,11 +340,6 @@ export class ConfigurationService implements IWorkbenchConfigurationService, IDi ...@@ -345,11 +340,6 @@ export class ConfigurationService implements IWorkbenchConfigurationService, IDi
} }
public dispose(): void { public dispose(): void {
if (this.reloadConfigurationScheduler) { this.toDispose = dispose(this.toDispose);
this.reloadConfigurationScheduler.dispose();
}
this.callOnDispose.dispose();
this._onDidUpdateConfiguration.dispose();
} }
} }
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册