55
66import * as vscode from 'vscode' ;
77import { APIState , PublishEvent } from '../@types/git' ;
8+ import { Disposable } from '../common/lifecycle' ;
89import Logger from '../common/logger' ;
910import { TernarySearchTree } from '../common/utils' ;
1011import { API , IGit , PostCommitCommandsProvider , Repository , ReviewerCommentsProvider , TitleAndDescriptionProvider } from './api' ;
@@ -72,7 +73,7 @@ export const enum Status {
7273 BOTH_MODIFIED ,
7374}
7475
75- export class GitApiImpl implements API , IGit , vscode . Disposable {
76+ export class GitApiImpl extends Disposable implements API , IGit {
7677 private static _handlePool : number = 0 ;
7778 private _providers = new Map < number , IGit > ( ) ;
7879
@@ -111,11 +112,6 @@ export class GitApiImpl implements API, IGit, vscode.Disposable {
111112 private _onDidPublish = new vscode . EventEmitter < PublishEvent > ( ) ;
112113 readonly onDidPublish : vscode . Event < PublishEvent > = this . _onDidPublish . event ;
113114
114- private _disposables : vscode . Disposable [ ] ;
115- constructor ( ) {
116- this . _disposables = [ ] ;
117- }
118-
119115 private _updateReposContext ( ) {
120116 const reposCount = Array . from ( this . _providers . values ( ) ) . reduce ( ( prev , current ) => {
121117 return prev + current . repositories . length ;
@@ -128,17 +124,17 @@ export class GitApiImpl implements API, IGit, vscode.Disposable {
128124 const handle = this . _nextHandle ( ) ;
129125 this . _providers . set ( handle , provider ) ;
130126
131- this . _disposables . push ( provider . onDidCloseRepository ( e => this . _onDidCloseRepository . fire ( e ) ) ) ;
132- this . _disposables . push ( provider . onDidOpenRepository ( e => {
127+ this . _register ( provider . onDidCloseRepository ( e => this . _onDidCloseRepository . fire ( e ) ) ) ;
128+ this . _register ( provider . onDidOpenRepository ( e => {
133129 Logger . appendLine ( `Repository ${ e . rootUri } has been opened` ) ;
134130 this . _updateReposContext ( ) ;
135131 this . _onDidOpenRepository . fire ( e ) ;
136132 } ) ) ;
137133 if ( provider . onDidChangeState ) {
138- this . _disposables . push ( provider . onDidChangeState ( e => this . _onDidChangeState . fire ( e ) ) ) ;
134+ this . _register ( provider . onDidChangeState ( e => this . _onDidChangeState . fire ( e ) ) ) ;
139135 }
140136 if ( provider . onDidPublish ) {
141- this . _disposables . push ( provider . onDidPublish ( e => this . _onDidPublish . fire ( e ) ) ) ;
137+ this . _register ( provider . onDidPublish ( e => this . _onDidPublish . fire ( e ) ) ) ;
142138 }
143139
144140 this . _updateReposContext ( ) ;
@@ -188,18 +184,13 @@ export class GitApiImpl implements API, IGit, vscode.Disposable {
188184 return GitApiImpl . _handlePool ++ ;
189185 }
190186
191- dispose ( ) {
192- this . _disposables . forEach ( disposable => disposable . dispose ( ) ) ;
193- }
194-
195187 private _titleAndDescriptionProviders : Set < { title : string , provider : TitleAndDescriptionProvider } > = new Set ( ) ;
196188 registerTitleAndDescriptionProvider ( title : string , provider : TitleAndDescriptionProvider ) : vscode . Disposable {
197189 const registeredValue = { title, provider } ;
198190 this . _titleAndDescriptionProviders . add ( registeredValue ) ;
199- const disposable = {
191+ const disposable = this . _register ( {
200192 dispose : ( ) => this . _titleAndDescriptionProviders . delete ( registeredValue )
201- } ;
202- this . _disposables . push ( disposable ) ;
193+ } ) ;
203194 return disposable ;
204195 }
205196
@@ -219,10 +210,9 @@ export class GitApiImpl implements API, IGit, vscode.Disposable {
219210 registerReviewerCommentsProvider ( title : string , provider : ReviewerCommentsProvider ) : vscode . Disposable {
220211 const registeredValue = { title, provider } ;
221212 this . _reviewerCommentsProviders . add ( registeredValue ) ;
222- const disposable = {
213+ const disposable = this . _register ( {
223214 dispose : ( ) => this . _reviewerCommentsProviders . delete ( registeredValue )
224- } ;
225- this . _disposables . push ( disposable ) ;
215+ } ) ;
226216 return disposable ;
227217 }
228218
0 commit comments