Skip to content

Commit c656d5e

Browse files
committed
Reduce calling clone
1 parent c2a07b4 commit c656d5e

19 files changed

Lines changed: 820 additions & 705 deletions

src/vs/base/common/objects.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,29 @@ export function deepClone<T>(obj: T): T {
4141
return result;
4242
}
4343

44+
export function deepFreeze<T>(obj: T): T {
45+
46+
if (!obj || typeof obj !== 'object') {
47+
return obj;
48+
}
49+
50+
// Retrieve the property names defined on obj
51+
var propNames = Object.getOwnPropertyNames(obj);
52+
53+
// Freeze properties before freezing self
54+
propNames.forEach(function (name) {
55+
var prop = obj[name];
56+
57+
// Freeze prop if it is an object
58+
if (typeof prop === 'object' && prop !== null) {
59+
deepFreeze(prop);
60+
}
61+
});
62+
63+
// Freeze self (no-op if already frozen)
64+
return Object.freeze(obj);
65+
}
66+
4467
const hasOwnProperty = Object.prototype.hasOwnProperty;
4568

4669
export function cloneAndChange(obj: any, changer: (orig: any) => any): any {

src/vs/editor/standalone/browser/simpleServices.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import * as editorCommon from 'vs/editor/common/editorCommon';
2323
import { ICodeEditor, IDiffEditor } from 'vs/editor/browser/editorBrowser';
2424
import { Selection } from 'vs/editor/common/core/selection';
2525
import Event, { Emitter } from 'vs/base/common/event';
26-
import { Configuration, ConfigurationModel, DefaultConfigurationModel } from 'vs/platform/configuration/common/configurationModels';
26+
import { Configuration, DefaultConfigurationModel, ConfigurationModel } from 'vs/platform/configuration/common/configurationModels';
2727
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
2828
import { IProgressService, IProgressRunner } from 'vs/platform/progress/common/progress';
2929
import { ITextResourceConfigurationService } from 'vs/editor/common/services/resourceConfiguration';

src/vs/platform/configuration/common/configuration.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import Event from 'vs/base/common/event';
1111
import { Registry } from 'vs/platform/registry/common/platform';
1212
import { IWorkspaceFolder } from 'vs/platform/workspace/common/workspace';
1313
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
14-
import { IConfigurationRegistry, Extensions } from 'vs/platform/configuration/common/configurationRegistry';
14+
import { IConfigurationRegistry, Extensions, OVERRIDE_PROPERTY_PATTERN } from 'vs/platform/configuration/common/configurationRegistry';
1515
import { StrictResourceMap } from 'vs/base/common/map';
1616

1717
export const IConfigurationService = createDecorator<IConfigurationService>('configurationService');
@@ -124,6 +124,26 @@ export function compare(from: IConfigurationModel, to: IConfigurationModel): { a
124124
return { added, removed, updated };
125125
}
126126

127+
export function toOverrides(raw: any, conflictReporter: (message: string) => void): IOverrides[] {
128+
const overrides: IOverrides[] = [];
129+
const configurationProperties = Registry.as<IConfigurationRegistry>(Extensions.Configuration).getConfigurationProperties();
130+
for (const key of Object.keys(raw)) {
131+
if (OVERRIDE_PROPERTY_PATTERN.test(key)) {
132+
const overrideRaw = {};
133+
for (const keyInOverrideRaw in raw[key]) {
134+
if (configurationProperties[keyInOverrideRaw] && configurationProperties[keyInOverrideRaw].overridable) {
135+
overrideRaw[keyInOverrideRaw] = raw[key][keyInOverrideRaw];
136+
}
137+
}
138+
overrides.push({
139+
identifiers: [overrideIdentifierFromKey(key).trim()],
140+
contents: toValuesTree(overrideRaw, conflictReporter)
141+
});
142+
}
143+
}
144+
return overrides;
145+
}
146+
127147
export function toValuesTree(properties: { [qualifiedKey: string]: any }, conflictReporter: (message: string) => void): any {
128148
const root = Object.create(null);
129149

0 commit comments

Comments
 (0)