From 06ff544f9d908bdd56eed25993f0eba46c58dd58 Mon Sep 17 00:00:00 2001 From: Peter Gromov Date: Tue, 16 Jun 2020 15:10:51 +0200 Subject: [PATCH] don't async-render invalid lookup elements (EA-231917 - PIEAE) GitOrigin-RevId: f44dfedd7347a697f175adaf60468281b717f2f5 --- .../codeInsight/lookup/impl/AsyncRendering.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/AsyncRendering.java b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/AsyncRendering.java index 69aa6e3dc213..32f822e3bc88 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/AsyncRendering.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/AsyncRendering.java @@ -59,7 +59,14 @@ public class AsyncRendering { Ref> promiseRef = Ref.create(); CancellablePromise promise = ReadAction - .nonBlocking(() -> renderInBackground(element, renderer, promiseRef)) + .nonBlocking(() -> { + if (element.isValid()) { + renderInBackground(element, renderer); + } + synchronized (LAST_COMPUTATION) { + element.replace(LAST_COMPUTATION, promiseRef.get(), null); + } + }) .expireWith(myLookup) .submit(ourExecutor); element.putUserData(LAST_COMPUTATION, promise); @@ -68,7 +75,7 @@ public class AsyncRendering { } @SuppressWarnings({"rawtypes", "unchecked"}) - private void renderInBackground(LookupElement element, LookupElementRenderer renderer, Ref> promiseRef) { + private void renderInBackground(LookupElement element, LookupElementRenderer renderer) { LookupElementPresentation presentation = new LookupElementPresentation(); FileBasedIndex.getInstance().ignoreDumbMode(() -> { renderer.renderElement(element, presentation); @@ -76,10 +83,6 @@ public class AsyncRendering { rememberPresentation(element, presentation); scheduleLookupUpdate(element, presentation); - - synchronized (LAST_COMPUTATION) { - element.replace(LAST_COMPUTATION, promiseRef.get(), null); - } } private void scheduleLookupUpdate(LookupElement element, LookupElementPresentation presentation) {