From 94acaef890eefb60f24ea3c8e028b4bf69a9ef8b Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Wed, 7 Sep 2016 10:28:26 +0200 Subject: [PATCH] dispose commands --- src/vs/workbench/api/node/extHostLanguageFeatures.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/vs/workbench/api/node/extHostLanguageFeatures.ts b/src/vs/workbench/api/node/extHostLanguageFeatures.ts index 2ec8654b624..990d4ce5c42 100644 --- a/src/vs/workbench/api/node/extHostLanguageFeatures.ts +++ b/src/vs/workbench/api/node/extHostLanguageFeatures.ts @@ -503,6 +503,7 @@ class SuggestAdapter { private _documents: ExtHostDocuments; private _heapMonitor: ExtHostHeapMonitor; private _provider: vscode.CompletionItemProvider; + private _disposables: { [id: number]: IDisposable[] } = []; constructor(documents: ExtHostDocuments, heapMonitor: ExtHostHeapMonitor, provider: vscode.CompletionItemProvider) { this._documents = documents; @@ -544,9 +545,8 @@ class SuggestAdapter { const item = list.items[i]; const disposables: IDisposable[] = []; const suggestion = TypeConverters.Suggest.from(item, disposables); - - // assign identifier to suggestion - const id = this._heapMonitor.keep(item, () => dispose(disposables)); + const id = this._heapMonitor.keep(item, () => dispose(this._disposables[id])); + this._disposables[id] = disposables; ObjectIdentifier.mixin(suggestion, id); if (item.textEdit) { @@ -585,12 +585,13 @@ class SuggestAdapter { return TPromise.as(suggestion); } - const item = this._heapMonitor.get(ObjectIdentifier.get(suggestion)); + const id = ObjectIdentifier.get(suggestion); + const item = this._heapMonitor.get(id); if (!item) { return TPromise.as(suggestion); } return asWinJsPromise(token => this._provider.resolveCompletionItem(item, token)).then(resolvedItem => { - return TypeConverters.Suggest.from(resolvedItem || item, []); + return TypeConverters.Suggest.from(resolvedItem || item, this._disposables[id]); }); } }