From afda5a2542b055a59e1e1c38e8273a8c66536d6f Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Thu, 12 May 2016 18:34:44 +0200 Subject: [PATCH] add a way to validate stacks model while running --- .../parts/editor/editor.contribution.ts | 11 ++++++++ .../common/editor/editorStacksModel.ts | 25 +++++++++++++++---- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/src/vs/workbench/browser/parts/editor/editor.contribution.ts b/src/vs/workbench/browser/parts/editor/editor.contribution.ts index 70d847a1309..66b84014fea 100644 --- a/src/vs/workbench/browser/parts/editor/editor.contribution.ts +++ b/src/vs/workbench/browser/parts/editor/editor.contribution.ts @@ -29,6 +29,7 @@ import {Scope, IActionBarRegistry, Extensions as ActionBarExtensions} from 'vs/w import {SyncActionDescriptor} from 'vs/platform/actions/common/actions'; import {SyncDescriptor} from 'vs/platform/instantiation/common/descriptors'; import {KeyMod, KeyCode} from 'vs/base/common/keyCodes'; +import {EditorStacksModel} from 'vs/workbench/common/editor/editorStacksModel'; // Register String Editor (Registry.as(EditorExtensions.Editors)).registerEditor( @@ -187,4 +188,14 @@ KeybindingsRegistry.registerCommandDesc({ }, when: undefined, primary: undefined +}); + +KeybindingsRegistry.registerCommandDesc({ + id: '_workbench.validateStacksModel', + weight: KeybindingsRegistry.WEIGHT.workbenchContrib(0), + handler(accessor: ServicesAccessor) { + (accessor.get(IWorkbenchEditorService).getStacksModel()).validate(); + }, + when: undefined, + primary: undefined }); \ No newline at end of file diff --git a/src/vs/workbench/common/editor/editorStacksModel.ts b/src/vs/workbench/common/editor/editorStacksModel.ts index 4326aef5fd9..a3d24ee68b0 100644 --- a/src/vs/workbench/common/editor/editorStacksModel.ts +++ b/src/vs/workbench/common/editor/editorStacksModel.ts @@ -759,6 +759,12 @@ export class EditorStacksModel implements IEditorStacksModel { } private save(): void { + const serialized = this.serialize(); + + this.storageService.store(EditorStacksModel.STORAGE_KEY, JSON.stringify(serialized), StorageScope.WORKSPACE); + } + + private serialize(): ISerializedEditorStacksModel { let activeIndex = this.indexOf(this._activeGroup); let activeIsEmptyGroup = false; @@ -791,12 +797,10 @@ export class EditorStacksModel implements IEditorStacksModel { serializableActiveIndex = activeIndex; // active group is not empty and can be serialized } - const serialized: ISerializedEditorStacksModel = { + return { groups: serializedGroups, active: serializableActiveIndex }; - - this.storageService.store(EditorStacksModel.STORAGE_KEY, JSON.stringify(serialized), StorageScope.WORKSPACE); } private fireEvent(emitter: Emitter, group: EditorGroup): void { @@ -822,7 +826,7 @@ export class EditorStacksModel implements IEditorStacksModel { const serialized: ISerializedEditorStacksModel = JSON.parse(modelRaw); // TODO@stacks remove this once stacks are stable; prevent bad stored state - const invalidId = this.validate(serialized); + const invalidId = this.doValidate(serialized); if (invalidId) { console.warn(`Ignoring invalid stacks model (Error code: ${invalidId}): ${JSON.stringify(serialized)}`); console.warn(serialized); @@ -835,7 +839,7 @@ export class EditorStacksModel implements IEditorStacksModel { } } - private validate(serialized: ISerializedEditorStacksModel): number { + private doValidate(serialized: ISerializedEditorStacksModel): number { if (!serialized.groups.length && typeof serialized.active === 'number') { return 1; // Invalid active (we have no groups, but an active one) } @@ -887,6 +891,17 @@ export class EditorStacksModel implements IEditorStacksModel { dispose(this.toDispose); } + public validate(): void { + const serialized = this.serialize(); + const invalidId = this.doValidate(serialized); + if (invalidId) { + console.warn(`Ignoring invalid stacks model (Error code: ${invalidId}): ${JSON.stringify(serialized)}`); + console.warn(serialized); + } else { + console.log('Stacks Model OK!'); + } + } + public toString(): string { this.ensureLoaded(); -- GitLab