mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-17 02:51:36 -05:00
Move handling generated files to the serialization classes (#8952)
* move handling generated files to the serilization classes * remove unneeded methods * fix compile
This commit is contained in:
@@ -83,7 +83,7 @@ export const Extensions = {
|
|||||||
|
|
||||||
Registry.add(Extensions.LanguageAssociations, languageAssociationRegistery);
|
Registry.add(Extensions.LanguageAssociations, languageAssociationRegistery);
|
||||||
|
|
||||||
export function doHandleUpgrade(editor: EditorInput): EditorInput {
|
export function doHandleUpgrade(editor?: EditorInput): EditorInput | undefined {
|
||||||
if (editor instanceof UntitledTextEditorInput || editor instanceof FileEditorInput) {
|
if (editor instanceof UntitledTextEditorInput || editor instanceof FileEditorInput) {
|
||||||
const activeWidget = getCodeEditor(editor);
|
const activeWidget = getCodeEditor(editor);
|
||||||
const textModel = activeWidget.getModel();
|
const textModel = activeWidget.getModel();
|
||||||
|
|||||||
@@ -394,7 +394,7 @@ suite('commandLineService tests', () => {
|
|||||||
const instantiationService = new TestInstantiationService();
|
const instantiationService = new TestInstantiationService();
|
||||||
let uri = URI.file(args._[0]);
|
let uri = URI.file(args._[0]);
|
||||||
const untitledEditorInput = new UntitledTextEditorInput(uri, false, '', '', '', instantiationService, undefined, new LabelService(undefined, undefined), undefined, undefined);
|
const untitledEditorInput = new UntitledTextEditorInput(uri, false, '', '', '', instantiationService, undefined, new LabelService(undefined, undefined), undefined, undefined);
|
||||||
const queryInput = new UntitledQueryEditorInput(undefined, untitledEditorInput, undefined, connectionManagementService.object, querymodelService.object, configurationService.object, undefined);
|
const queryInput = new UntitledQueryEditorInput(undefined, untitledEditorInput, undefined, connectionManagementService.object, querymodelService.object, configurationService.object);
|
||||||
queryInput.state.connected = true;
|
queryInput.state.connected = true;
|
||||||
const editorService: TypeMoq.Mock<IEditorService> = TypeMoq.Mock.ofType<IEditorService>(TestEditorService, TypeMoq.MockBehavior.Strict);
|
const editorService: TypeMoq.Mock<IEditorService> = TypeMoq.Mock.ofType<IEditorService>(TestEditorService, TypeMoq.MockBehavior.Strict);
|
||||||
editorService.setup(e => e.editors).returns(() => [queryInput]);
|
editorService.setup(e => e.editors).returns(() => [queryInput]);
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ import { IConfigurationService } from 'vs/platform/configuration/common/configur
|
|||||||
import { EncodingMode } from 'vs/workbench/common/editor';
|
import { EncodingMode } from 'vs/workbench/common/editor';
|
||||||
import { TextFileEditorModel } from 'vs/workbench/services/textfile/common/textFileEditorModel';
|
import { TextFileEditorModel } from 'vs/workbench/services/textfile/common/textFileEditorModel';
|
||||||
import { BinaryEditorModel } from 'vs/workbench/common/editor/binaryEditorModel';
|
import { BinaryEditorModel } from 'vs/workbench/common/editor/binaryEditorModel';
|
||||||
import { IFileService } from 'vs/platform/files/common/files';
|
|
||||||
|
|
||||||
type PublicPart<T> = { [K in keyof T]: T[K] };
|
type PublicPart<T> = { [K in keyof T]: T[K] };
|
||||||
|
|
||||||
@@ -27,10 +26,9 @@ export class FileQueryEditorInput extends QueryEditorInput implements PublicPart
|
|||||||
results: QueryResultsInput,
|
results: QueryResultsInput,
|
||||||
@IConnectionManagementService connectionManagementService: IConnectionManagementService,
|
@IConnectionManagementService connectionManagementService: IConnectionManagementService,
|
||||||
@IQueryModelService queryModelService: IQueryModelService,
|
@IQueryModelService queryModelService: IQueryModelService,
|
||||||
@IConfigurationService configurationService: IConfigurationService,
|
@IConfigurationService configurationService: IConfigurationService
|
||||||
@IFileService fileService: IFileService
|
|
||||||
) {
|
) {
|
||||||
super(description, text, results, connectionManagementService, queryModelService, configurationService, fileService);
|
super(description, text, results, connectionManagementService, queryModelService, configurationService);
|
||||||
}
|
}
|
||||||
|
|
||||||
public resolve(): Promise<TextFileEditorModel | BinaryEditorModel> {
|
public resolve(): Promise<TextFileEditorModel | BinaryEditorModel> {
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import { Emitter } from 'vs/base/common/event';
|
|||||||
import { URI } from 'vs/base/common/uri';
|
import { URI } from 'vs/base/common/uri';
|
||||||
import { EditorInput, GroupIdentifier, IRevertOptions, ISaveOptions, IEditorInput } from 'vs/workbench/common/editor';
|
import { EditorInput, GroupIdentifier, IRevertOptions, ISaveOptions, IEditorInput } from 'vs/workbench/common/editor';
|
||||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||||
import { IFileService } from 'vs/platform/files/common/files';
|
|
||||||
|
|
||||||
import { IConnectionManagementService, IConnectableInput, INewConnectionParams, RunQueryOnConnectionMode } from 'sql/platform/connection/common/connectionManagement';
|
import { IConnectionManagementService, IConnectableInput, INewConnectionParams, RunQueryOnConnectionMode } from 'sql/platform/connection/common/connectionManagement';
|
||||||
import { QueryResultsInput } from 'sql/workbench/contrib/query/common/queryResultsInput';
|
import { QueryResultsInput } from 'sql/workbench/contrib/query/common/queryResultsInput';
|
||||||
@@ -123,8 +122,7 @@ export abstract class QueryEditorInput extends EditorInput implements IConnectab
|
|||||||
protected _results: QueryResultsInput,
|
protected _results: QueryResultsInput,
|
||||||
@IConnectionManagementService private readonly connectionManagementService: IConnectionManagementService,
|
@IConnectionManagementService private readonly connectionManagementService: IConnectionManagementService,
|
||||||
@IQueryModelService private readonly queryModelService: IQueryModelService,
|
@IQueryModelService private readonly queryModelService: IQueryModelService,
|
||||||
@IConfigurationService private readonly configurationService: IConfigurationService,
|
@IConfigurationService private readonly configurationService: IConfigurationService
|
||||||
@IFileService private _fileService: IFileService
|
|
||||||
) {
|
) {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
@@ -199,10 +197,6 @@ export abstract class QueryEditorInput extends EditorInput implements IConnectab
|
|||||||
return (this._text instanceof inputType);
|
return (this._text instanceof inputType);
|
||||||
}
|
}
|
||||||
|
|
||||||
public inputFileExists(): Promise<boolean> {
|
|
||||||
return this._fileService.exists(this.getResource());
|
|
||||||
}
|
|
||||||
|
|
||||||
public getName(longForm?: boolean): string {
|
public getName(longForm?: boolean): string {
|
||||||
if (this.configurationService.getValue('sql.showConnectionInfoInTitle')) {
|
if (this.configurationService.getValue('sql.showConnectionInfoInTitle')) {
|
||||||
let profile = this.connectionManagementService.getConnectionProfile(this.uri);
|
let profile = this.connectionManagementService.getConnectionProfile(this.uri);
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ import { IObjectExplorerService } from 'sql/workbench/services/objectExplorer/br
|
|||||||
import { IConnectionManagementService, IConnectionCompletionOptions, ConnectionType } from 'sql/platform/connection/common/connectionManagement';
|
import { IConnectionManagementService, IConnectionCompletionOptions, ConnectionType } from 'sql/platform/connection/common/connectionManagement';
|
||||||
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
|
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
|
||||||
import { onUnexpectedError } from 'vs/base/common/errors';
|
import { onUnexpectedError } from 'vs/base/common/errors';
|
||||||
|
import { IFileService } from 'vs/platform/files/common/files';
|
||||||
|
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||||
|
|
||||||
const editorInputFactoryRegistry = Registry.as<IEditorInputFactoryRegistry>(EditorInputExtensions.EditorInputFactories);
|
const editorInputFactoryRegistry = Registry.as<IEditorInputFactoryRegistry>(EditorInputExtensions.EditorInputFactories);
|
||||||
|
|
||||||
@@ -63,6 +65,10 @@ export class QueryEditorLanguageAssociation implements ILanguageAssociation {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export class FileQueryEditorInputFactory implements IEditorInputFactory {
|
export class FileQueryEditorInputFactory implements IEditorInputFactory {
|
||||||
|
|
||||||
|
constructor(@IFileService private readonly fileService: IFileService) {
|
||||||
|
|
||||||
|
}
|
||||||
serialize(editorInput: FileQueryEditorInput): string {
|
serialize(editorInput: FileQueryEditorInput): string {
|
||||||
const factory = editorInputFactoryRegistry.getEditorInputFactory(FILE_EDITOR_INPUT_ID);
|
const factory = editorInputFactoryRegistry.getEditorInputFactory(FILE_EDITOR_INPUT_ID);
|
||||||
if (factory) {
|
if (factory) {
|
||||||
@@ -74,8 +80,14 @@ export class FileQueryEditorInputFactory implements IEditorInputFactory {
|
|||||||
deserialize(instantiationService: IInstantiationService, serializedEditorInput: string): FileQueryEditorInput | undefined {
|
deserialize(instantiationService: IInstantiationService, serializedEditorInput: string): FileQueryEditorInput | undefined {
|
||||||
const factory = editorInputFactoryRegistry.getEditorInputFactory(FILE_EDITOR_INPUT_ID);
|
const factory = editorInputFactoryRegistry.getEditorInputFactory(FILE_EDITOR_INPUT_ID);
|
||||||
const fileEditorInput = factory.deserialize(instantiationService, serializedEditorInput) as FileEditorInput;
|
const fileEditorInput = factory.deserialize(instantiationService, serializedEditorInput) as FileEditorInput;
|
||||||
const queryResultsInput = instantiationService.createInstance(QueryResultsInput, fileEditorInput.getResource().toString());
|
// only successfully deserilize the file if the resource actually exists
|
||||||
return instantiationService.createInstance(FileQueryEditorInput, '', fileEditorInput, queryResultsInput);
|
if (this.fileService.exists(fileEditorInput.getResource())) {
|
||||||
|
const queryResultsInput = instantiationService.createInstance(QueryResultsInput, fileEditorInput.getResource().toString());
|
||||||
|
return instantiationService.createInstance(FileQueryEditorInput, '', fileEditorInput, queryResultsInput);
|
||||||
|
} else {
|
||||||
|
fileEditorInput.dispose();
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
canSerialize(): boolean { // we can always serialize query inputs
|
canSerialize(): boolean { // we can always serialize query inputs
|
||||||
@@ -84,9 +96,12 @@ export class FileQueryEditorInputFactory implements IEditorInputFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export class UntitledQueryEditorInputFactory implements IEditorInputFactory {
|
export class UntitledQueryEditorInputFactory implements IEditorInputFactory {
|
||||||
|
|
||||||
|
constructor(@IConfigurationService private readonly configurationService: IConfigurationService) { }
|
||||||
serialize(editorInput: UntitledQueryEditorInput): string {
|
serialize(editorInput: UntitledQueryEditorInput): string {
|
||||||
const factory = editorInputFactoryRegistry.getEditorInputFactory(UntitledTextEditorInput.ID);
|
const factory = editorInputFactoryRegistry.getEditorInputFactory(UntitledTextEditorInput.ID);
|
||||||
if (factory) {
|
// only serialize non-dirty files if the user has that setting
|
||||||
|
if (factory && (editorInput.isDirty() || this.configurationService.getValue<boolean>('sql.promptToSaveGeneratedFiles'))) {
|
||||||
return factory.serialize(editorInput.text); // serialize based on the underlying input
|
return factory.serialize(editorInput.text); // serialize based on the underlying input
|
||||||
}
|
}
|
||||||
return undefined;
|
return undefined;
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ import { IQueryModelService } from 'sql/workbench/services/query/common/queryMod
|
|||||||
import { IEncodingSupport, EncodingMode } from 'vs/workbench/common/editor';
|
import { IEncodingSupport, EncodingMode } from 'vs/workbench/common/editor';
|
||||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||||
import { IResolvedTextEditorModel } from 'vs/editor/common/services/resolverService';
|
import { IResolvedTextEditorModel } from 'vs/editor/common/services/resolverService';
|
||||||
import { IFileService } from 'vs/platform/files/common/files';
|
|
||||||
import { UntitledTextEditorInput } from 'vs/workbench/common/editor/untitledTextEditorInput';
|
import { UntitledTextEditorInput } from 'vs/workbench/common/editor/untitledTextEditorInput';
|
||||||
import { UntitledTextEditorModel } from 'vs/workbench/common/editor/untitledTextEditorModel';
|
import { UntitledTextEditorModel } from 'vs/workbench/common/editor/untitledTextEditorModel';
|
||||||
|
|
||||||
@@ -29,10 +28,9 @@ export class UntitledQueryEditorInput extends QueryEditorInput implements IEncod
|
|||||||
results: QueryResultsInput,
|
results: QueryResultsInput,
|
||||||
@IConnectionManagementService connectionManagementService: IConnectionManagementService,
|
@IConnectionManagementService connectionManagementService: IConnectionManagementService,
|
||||||
@IQueryModelService queryModelService: IQueryModelService,
|
@IQueryModelService queryModelService: IQueryModelService,
|
||||||
@IConfigurationService configurationService: IConfigurationService,
|
@IConfigurationService configurationService: IConfigurationService
|
||||||
@IFileService fileService: IFileService
|
|
||||||
) {
|
) {
|
||||||
super(description, text, results, connectionManagementService, queryModelService, configurationService, fileService);
|
super(description, text, results, connectionManagementService, queryModelService, configurationService);
|
||||||
}
|
}
|
||||||
|
|
||||||
public resolve(): Promise<UntitledTextEditorModel & IResolvedTextEditorModel> {
|
public resolve(): Promise<UntitledTextEditorModel & IResolvedTextEditorModel> {
|
||||||
|
|||||||
@@ -296,8 +296,7 @@ suite('SQL QueryEditor Tests', () => {
|
|||||||
undefined,
|
undefined,
|
||||||
connectionManagementService.object,
|
connectionManagementService.object,
|
||||||
queryModelService.object,
|
queryModelService.object,
|
||||||
configurationService.object,
|
configurationService.object
|
||||||
undefined
|
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -429,8 +429,6 @@ export class EditorGroupView extends Themable implements IEditorGroupView {
|
|||||||
return; // nothing to show
|
return; // nothing to show
|
||||||
}
|
}
|
||||||
|
|
||||||
await this._group.removeNonExitingEditor(); // {{SQL CARBON EDIT}} @udeeshagautam perform async correction for non-existing files
|
|
||||||
|
|
||||||
// Determine editor options
|
// Determine editor options
|
||||||
let options: EditorOptions;
|
let options: EditorOptions;
|
||||||
if (from instanceof EditorGroupView) {
|
if (from instanceof EditorGroupView) {
|
||||||
|
|||||||
@@ -9,12 +9,9 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti
|
|||||||
import { IConfigurationService, IConfigurationChangeEvent } from 'vs/platform/configuration/common/configuration';
|
import { IConfigurationService, IConfigurationChangeEvent } from 'vs/platform/configuration/common/configuration';
|
||||||
import { dispose, Disposable, DisposableStore } from 'vs/base/common/lifecycle';
|
import { dispose, Disposable, DisposableStore } from 'vs/base/common/lifecycle';
|
||||||
import { Registry } from 'vs/platform/registry/common/platform';
|
import { Registry } from 'vs/platform/registry/common/platform';
|
||||||
import { coalesce, firstIndex } from 'vs/base/common/arrays';
|
import { coalesce } from 'vs/base/common/arrays';
|
||||||
|
|
||||||
// {{SQL CARBON EDIT}}
|
// {{SQL CARBON EDIT}}
|
||||||
import { FileEditorInput } from 'vs/workbench/contrib/files/common/editors/fileEditorInput';
|
|
||||||
import { QueryEditorInput } from 'sql/workbench/contrib/query/common/queryEditorInput';
|
|
||||||
import { UntitledTextEditorInput } from 'vs/workbench/common/editor/untitledTextEditorInput';
|
|
||||||
import { doHandleUpgrade } from 'sql/workbench/common/languageAssociation';
|
import { doHandleUpgrade } from 'sql/workbench/common/languageAssociation';
|
||||||
|
|
||||||
const EditorOpenPositioning = {
|
const EditorOpenPositioning = {
|
||||||
@@ -624,14 +621,6 @@ export class EditorGroup extends Disposable {
|
|||||||
this.editors.forEach(e => {
|
this.editors.forEach(e => {
|
||||||
const factory = registry.getEditorInputFactory(e.getTypeId());
|
const factory = registry.getEditorInputFactory(e.getTypeId());
|
||||||
if (factory) {
|
if (factory) {
|
||||||
// {{SQL CARBON EDIT}}
|
|
||||||
// don't serialize unmodified unitited files
|
|
||||||
if (e instanceof UntitledTextEditorInput && !e.isDirty()
|
|
||||||
&& !this.configurationService.getValue<boolean>('sql.promptToSaveGeneratedFiles')) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// {{SQL CARBON EDIT}} - End
|
|
||||||
|
|
||||||
const value = factory.serialize(e);
|
const value = factory.serialize(e);
|
||||||
if (typeof value === 'string') {
|
if (typeof value === 'string') {
|
||||||
serializedEditors.push({ id: e.getTypeId(), value });
|
serializedEditors.push({ id: e.getTypeId(), value });
|
||||||
@@ -689,26 +678,4 @@ export class EditorGroup extends Disposable {
|
|||||||
|
|
||||||
return this._id;
|
return this._id;
|
||||||
}
|
}
|
||||||
|
|
||||||
// {{SQL CARBON EDIT}}
|
|
||||||
async removeNonExitingEditor(): Promise<void> {
|
|
||||||
let n = 0;
|
|
||||||
while (n < this.editors.length) {
|
|
||||||
let editor = this.editors[n];
|
|
||||||
if (editor instanceof QueryEditorInput && editor.matchInputInstanceType(FileEditorInput) && !editor.isDirty() && await editor.inputFileExists() === false && this.editors.length > 1) {
|
|
||||||
// remove from editors list so that they do not get restored
|
|
||||||
this.editors.splice(n, 1);
|
|
||||||
let index = firstIndex(this.mru, e => e.matches(editor));
|
|
||||||
|
|
||||||
// remove from MRU list otherwise later if we try to close them it leaves a sticky active editor with no data
|
|
||||||
this.mru.splice(index, 1);
|
|
||||||
this.active = this.isActive(editor) ? this.editors[0] : this.active;
|
|
||||||
editor.dispose();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
n++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// {{SQL CARBON EDIT}}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user