Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/vs/workbench/common/editor/editorGroupModel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1033,7 +1033,7 @@ export class EditorGroupModel extends Disposable implements IEditorGroupModel {

const editorSerializer = registry.getEditorSerializer(editor);
if (editorSerializer) {
const value = editorSerializer.serialize(editor);
const value = editorSerializer.canSerialize(editor) ? editorSerializer.serialize(editor) : undefined;

// Editor can be serialized
if (typeof value === 'string') {
Expand Down
10 changes: 3 additions & 7 deletions src/vs/workbench/contrib/chat/browser/chatEditorInput.ts
Original file line number Diff line number Diff line change
Expand Up @@ -183,16 +183,12 @@ interface ISerializedChatEditorInput {
}

export class ChatEditorInputSerializer implements IEditorSerializer {
canSerialize(input: EditorInput): boolean {
return input instanceof ChatEditorInput;
canSerialize(input: EditorInput): input is ChatEditorInput & { readonly sessionId: string } {
return input instanceof ChatEditorInput && typeof input.sessionId === 'string';
}

serialize(input: EditorInput): string | undefined {
if (!(input instanceof ChatEditorInput)) {
return undefined;
}

if (typeof input.sessionId !== 'string') {
if (!this.canSerialize(input)) {
return undefined;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import { parse } from 'vs/base/common/marshalling';
import { Schemas } from 'vs/base/common/network';
import { extname, isEqual } from 'vs/base/common/resources';
import { isFalsyOrWhitespace } from 'vs/base/common/strings';
import { assertType } from 'vs/base/common/types';
import { URI, UriComponents } from 'vs/base/common/uri';
import { IBulkEditService } from 'vs/editor/browser/services/bulkEditService';
import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditorWidget';
Expand Down Expand Up @@ -263,13 +262,19 @@ type interactiveEditorInputData = { resource: URI; inputResource: URI; name: str
export class InteractiveEditorSerializer implements IEditorSerializer {
public static readonly ID = InteractiveEditorInput.ID;

canSerialize(editor: EditorInput): boolean {
const interactiveEditorInput = editor as InteractiveEditorInput;
return URI.isUri(interactiveEditorInput?.primary?.resource) && URI.isUri(interactiveEditorInput?.inputResource);
canSerialize(editor: EditorInput): editor is InteractiveEditorInput {
if (!(editor instanceof InteractiveEditorInput)) {
return false;
}

return URI.isUri(editor.primary.resource) && URI.isUri(editor.inputResource);
}

serialize(input: EditorInput): string {
assertType(input instanceof InteractiveEditorInput);
serialize(input: EditorInput): string | undefined {
if (!this.canSerialize(input)) {
return undefined;
}

return JSON.stringify({
resource: input.primary.resource,
inputResource: input.inputResource,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -364,14 +364,16 @@ interface ISerializedMultiDiffEditorInput {

export class MultiDiffEditorSerializer implements IEditorSerializer {

// TODO@bpasero, @aiday-mar: following canSerialize should be removed (debt item)
canSerialize(editor: EditorInput): boolean {
canSerialize(editor: EditorInput): editor is MultiDiffEditorInput {
return editor instanceof MultiDiffEditorInput && !editor.isTransient;
}

serialize(editor: MultiDiffEditorInput): string | undefined {
const shouldSerialize = editor instanceof MultiDiffEditorInput && !editor.isTransient;
return shouldSerialize ? JSON.stringify(editor.serialize()) : undefined;
if (!this.canSerialize(editor)) {
return undefined;
}

return JSON.stringify(editor.serialize());
}

deserialize(instantiationService: IInstantiationService, serializedEditor: string): EditorInput | undefined {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,10 @@ class SearchEditorInputSerializer implements IEditorSerializer {
}

serialize(input: SearchEditorInput) {
if (!this.canSerialize(input)) {
return undefined;
}

if (input.isDisposed()) {
return JSON.stringify({ modelUri: undefined, dirty: false, config: input.tryReadConfigSync(), name: input.getName(), matchRanges: [], backingUri: input.backingUri?.toString() } as SerializedSearchEditor);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,15 @@ export class TerminalInputSerializer implements IEditorSerializer {
@ITerminalEditorService private readonly _terminalEditorService: ITerminalEditorService
) { }

public canSerialize(editorInput: TerminalEditorInput): boolean {
return !!editorInput.terminalInstance?.persistentProcessId;
public canSerialize(editorInput: TerminalEditorInput): editorInput is TerminalEditorInput & { readonly terminalInstance: ITerminalInstance } {
return typeof editorInput.terminalInstance?.persistentProcessId === 'number' && editorInput.terminalInstance.shouldPersist;
}

public serialize(editorInput: TerminalEditorInput): string | undefined {
if (!editorInput.terminalInstance?.persistentProcessId || !editorInput.terminalInstance.shouldPersist) {
if (!this.canSerialize(editorInput)) {
return;
}
const term = JSON.stringify(this._toJson(editorInput.terminalInstance));
return term;
return JSON.stringify(this._toJson(editorInput.terminalInstance));
}

public deserialize(instantiationService: IInstantiationService, serializedEditorInput: string): EditorInput | undefined {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ export class WebviewEditorInputSerializer implements IEditorSerializer {
}

public serialize(input: WebviewInput): string | undefined {
if (!this._webviewWorkbenchService.shouldPersist(input)) {
if (!this.canSerialize(input)) {
return undefined;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ export class UntitledTextEditorInputSerializer implements IEditorSerializer {
}

serialize(editorInput: EditorInput): string | undefined {
if (!this.filesConfigurationService.isHotExitEnabled || editorInput.isDisposed()) {
if (!this.canSerialize(editorInput)) {
return undefined;
}

Expand Down