@@ -20,9 +20,15 @@ interface PullRequestCommentHandlerInfo {
2020 dispose : ( ) => void ;
2121}
2222
23+ interface PRCommentingRangeProviderInfo {
24+ provider : vscode . CommentingRangeProvider2 ;
25+ refCount : number ;
26+ dispose : ( ) => void ;
27+ }
28+
2329export class PRCommentControllerRegistry extends Disposable implements vscode . CommentingRangeProvider , CommentReactionHandler {
2430 private _prCommentHandlers : { [ key : number ] : PullRequestCommentHandlerInfo } = { } ;
25- private _prCommentingRangeProviders : { [ key : number ] : vscode . CommentingRangeProvider2 } = { } ;
31+ private _prCommentingRangeProviders : { [ key : number ] : PRCommentingRangeProviderInfo } = { } ;
2632 private readonly _activeChangeListeners : Map < FolderRepositoryManager , vscode . Disposable > = new Map ( ) ;
2733 public readonly resourceHints = { schemes : [ Schemes . Pr ] } ;
2834
@@ -40,8 +46,8 @@ export class PRCommentControllerRegistry extends Disposable implements vscode.Co
4046 return ;
4147 }
4248
43- const provideCommentingRanges = this . _prCommentingRangeProviders [ params . prNumber ] . provideCommentingRanges . bind (
44- this . _prCommentingRangeProviders [ params . prNumber ] ,
49+ const provideCommentingRanges = this . _prCommentingRangeProviders [ params . prNumber ] . provider . provideCommentingRanges . bind (
50+ this . _prCommentingRangeProviders [ params . prNumber ] . provider ,
4551 ) ;
4652
4753 return provideCommentingRanges ( document , token ) ;
@@ -108,13 +114,27 @@ export class PRCommentControllerRegistry extends Disposable implements vscode.Co
108114 }
109115
110116 public registerCommentingRangeProvider ( prNumber : number , provider : vscode . CommentingRangeProvider2 ) : vscode . Disposable {
111- this . _prCommentingRangeProviders [ prNumber ] = provider ;
117+ if ( this . _prCommentingRangeProviders [ prNumber ] ) {
118+ this . _prCommentingRangeProviders [ prNumber ] . refCount += 1 ;
119+ return this . _prCommentingRangeProviders [ prNumber ] ;
120+ }
112121
113- return {
122+ this . _prCommentingRangeProviders [ prNumber ] = {
123+ provider,
124+ refCount : 1 ,
114125 dispose : ( ) => {
115- delete this . _prCommentingRangeProviders [ prNumber ] ;
126+ if ( ! this . _prCommentingRangeProviders [ prNumber ] ) {
127+ return ;
128+ }
129+
130+ this . _prCommentingRangeProviders [ prNumber ] . refCount -= 1 ;
131+ if ( this . _prCommentingRangeProviders [ prNumber ] . refCount === 0 ) {
132+ delete this . _prCommentingRangeProviders [ prNumber ] ;
133+ }
116134 }
117135 } ;
136+
137+ return this . _prCommentingRangeProviders [ prNumber ] ;
118138 }
119139
120140 override dispose ( ) {
0 commit comments