clean up some disposable use (#6832)

This commit is contained in:
Anthony Dresser
2019-08-20 14:34:13 -07:00
committed by GitHub
parent 54cf062737
commit c540e81108
23 changed files with 139 additions and 244 deletions

View File

@@ -5,7 +5,7 @@
import * as azdata from 'azdata';
import { IAccountManagementService } from 'sql/platform/accounts/common/interfaces';
import { dispose, IDisposable } from 'vs/base/common/lifecycle';
import { Disposable } from 'vs/base/common/lifecycle';
import {
ExtHostAccountManagementShape,
MainThreadAccountManagementShape,
@@ -17,20 +17,19 @@ import { extHostNamedCustomer } from 'vs/workbench/api/common/extHostCustomers';
import { UpdateAccountListEventParams } from 'sql/platform/accounts/common/eventTypes';
@extHostNamedCustomer(SqlMainContext.MainThreadAccountManagement)
export class MainThreadAccountManagement implements MainThreadAccountManagementShape {
export class MainThreadAccountManagement extends Disposable implements MainThreadAccountManagementShape {
private _providerMetadata: { [handle: number]: azdata.AccountProviderMetadata };
private _proxy: ExtHostAccountManagementShape;
private _toDispose: IDisposable[];
constructor(
extHostContext: IExtHostContext,
@IAccountManagementService private _accountManagementService: IAccountManagementService
) {
super();
this._providerMetadata = {};
if (extHostContext) {
this._proxy = extHostContext.getProxy(SqlExtHostContext.ExtHostAccountManagement);
}
this._toDispose = [];
this._accountManagementService.updateAccountListEvent((e: UpdateAccountListEventParams) => {
if (!e) {
@@ -97,8 +96,4 @@ export class MainThreadAccountManagement implements MainThreadAccountManagementS
this._accountManagementService.unregisterProvider(this._providerMetadata[handle]);
return Promise.resolve(null);
}
public dispose(): void {
this._toDispose = dispose(this._toDispose);
}
}

View File

@@ -12,7 +12,7 @@ import { IObjectExplorerService } from 'sql/workbench/services/objectExplorer/co
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
import * as TaskUtilities from 'sql/workbench/browser/taskUtilities';
import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
import { dispose, IDisposable } from 'vs/base/common/lifecycle';
import { Disposable } from 'vs/base/common/lifecycle';
import { isUndefinedOrNull } from 'vs/base/common/types';
import { generateUuid } from 'vs/base/common/uuid';
import { ICapabilitiesService } from 'sql/platform/capabilities/common/capabilitiesService';
@@ -21,10 +21,9 @@ import { IConnectionDialogService } from 'sql/workbench/services/connection/comm
import { deepClone } from 'vs/base/common/objects';
@extHostNamedCustomer(SqlMainContext.MainThreadConnectionManagement)
export class MainThreadConnectionManagement implements MainThreadConnectionManagementShape {
export class MainThreadConnectionManagement extends Disposable implements MainThreadConnectionManagementShape {
private _proxy: ExtHostConnectionManagementShape;
private _toDispose: IDisposable[];
constructor(
extHostContext: IExtHostContext,
@@ -34,14 +33,10 @@ export class MainThreadConnectionManagement implements MainThreadConnectionManag
@IConnectionDialogService private _connectionDialogService: IConnectionDialogService,
@ICapabilitiesService private _capabilitiesService: ICapabilitiesService
) {
super();
if (extHostContext) {
this._proxy = extHostContext.getProxy(SqlExtHostContext.ExtHostConnectionManagement);
}
this._toDispose = [];
}
public dispose(): void {
this._toDispose = dispose(this._toDispose);
}
public $registerConnectionEventListener(handle: number, providerId: string): void {

View File

@@ -3,7 +3,7 @@
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { IDisposable, Disposable } from 'vs/base/common/lifecycle';
import {
SqlExtHostContext, ExtHostCredentialManagementShape,
MainThreadCredentialManagementShape, SqlMainContext
@@ -14,27 +14,22 @@ import { IExtHostContext } from 'vs/workbench/api/common/extHost.protocol';
import { extHostNamedCustomer } from 'vs/workbench/api/common/extHostCustomers';
@extHostNamedCustomer(SqlMainContext.MainThreadCredentialManagement)
export class MainThreadCredentialManagement implements MainThreadCredentialManagementShape {
export class MainThreadCredentialManagement extends Disposable implements MainThreadCredentialManagementShape {
private _proxy: ExtHostCredentialManagementShape;
private _toDispose: IDisposable[];
private _registrations: { [handle: number]: IDisposable; } = Object.create(null);
private _registrations: { [handle: number]: IDisposable; } = Object.create(null); // should we be registering these disposables?
constructor(
extHostContext: IExtHostContext,
@ICredentialsService private credentialService: ICredentialsService
) {
super();
if (extHostContext) {
this._proxy = extHostContext.getProxy(SqlExtHostContext.ExtHostCredentialManagement);
}
}
public dispose(): void {
this._toDispose = dispose(this._toDispose);
}
public $registerCredentialProvider(handle: number): Promise<any> {
let self = this;

View File

@@ -3,7 +3,7 @@
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { IDisposable, Disposable } from 'vs/base/common/lifecycle';
import {
SqlExtHostContext, ExtHostDataProtocolShape,
MainThreadDataProtocolShape, SqlMainContext
@@ -30,13 +30,11 @@ import { extHostNamedCustomer } from 'vs/workbench/api/common/extHostCustomers';
* Main thread class for handling data protocol management registration.
*/
@extHostNamedCustomer(SqlMainContext.MainThreadDataProtocol)
export class MainThreadDataProtocol implements MainThreadDataProtocolShape {
export class MainThreadDataProtocol extends Disposable implements MainThreadDataProtocolShape {
private _proxy: ExtHostDataProtocolShape;
private _toDispose: IDisposable[];
private _capabilitiesRegistrations: { [handle: number]: IDisposable; } = Object.create(null);
private _capabilitiesRegistrations: { [handle: number]: IDisposable; } = Object.create(null); // should we be registering these?
constructor(
extHostContext: IExtHostContext,
@@ -55,18 +53,15 @@ export class MainThreadDataProtocol implements MainThreadDataProtocolShape {
@ISerializationService private _serializationService: ISerializationService,
@IFileBrowserService private _fileBrowserService: IFileBrowserService
) {
super();
if (extHostContext) {
this._proxy = extHostContext.getProxy(SqlExtHostContext.ExtHostDataProtocol);
}
if (this._connectionManagementService) {
this._connectionManagementService.onLanguageFlavorChanged(e => this._proxy.$languageFlavorChanged(e), this, this._toDispose);
this._register(this._connectionManagementService.onLanguageFlavorChanged(e => this._proxy.$languageFlavorChanged(e)));
}
}
public dispose(): void {
this._toDispose = dispose(this._toDispose);
}
public $registerConnectionProvider(providerId: string, handle: number): Promise<any> {
const self = this;
this._connectionManagementService.registerProvider(providerId, <azdata.ConnectionProvider>{

View File

@@ -6,7 +6,7 @@
import { SqlMainContext, MainThreadExtensionManagementShape } from 'sql/workbench/api/common/sqlExtHost.protocol';
import { IExtHostContext } from 'vs/workbench/api/common/extHost.protocol';
import { extHostNamedCustomer } from 'vs/workbench/api/common/extHostCustomers';
import { dispose, IDisposable } from 'vs/base/common/lifecycle';
import { Disposable } from 'vs/base/common/lifecycle';
import { IExtensionManagementService, ILocalExtension } from 'vs/platform/extensionManagement/common/extensionManagement';
import { URI } from 'vs/base/common/uri';
import { IConfigurationService, ConfigurationTarget } from 'vs/platform/configuration/common/configuration';
@@ -15,9 +15,8 @@ import { localize } from 'vs/nls';
import { IWindowService } from 'vs/platform/windows/common/windows';
@extHostNamedCustomer(SqlMainContext.MainThreadExtensionManagement)
export class MainThreadExtensionManagement implements MainThreadExtensionManagementShape {
export class MainThreadExtensionManagement extends Disposable implements MainThreadExtensionManagementShape {
private _toDispose: IDisposable[];
private _obsoleteExtensionApiUsageNotificationShown: boolean = false;
constructor(
@@ -27,11 +26,7 @@ export class MainThreadExtensionManagement implements MainThreadExtensionManagem
@INotificationService private _notificationService: INotificationService,
@IWindowService protected readonly _windowService: IWindowService
) {
this._toDispose = [];
}
public dispose(): void {
this._toDispose = dispose(this._toDispose);
super();
}
public $install(vsixPath: string): Thenable<string> {

View File

@@ -6,7 +6,7 @@
import * as azdata from 'azdata';
import * as path from 'vs/base/common/path';
import { extHostNamedCustomer } from 'vs/workbench/api/common/extHostCustomers';
import { Disposable, IDisposable } from 'vs/base/common/lifecycle';
import { Disposable, DisposableStore } from 'vs/base/common/lifecycle';
import { URI, UriComponents } from 'vs/base/common/uri';
import { Event, Emitter } from 'vs/base/common/event';
import { IExtHostContext, IUndoStopOptions } from 'vs/workbench/api/common/extHost.protocol';
@@ -22,7 +22,7 @@ import {
INotebookDocumentsAndEditorsDelta, INotebookEditorAddData, INotebookShowOptions, INotebookModelAddedData, INotebookModelChangedData
} from 'sql/workbench/api/common/sqlExtHost.protocol';
import { NotebookInput } from 'sql/workbench/parts/notebook/common/models/notebookInput';
import { INotebookService, INotebookEditor, IProviderInfo } from 'sql/workbench/services/notebook/common/notebookService';
import { INotebookService, INotebookEditor } from 'sql/workbench/services/notebook/common/notebookService';
import { ISingleNotebookEditOperation, NotebookChangeKind } from 'sql/workbench/api/common/sqlExtHostTypes';
import { disposed } from 'vs/base/common/errors';
import { ICellModel, NotebookContentChange, INotebookModel } from 'sql/workbench/parts/notebook/common/models/modelInterfaces';
@@ -320,7 +320,7 @@ class MainThreadNotebookDocumentAndEditorStateComputer extends Disposable {
export class MainThreadNotebookDocumentsAndEditors extends Disposable implements MainThreadNotebookDocumentsAndEditorsShape {
private _proxy: ExtHostNotebookDocumentsAndEditorsShape;
private _notebookEditors = new Map<string, MainThreadNotebookEditor>();
private _modelToDisposeMap = new Map<string, IDisposable[]>();
private _modelToDisposeMap = new Map<string, DisposableStore>();
constructor(
extHostContext: IExtHostContext,
@IUntitledEditorService private _untitledEditorService: IUntitledEditorService,
@@ -558,11 +558,9 @@ export class MainThreadNotebookDocumentsAndEditors extends Disposable implements
return;
}
removedDocuments.forEach(removedDoc => {
let listeners = this._modelToDisposeMap.get(removedDoc.toString());
if (listeners && listeners.length) {
listeners.forEach(listener => {
listener.dispose();
});
const store = this._modelToDisposeMap.get(removedDoc.toString());
if (store) {
store.dispose();
this._modelToDisposeMap.delete(removedDoc.toString());
}
});
@@ -574,9 +572,9 @@ export class MainThreadNotebookDocumentsAndEditors extends Disposable implements
}
addedEditors.forEach(editor => {
let modelUrl = editor.uri;
this._modelToDisposeMap.set(editor.uri.toString(), [editor.contentChanged((e) => {
this._proxy.$acceptModelChanged(modelUrl, this._toNotebookChangeData(e, editor));
})]);
const store = new DisposableStore();
store.add(editor.contentChanged((e) => this._proxy.$acceptModelChanged(modelUrl, this._toNotebookChangeData(e, editor))));
this._modelToDisposeMap.set(editor.uri.toString(), store);
});
}
@@ -680,13 +678,13 @@ export class MainThreadNotebookDocumentsAndEditors extends Disposable implements
}
private async doChangeKernel(editor: MainThreadNotebookEditor, displayName: string): Promise<boolean> {
let listeners = this._modelToDisposeMap.get(editor.id);
const store = this._modelToDisposeMap.get(editor.id);
editor.model.changeKernel(displayName);
return new Promise((resolve) => {
listeners.push(editor.model.kernelChanged((kernel) => {
store.add(editor.model.kernelChanged((kernel) => {
resolve(true);
}));
this._modelToDisposeMap.set(editor.id, listeners);
this._modelToDisposeMap.set(editor.id, store);
});
}

View File

@@ -3,32 +3,22 @@
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { SqlExtHostContext, SqlMainContext, ExtHostObjectExplorerShape, MainThreadObjectExplorerShape } from 'sql/workbench/api/common/sqlExtHost.protocol';
import { SqlMainContext, MainThreadObjectExplorerShape } from 'sql/workbench/api/common/sqlExtHost.protocol';
import * as azdata from 'azdata';
import * as vscode from 'vscode';
import { IExtHostContext } from 'vs/workbench/api/common/extHost.protocol';
import { extHostNamedCustomer } from 'vs/workbench/api/common/extHostCustomers';
import { IObjectExplorerService, NodeInfoWithConnection } from 'sql/workbench/services/objectExplorer/common/objectExplorerService';
import { dispose, IDisposable } from 'vs/base/common/lifecycle';
import { Disposable } from 'vs/base/common/lifecycle';
@extHostNamedCustomer(SqlMainContext.MainThreadObjectExplorer)
export class MainThreadObjectExplorer implements MainThreadObjectExplorerShape {
private _proxy: ExtHostObjectExplorerShape;
private _toDispose: IDisposable[];
export class MainThreadObjectExplorer extends Disposable implements MainThreadObjectExplorerShape {
constructor(
extHostContext: IExtHostContext,
@IObjectExplorerService private _objectExplorerService: IObjectExplorerService,
) {
if (extHostContext) {
this._proxy = extHostContext.getProxy(SqlExtHostContext.ExtHostObjectExplorer);
}
this._toDispose = [];
}
public dispose(): void {
this._toDispose = dispose(this._toDispose);
super();
}
public $getNode(connectionId: string, nodePath?: string): Thenable<azdata.NodeInfo> {

View File

@@ -9,16 +9,15 @@ import { extHostNamedCustomer } from 'vs/workbench/api/common/extHostCustomers';
import { IConnectionManagementService, IConnectionCompletionOptions, ConnectionType, RunQueryOnConnectionMode } from 'sql/platform/connection/common/connectionManagement';
import { QueryEditor } from 'sql/workbench/parts/query/browser/queryEditor';
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
import { dispose, IDisposable } from 'vs/base/common/lifecycle';
import { Disposable } from 'vs/base/common/lifecycle';
import { IQueryModelService } from 'sql/platform/query/common/queryModel';
import * as azdata from 'azdata';
import { IQueryManagementService } from 'sql/platform/query/common/queryManagement';
@extHostNamedCustomer(SqlMainContext.MainThreadQueryEditor)
export class MainThreadQueryEditor implements MainThreadQueryEditorShape {
export class MainThreadQueryEditor extends Disposable implements MainThreadQueryEditorShape {
private _proxy: ExtHostQueryEditorShape;
private _toDispose: IDisposable[];
constructor(
extHostContext: IExtHostContext,
@@ -27,14 +26,10 @@ export class MainThreadQueryEditor implements MainThreadQueryEditorShape {
@IEditorService private _editorService: IEditorService,
@IQueryManagementService private _queryManagementService: IQueryManagementService
) {
super();
if (extHostContext) {
this._proxy = extHostContext.getProxy(SqlExtHostContext.ExtHostQueryEditor);
}
this._toDispose = [];
}
public dispose(): void {
this._toDispose = dispose(this._toDispose);
}
public $connect(fileUri: string, connectionId: string): Thenable<void> {
@@ -83,7 +78,7 @@ export class MainThreadQueryEditor implements MainThreadQueryEditorShape {
}
public $registerQueryInfoListener(handle: number, providerId: string): void {
this._toDispose.push(this._queryModelService.onQueryEvent(event => {
this._register(this._queryModelService.onQueryEvent(event => {
this._proxy.$onQueryEvent(handle, event.uri, event);
}));
}

View File

@@ -5,7 +5,7 @@
import * as azdata from 'azdata';
import { IResourceProviderService } from 'sql/workbench/services/resourceProvider/common/resourceProviderService';
import { dispose, IDisposable } from 'vs/base/common/lifecycle';
import { Disposable } from 'vs/base/common/lifecycle';
import {
ExtHostResourceProviderShape,
MainThreadResourceProviderShape,
@@ -17,20 +17,19 @@ import { extHostNamedCustomer } from 'vs/workbench/api/common/extHostCustomers';
@extHostNamedCustomer(SqlMainContext.MainThreadResourceProvider)
export class MainThreadResourceProvider implements MainThreadResourceProviderShape {
export class MainThreadResourceProvider extends Disposable implements MainThreadResourceProviderShape {
private _providerMetadata: { [handle: number]: azdata.AccountProviderMetadata };
private _proxy: ExtHostResourceProviderShape;
private _toDispose: IDisposable[];
constructor(
extHostContext: IExtHostContext,
@IResourceProviderService private _resourceProviderService: IResourceProviderService
) {
super();
this._providerMetadata = {};
if (extHostContext) {
this._proxy = extHostContext.getProxy(SqlExtHostContext.ExtHostResourceProvider);
}
this._toDispose = [];
}
public $registerResourceProvider(providerMetadata: azdata.ResourceProviderMetadata, handle: number): Thenable<any> {
@@ -55,8 +54,4 @@ export class MainThreadResourceProvider implements MainThreadResourceProviderSha
this._resourceProviderService.unregisterProvider(this._providerMetadata[handle].id);
return Promise.resolve(null);
}
public dispose(): void {
this._toDispose = dispose(this._toDispose);
}
}