diff --git a/src/vs/workbench/api/electron-browser/mainThreadComments.ts b/src/vs/workbench/api/electron-browser/mainThreadComments.ts index 1af1b8efdec..80b9b55cc1c 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadComments.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadComments.ts @@ -93,6 +93,7 @@ export class MainThreadComments extends Disposable implements MainThreadComments $unregisterDocumentCommentProvider(handle: number): void { this._documentProviders.delete(handle); + this._commentService.unregisterDataProvider(handle); } $unregisterWorkspaceCommentProvider(handle: number): void { diff --git a/src/vs/workbench/parts/comments/electron-browser/commentsEditorContribution.ts b/src/vs/workbench/parts/comments/electron-browser/commentsEditorContribution.ts index fab9393474f..71da3bd7c30 100644 --- a/src/vs/workbench/parts/comments/electron-browser/commentsEditorContribution.ts +++ b/src/vs/workbench/parts/comments/electron-browser/commentsEditorContribution.ts @@ -127,7 +127,7 @@ export class ReviewController implements IEditorContribution { this.globalToDispose.push(this.commentService.onDidSetResourceCommentInfos(e => { const editorURI = this.editor && this.editor.getModel() && this.editor.getModel().uri; if (editorURI && editorURI.toString() === e.resource.toString()) { - this.setComments(e.commentInfos); + this.setComments(e.commentInfos.filter(commentInfo => commentInfo !== null)); } })); @@ -136,8 +136,9 @@ export class ReviewController implements IEditorContribution { if (editorURI) { - let commentInfos = await this.commentService.getComments(editorURI); - this.setComments(commentInfos); + this.commentService.getComments(editorURI).then(commentInfos => { + this.setComments(commentInfos.filter(commentInfo => commentInfo !== null)); + }, error => console.log(error)); } })); diff --git a/src/vs/workbench/services/comments/electron-browser/commentService.ts b/src/vs/workbench/services/comments/electron-browser/commentService.ts index 06a7a739f21..d3a13b5efcf 100644 --- a/src/vs/workbench/services/comments/electron-browser/commentService.ts +++ b/src/vs/workbench/services/comments/electron-browser/commentService.ts @@ -32,6 +32,7 @@ export interface ICommentService { setAllComments(commentsByResource: CommentThread[]): void; removeAllComments(): void; registerDataProvider(owner: number, commentProvider: DocumentCommentProvider | WorkspaceCommentProvider): void; + unregisterDataProvider(owner: number): void; updateComments(event: CommentThreadChangedEvent): void; createNewCommenThread(owner: number, resource: URI, range: Range, text: string): TPromise; replyToCommentThread(owner: number, resource: URI, range: Range, thread: CommentThread, text: string): TPromise; @@ -43,6 +44,7 @@ export class CommentService extends Disposable implements ICommentService { private readonly _onDidSetDataProvider: Emitter = this._register(new Emitter()); readonly onDidSetDataProvider: Event = this._onDidSetDataProvider.event; + private readonly _onDidSetResourceCommentInfos: Emitter = this._register(new Emitter()); readonly onDidSetResourceCommentInfos: Event = this._onDidSetResourceCommentInfos.event; @@ -53,6 +55,7 @@ export class CommentService extends Disposable implements ICommentService { readonly onDidUpdateCommentThreads: Event = this._onDidUpdateCommentThreads.event; private _commentProviders = new Map(); + constructor() { super(); } @@ -74,32 +77,38 @@ export class CommentService extends Disposable implements ICommentService { this._onDidSetDataProvider.fire(); } + unregisterDataProvider(owner: number): void { + this._commentProviders.delete(owner); + } + updateComments(event: CommentThreadChangedEvent): void { this._onDidUpdateCommentThreads.fire(event); } createNewCommenThread(owner: number, resource: URI, range: Range, text: string): TPromise { - let commentProvider = this._commentProviders.get(owner); + const commentProvider = this._commentProviders.get(owner); if (commentProvider) { return asWinJsPromise(token => commentProvider.createNewCommentThread(resource, range, text, token)); } + return null; } replyToCommentThread(owner: number, resource: URI, range: Range, thread: CommentThread, text: string): TPromise { - let commentProvider = this._commentProviders.get(owner); + const commentProvider = this._commentProviders.get(owner); if (commentProvider) { return asWinJsPromise(token => commentProvider.replyToCommentThread(resource, range, thread, text, token)); } + return null; } async getComments(resource: URI): TPromise { const result = []; for (const handle of keys(this._commentProviders)) { - let provider = this._commentProviders.get(handle); + const provider = this._commentProviders.get(handle); if ((provider).provideDocumentComments) { result.push(asWinJsPromise(token => (provider).provideDocumentComments(resource, token))); }