diff --git a/src/vs/workbench/browser/parts/editor/editor.contribution.ts b/src/vs/workbench/browser/parts/editor/editor.contribution.ts index c90339afa47ecce6ed27184f9e4295dd8afd8c50..c45244baa59a228a56ef6068df2f35b61ffcbb64 100644 --- a/src/vs/workbench/browser/parts/editor/editor.contribution.ts +++ b/src/vs/workbench/browser/parts/editor/editor.contribution.ts @@ -22,6 +22,7 @@ import { ResourceEditorInput } from 'vs/workbench/common/editor/resourceEditorIn import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { KeybindingsRegistry } from 'vs/platform/keybinding/common/keybindingsRegistry'; import { TextDiffEditor } from 'vs/workbench/browser/parts/editor/textDiffEditor'; +import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles'; import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService'; import { BinaryResourceDiffEditor } from 'vs/workbench/browser/parts/editor/binaryDiffEditor'; import { IEditorGroupService } from 'vs/workbench/services/group/common/groupService'; @@ -97,16 +98,20 @@ interface ISerializedUntitledEditorInput { resource: string; } -let untitledEditorServiceAccessor: UntitledEditorServiceAccessor; -class UntitledEditorServiceAccessor { - constructor( @IUntitledEditorService public untitledEditorService: IUntitledEditorService) { - } -} - // Register Editor Input Factory class UntitledEditorInputFactory implements IEditorInputFactory { + constructor( + @IUntitledEditorService private untitledEditorService: IUntitledEditorService, + @ITextFileService private textFileService: ITextFileService + ) { + } + public serialize(editorInput: EditorInput): string { + if (!this.textFileService.isHotExitEnabled) { + return null; // never restore untitled unless hot exit is enabled + } + const untitledEditorInput = editorInput; let resource = untitledEditorInput.getResource(); @@ -122,11 +127,7 @@ class UntitledEditorInputFactory implements IEditorInputFactory { public deserialize(instantiationService: IInstantiationService, serializedEditorInput: string): EditorInput { const deserialized: ISerializedUntitledEditorInput = JSON.parse(serializedEditorInput); - if (!untitledEditorServiceAccessor) { - untitledEditorServiceAccessor = instantiationService.createInstance(UntitledEditorServiceAccessor); - } - - return untitledEditorServiceAccessor.untitledEditorService.createOrGet(URI.parse(deserialized.resource)); + return this.untitledEditorService.createOrGet(URI.parse(deserialized.resource)); } } diff --git a/src/vs/workbench/services/textfile/common/textFileService.ts b/src/vs/workbench/services/textfile/common/textFileService.ts index a41c2c86daa4d219d33a3744a20094ada749d9dc..9cb5e6766b990299b3878d11ce6c86f91eeaada4 100644 --- a/src/vs/workbench/services/textfile/common/textFileService.ts +++ b/src/vs/workbench/services/textfile/common/textFileService.ts @@ -141,7 +141,7 @@ export abstract class TextFileService implements ITextFileService { if (dirty.length) { // If hot exit is enabled, backup dirty files and allow to exit without confirmation - if (this.configuredHotExit) { + if (this.isHotExitEnabled) { this.showHotExitMessage(); return this.backupBeforeShutdown(dirty, this.models, reason).then(result => { @@ -671,6 +671,10 @@ export abstract class TextFileService implements ITextFileService { }; } + public get isHotExitEnabled(): boolean { + return !this.environmentService.isExtensionDevelopment && this.configuredHotExit; + } + public dispose(): void { this.toUnbind = dispose(this.toUnbind); diff --git a/src/vs/workbench/services/textfile/common/textfiles.ts b/src/vs/workbench/services/textfile/common/textfiles.ts index c6a0e93cb5f1eaa29a05483476428e20245f25b5..f529c80f11d1d2f7f9e0309fcfca1007cc1c1a67 100644 --- a/src/vs/workbench/services/textfile/common/textfiles.ts +++ b/src/vs/workbench/services/textfile/common/textfiles.ts @@ -339,4 +339,9 @@ export interface ITextFileService extends IDisposable { * Convinient fast access to the raw configured auto save settings. */ getAutoSaveConfiguration(): IAutoSaveConfiguration; + + /** + * Convinient fast access to the hot exit file setting. + */ + isHotExitEnabled: boolean; } \ No newline at end of file