From 4c58634a4b95d06eeccadcaf1a0e95bfd79e2215 Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 8 Jun 2017 15:15:10 +0200 Subject: [PATCH] more thoroughly ensure ResolveCache caches valid results --- .../psi/impl/source/resolve/ResolveCache.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/platform/core-impl/src/com/intellij/psi/impl/source/resolve/ResolveCache.java b/platform/core-impl/src/com/intellij/psi/impl/source/resolve/ResolveCache.java index 592131717c50..eb4f7ee107c9 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/source/resolve/ResolveCache.java +++ b/platform/core-impl/src/com/intellij/psi/impl/source/resolve/ResolveCache.java @@ -18,7 +18,6 @@ package com.intellij.psi.impl.source.resolve; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.components.ServiceManager; -import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.progress.ProgressIndicatorProvider; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Pair; @@ -143,6 +142,12 @@ public class ResolveCache { if (result instanceof ResolveResult) { ensureValidPsi((ResolveResult)result); } + else if (result instanceof ResolveResult[]) { + ensureValidResults((ResolveResult[])result); + } + else if (result instanceof PsiElement) { + PsiUtilCore.ensureValid((PsiElement)result); + } if (stamp.mayCacheNow()) { cache(ref, map, result); @@ -187,9 +192,7 @@ public class ResolveCache { result = needToPreventRecursion ? myGuard.doPreventingRecursion(Pair.create(ref, incompleteCode), true, () -> resolver.resolve(ref, containingFile, incompleteCode)) : resolver.resolve(ref, containingFile, incompleteCode); if (result != null) { - for (ResolveResult resolveResult : result) { - ensureValidPsi(resolveResult); - } + ensureValidResults(result); } if (stamp.mayCacheNow()) { @@ -198,6 +201,12 @@ public class ResolveCache { return result == null ? ResolveResult.EMPTY_ARRAY : result; } + private static void ensureValidResults(ResolveResult[] result) { + for (ResolveResult resolveResult : result) { + ensureValidPsi(resolveResult); + } + } + private static void ensureValidPsi(ResolveResult resolveResult) { PsiElement element = resolveResult.getElement(); if (element != null) {