From a192f4daa2fa289af1eff02b5f72cbe1b3cb1720 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 1 Apr 2015 15:56:22 +0200 Subject: [PATCH] java: cache findClass result: avoid race --- .../src/com/intellij/psi/impl/JavaPsiFacadeImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/JavaPsiFacadeImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/JavaPsiFacadeImpl.java index f1f381fcb8b5..4fde34c89b1e 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/JavaPsiFacadeImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/JavaPsiFacadeImpl.java @@ -52,7 +52,7 @@ public class JavaPsiFacadeImpl extends JavaPsiFacadeEx { private volatile PsiElementFinder[] myElementFinders; private final PsiConstantEvaluationHelper myConstantEvaluationHelper; private volatile SoftReference> myPackageCache; - private final Map> myClassCache = ContainerUtil.createConcurrentSoftMap(); + private final ConcurrentMap> myClassCache = ContainerUtil.createConcurrentSoftMap(); private final Project myProject; private final JavaFileManager myFileManager; @@ -92,7 +92,7 @@ public class JavaPsiFacadeImpl extends JavaPsiFacadeEx { Map map = myClassCache.get(qualifiedName); if (map == null) { map = ContainerUtil.createConcurrentWeakKeyWeakValueMap(); - myClassCache.put(qualifiedName, map); + map = ConcurrencyUtil.cacheOrGet(myClassCache, qualifiedName, map); } PsiClass result = map.get(scope); if (result == null) {