diff --git a/src/vs/workbench/api/electron-browser/mainThreadComments.ts b/src/vs/workbench/api/electron-browser/mainThreadComments.ts index 4b21dfb20271945da3512b82225d2f707f6cd684..369ec18bbfb48200f809735e7038565ff1636459 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadComments.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadComments.ts @@ -451,6 +451,13 @@ export class MainThreadComments extends Disposable implements MainThreadComments this._commentService.setWorkspaceComments(String(handle), []); } + $unregisterCommentController(handle: number): void { + const providerId = this._handlers.get(handle); + this._commentService.unregisterCommentController(providerId); + this._handlers.delete(handle); + this._commentControllers.delete(handle); + } + $updateCommentControllerFeatures(handle: number, features: CommentProviderFeatures): void { let provider = this._commentControllers.get(handle); diff --git a/src/vs/workbench/api/node/extHost.protocol.ts b/src/vs/workbench/api/node/extHost.protocol.ts index cc56e4a101b76d9ebc7edb18af29743f5a052494..2ba6a6edd939c5102e8c7182e1d1a8f4fa6c91fd 100644 --- a/src/vs/workbench/api/node/extHost.protocol.ts +++ b/src/vs/workbench/api/node/extHost.protocol.ts @@ -121,6 +121,7 @@ export interface CommentProviderFeatures { export interface MainThreadCommentsShape extends IDisposable { $registerCommentController(handle: number, id: string, label: string): void; + $unregisterCommentController(handle: number): void; $updateCommentControllerFeatures(handle: number, features: CommentProviderFeatures): void; $createCommentThread(handle: number, commentThreadHandle: number, threadId: string, resource: UriComponents, range: IRange, comments: modes.Comment[], acceptInputCommand: modes.Command | undefined, additionalCommands: modes.Command[], collapseState: modes.CommentThreadCollapsibleState): modes.CommentThread2 | undefined; $deleteCommentThread(handle: number, commentThreadHandle: number): void; diff --git a/src/vs/workbench/api/node/extHostComments.ts b/src/vs/workbench/api/node/extHostComments.ts index 9f400a165b8ee1b425cade9c4424ca9b1f35997d..6d4247bdea3aa9c696ae337f35eae7ffaa9439de 100644 --- a/src/vs/workbench/api/node/extHostComments.ts +++ b/src/vs/workbench/api/node/extHostComments.ts @@ -564,6 +564,8 @@ class ExtHostCommentController implements vscode.CommentController { this._threads.forEach(value => { value.dispose(); }); + + this._proxy.$unregisterCommentController(this.handle); } } diff --git a/src/vs/workbench/contrib/comments/electron-browser/commentService.ts b/src/vs/workbench/contrib/comments/electron-browser/commentService.ts index 61db44b3a09d8ef97efe8af1d699e51f44445d74..582e8adbbc83d58beb017760e95b696827dc3bf0 100644 --- a/src/vs/workbench/contrib/comments/electron-browser/commentService.ts +++ b/src/vs/workbench/contrib/comments/electron-browser/commentService.ts @@ -45,6 +45,7 @@ export interface ICommentService { setWorkspaceComments(owner: string, commentsByResource: CommentThread[]): void; removeWorkspaceComments(owner: string): void; registerCommentController(owner: string, commentControl: MainThreadCommentController): void; + unregisterCommentController(owner: string): void; registerDataProvider(owner: string, commentProvider: DocumentCommentProvider): void; unregisterDataProvider(owner: string): void; updateComments(ownerId: string, event: CommentThreadChangedEvent): void; @@ -133,6 +134,11 @@ export class CommentService extends Disposable implements ICommentService { this._onDidSetDataProvider.fire(); } + unregisterCommentController(owner: string): void { + this._commentControls.delete(owner); + this._onDidDeleteDataProvider.fire(owner); + } + registerDataProvider(owner: string, commentProvider: DocumentCommentProvider): void { this._commentProviders.set(owner, commentProvider); this._onDidSetDataProvider.fire();