@@ -15,13 +15,19 @@ import { IRange } from 'vs/editor/common/core/range';
1515import { CancellationToken } from 'vs/base/common/cancellation' ;
1616import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions' ;
1717
18+ interface HandlerData < T > {
19+
20+ extensionId : ExtensionIdentifier ;
21+ provider : T ;
22+ }
23+
1824export class ExtHostComments implements ExtHostCommentsShape {
1925 private static handlePool = 0 ;
2026
2127 private _proxy : MainThreadCommentsShape ;
2228
23- private _documentProviders = new Map < number , vscode . DocumentCommentProvider > ( ) ;
24- private _workspaceProviders = new Map < number , vscode . WorkspaceCommentProvider > ( ) ;
29+ private _documentProviders = new Map < number , HandlerData < vscode . DocumentCommentProvider > > ( ) ;
30+ private _workspaceProviders = new Map < number , HandlerData < vscode . WorkspaceCommentProvider > > ( ) ;
2531
2632 constructor (
2733 mainContext : IMainContext ,
@@ -36,9 +42,12 @@ export class ExtHostComments implements ExtHostCommentsShape {
3642 provider : vscode . WorkspaceCommentProvider
3743 ) : vscode . Disposable {
3844 const handle = ExtHostComments . handlePool ++ ;
39- this . _workspaceProviders . set ( handle , provider ) ;
45+ this . _workspaceProviders . set ( handle , {
46+ extensionId,
47+ provider
48+ } ) ;
4049 this . _proxy . $registerWorkspaceCommentProvider ( handle , extensionId ) ;
41- this . registerListeners ( handle , provider ) ;
50+ this . registerListeners ( handle , extensionId , provider ) ;
4251
4352 return {
4453 dispose : ( ) => {
@@ -49,16 +58,20 @@ export class ExtHostComments implements ExtHostCommentsShape {
4958 }
5059
5160 registerDocumentCommentProvider (
61+ extensionId : ExtensionIdentifier ,
5262 provider : vscode . DocumentCommentProvider
5363 ) : vscode . Disposable {
5464 const handle = ExtHostComments . handlePool ++ ;
55- this . _documentProviders . set ( handle , provider ) ;
65+ this . _documentProviders . set ( handle , {
66+ extensionId,
67+ provider
68+ } ) ;
5669 this . _proxy . $registerDocumentCommentProvider ( handle , {
5770 startDraftLabel : provider . startDraftLabel ,
5871 deleteDraftLabel : provider . deleteDraftLabel ,
5972 finishDraftLabel : provider . finishDraftLabel
6073 } ) ;
61- this . registerListeners ( handle , provider ) ;
74+ this . registerListeners ( handle , extensionId , provider ) ;
6275
6376 return {
6477 dispose : ( ) => {
@@ -76,10 +89,10 @@ export class ExtHostComments implements ExtHostCommentsShape {
7689 return Promise . resolve ( null ) ;
7790 }
7891
79- const provider = this . _documentProviders . get ( handle ) ;
92+ const handlerData = this . _documentProviders . get ( handle ) ;
8093 return asPromise ( ( ) => {
81- return provider . createNewCommentThread ( data . document , ran , text , CancellationToken . None ) ;
82- } ) . then ( commentThread => commentThread ? convertToCommentThread ( provider , commentThread , this . _commandsConverter ) : null ) ;
94+ return handlerData . provider . createNewCommentThread ( data . document , ran , text , CancellationToken . None ) ;
95+ } ) . then ( commentThread => commentThread ? convertToCommentThread ( handlerData . extensionId , handlerData . provider , commentThread , this . _commandsConverter ) : null ) ;
8396 }
8497
8598 $replyToCommentThread ( handle : number , uri : UriComponents , range : IRange , thread : modes . CommentThread , text : string ) : Promise < modes . CommentThread | null > {
@@ -90,10 +103,10 @@ export class ExtHostComments implements ExtHostCommentsShape {
90103 return Promise . resolve ( null ) ;
91104 }
92105
93- const provider = this . _documentProviders . get ( handle ) ;
106+ const handlerData = this . _documentProviders . get ( handle ) ;
94107 return asPromise ( ( ) => {
95- return provider . replyToCommentThread ( data . document , ran , convertFromCommentThread ( thread ) , text , CancellationToken . None ) ;
96- } ) . then ( commentThread => commentThread ? convertToCommentThread ( provider , commentThread , this . _commandsConverter ) : null ) ;
108+ return handlerData . provider . replyToCommentThread ( data . document , ran , convertFromCommentThread ( thread ) , text , CancellationToken . None ) ;
109+ } ) . then ( commentThread => commentThread ? convertToCommentThread ( handlerData . extensionId , handlerData . provider , commentThread , this . _commandsConverter ) : null ) ;
97110 }
98111
99112 $editComment ( handle : number , uri : UriComponents , comment : modes . Comment , text : string ) : Promise < void > {
@@ -103,9 +116,9 @@ export class ExtHostComments implements ExtHostCommentsShape {
103116 throw new Error ( 'Unable to retrieve document from URI' ) ;
104117 }
105118
106- const provider = this . _documentProviders . get ( handle ) ;
119+ const handlerData = this . _documentProviders . get ( handle ) ;
107120 return asPromise ( ( ) => {
108- return provider . editComment ( data . document , convertFromComment ( comment ) , text , CancellationToken . None ) ;
121+ return handlerData . provider . editComment ( data . document , convertFromComment ( comment ) , text , CancellationToken . None ) ;
109122 } ) ;
110123 }
111124
@@ -116,9 +129,9 @@ export class ExtHostComments implements ExtHostCommentsShape {
116129 throw new Error ( 'Unable to retrieve document from URI' ) ;
117130 }
118131
119- const provider = this . _documentProviders . get ( handle ) ;
132+ const handlerData = this . _documentProviders . get ( handle ) ;
120133 return asPromise ( ( ) => {
121- return provider . deleteComment ( data . document , convertFromComment ( comment ) , CancellationToken . None ) ;
134+ return handlerData . provider . deleteComment ( data . document , convertFromComment ( comment ) , CancellationToken . None ) ;
122135 } ) ;
123136 }
124137
@@ -129,9 +142,9 @@ export class ExtHostComments implements ExtHostCommentsShape {
129142 throw new Error ( 'Unable to retrieve document from URI' ) ;
130143 }
131144
132- const provider = this . _documentProviders . get ( handle ) ;
145+ const handlerData = this . _documentProviders . get ( handle ) ;
133146 return asPromise ( ( ) => {
134- return provider . startDraft ( data . document , CancellationToken . None ) ;
147+ return handlerData . provider . startDraft ( data . document , CancellationToken . None ) ;
135148 } ) ;
136149 }
137150
@@ -142,9 +155,9 @@ export class ExtHostComments implements ExtHostCommentsShape {
142155 throw new Error ( 'Unable to retrieve document from URI' ) ;
143156 }
144157
145- const provider = this . _documentProviders . get ( handle ) ;
158+ const handlerData = this . _documentProviders . get ( handle ) ;
146159 return asPromise ( ( ) => {
147- return provider . deleteDraft ( data . document , CancellationToken . None ) ;
160+ return handlerData . provider . deleteDraft ( data . document , CancellationToken . None ) ;
148161 } ) ;
149162 }
150163
@@ -155,9 +168,9 @@ export class ExtHostComments implements ExtHostCommentsShape {
155168 throw new Error ( 'Unable to retrieve document from URI' ) ;
156169 }
157170
158- const provider = this . _documentProviders . get ( handle ) ;
171+ const handlerData = this . _documentProviders . get ( handle ) ;
159172 return asPromise ( ( ) => {
160- return provider . finishDraft ( data . document , CancellationToken . None ) ;
173+ return handlerData . provider . finishDraft ( data . document , CancellationToken . None ) ;
161174 } ) ;
162175 }
163176
@@ -167,48 +180,50 @@ export class ExtHostComments implements ExtHostCommentsShape {
167180 return Promise . resolve ( null ) ;
168181 }
169182
170- const provider = this . _documentProviders . get ( handle ) ;
183+ const handlerData = this . _documentProviders . get ( handle ) ;
171184 return asPromise ( ( ) => {
172- return provider . provideDocumentComments ( data . document , CancellationToken . None ) ;
173- } ) . then ( commentInfo => commentInfo ? convertCommentInfo ( handle , provider , commentInfo , this . _commandsConverter ) : null ) ;
185+ return handlerData . provider . provideDocumentComments ( data . document , CancellationToken . None ) ;
186+ } ) . then ( commentInfo => commentInfo ? convertCommentInfo ( handle , handlerData . extensionId , handlerData . provider , commentInfo , this . _commandsConverter ) : null ) ;
174187 }
175188
176189 $provideWorkspaceComments ( handle : number ) : Promise < modes . CommentThread [ ] | null > {
177- const provider = this . _workspaceProviders . get ( handle ) ;
178- if ( ! provider ) {
190+ const handlerData = this . _workspaceProviders . get ( handle ) ;
191+ if ( ! handlerData ) {
179192 return Promise . resolve ( null ) ;
180193 }
181194
182195 return asPromise ( ( ) => {
183- return provider . provideWorkspaceComments ( CancellationToken . None ) ;
196+ return handlerData . provider . provideWorkspaceComments ( CancellationToken . None ) ;
184197 } ) . then ( comments =>
185- comments . map ( comment => convertToCommentThread ( provider , comment , this . _commandsConverter )
198+ comments . map ( comment => convertToCommentThread ( handlerData . extensionId , handlerData . provider , comment , this . _commandsConverter )
186199 ) ) ;
187200 }
188201
189- private registerListeners ( handle : number , provider : vscode . DocumentCommentProvider | vscode . WorkspaceCommentProvider ) {
202+ private registerListeners ( handle : number , extensionId : ExtensionIdentifier , provider : vscode . DocumentCommentProvider | vscode . WorkspaceCommentProvider ) {
190203 provider . onDidChangeCommentThreads ( event => {
191204
192205 this . _proxy . $onDidCommentThreadsChange ( handle , {
193- changed : event . changed . map ( thread => convertToCommentThread ( provider , thread , this . _commandsConverter ) ) ,
194- added : event . added . map ( thread => convertToCommentThread ( provider , thread , this . _commandsConverter ) ) ,
195- removed : event . removed . map ( thread => convertToCommentThread ( provider , thread , this . _commandsConverter ) ) ,
206+ changed : event . changed . map ( thread => convertToCommentThread ( extensionId , provider , thread , this . _commandsConverter ) ) ,
207+ added : event . added . map ( thread => convertToCommentThread ( extensionId , provider , thread , this . _commandsConverter ) ) ,
208+ removed : event . removed . map ( thread => convertToCommentThread ( extensionId , provider , thread , this . _commandsConverter ) ) ,
196209 draftMode : ! ! ( provider as vscode . DocumentCommentProvider ) . startDraft && ! ! ( provider as vscode . DocumentCommentProvider ) . finishDraft ? ( event . inDraftMode ? modes . DraftMode . InDraft : modes . DraftMode . NotInDraft ) : modes . DraftMode . NotSupported
197210 } ) ;
198211 } ) ;
199212 }
200213}
201214
202- function convertCommentInfo ( owner : number , provider : vscode . DocumentCommentProvider , vscodeCommentInfo : vscode . CommentInfo , commandsConverter : CommandsConverter ) : modes . CommentInfo {
215+ function convertCommentInfo ( owner : number , extensionId : ExtensionIdentifier , provider : vscode . DocumentCommentProvider , vscodeCommentInfo : vscode . CommentInfo , commandsConverter : CommandsConverter ) : modes . CommentInfo {
203216 return {
204- threads : vscodeCommentInfo . threads . map ( x => convertToCommentThread ( provider , x , commandsConverter ) ) ,
217+ extensionId : extensionId . value ,
218+ threads : vscodeCommentInfo . threads . map ( x => convertToCommentThread ( extensionId , provider , x , commandsConverter ) ) ,
205219 commentingRanges : vscodeCommentInfo . commentingRanges ? vscodeCommentInfo . commentingRanges . map ( range => extHostTypeConverter . Range . from ( range ) ) : [ ] ,
206220 draftMode : provider . startDraft && provider . finishDraft ? ( vscodeCommentInfo . inDraftMode ? modes . DraftMode . InDraft : modes . DraftMode . NotInDraft ) : modes . DraftMode . NotSupported
207221 } ;
208222}
209223
210- function convertToCommentThread ( provider : vscode . DocumentCommentProvider | vscode . WorkspaceCommentProvider , vscodeCommentThread : vscode . CommentThread , commandsConverter : CommandsConverter ) : modes . CommentThread {
224+ function convertToCommentThread ( extensionId : ExtensionIdentifier , provider : vscode . DocumentCommentProvider | vscode . WorkspaceCommentProvider , vscodeCommentThread : vscode . CommentThread , commandsConverter : CommandsConverter ) : modes . CommentThread {
211225 return {
226+ extensionId : extensionId . value ,
212227 threadId : vscodeCommentThread . threadId ,
213228 resource : vscodeCommentThread . resource . toString ( ) ,
214229 range : extHostTypeConverter . Range . from ( vscodeCommentThread . range ) ,
0 commit comments