From 641344ec6870781bb129a9c763b788902a34af80 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Wed, 27 Jun 2018 12:40:01 +0200 Subject: [PATCH] fix #52985 --- .../contrib/documentSymbols/outlineModel.ts | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/vs/editor/contrib/documentSymbols/outlineModel.ts b/src/vs/editor/contrib/documentSymbols/outlineModel.ts index 91c634a3bd1..f448469a22f 100644 --- a/src/vs/editor/contrib/documentSymbols/outlineModel.ts +++ b/src/vs/editor/contrib/documentSymbols/outlineModel.ts @@ -197,10 +197,33 @@ export class OutlineGroup extends TreeElement { export class OutlineModel extends TreeElement { private static readonly _requests = new LRUCache, model: OutlineModel }>(9, .75); + private static readonly _keys = new class { + + private _counter = 1; + private _data = new WeakMap(); + + for(textModel: ITextModel): string { + return `${textModel.id}/${textModel.getVersionId()}/${this._hash(DocumentSymbolProviderRegistry.all(textModel))}`; + } + + private _hash(providers: DocumentSymbolProvider[]): string { + let result = ''; + for (const provider of providers) { + let n = this._data.get(provider); + if (typeof n === 'undefined') { + n = this._counter++; + this._data.set(provider, n); + } + result += n; + } + return result; + } + }; + static create(textModel: ITextModel): TPromise { - let key = `${textModel.id}/${textModel.getVersionId()}/${DocumentSymbolProviderRegistry.all(textModel).length}`; + let key = this._keys.for(textModel); let data = OutlineModel._requests.get(key); if (!data) { -- GitLab