java: cache findClass result: avoid race

This commit is contained in:
peter
2015-04-01 15:56:22 +02:00
parent 607e41860c
commit a192f4daa2
@@ -52,7 +52,7 @@ public class JavaPsiFacadeImpl extends JavaPsiFacadeEx {
private volatile PsiElementFinder[] myElementFinders;
private final PsiConstantEvaluationHelper myConstantEvaluationHelper;
private volatile SoftReference<ConcurrentMap<String, PsiPackage>> myPackageCache;
private final Map<String, Map<GlobalSearchScope, PsiClass>> myClassCache = ContainerUtil.createConcurrentSoftMap();
private final ConcurrentMap<String, Map<GlobalSearchScope, PsiClass>> myClassCache = ContainerUtil.createConcurrentSoftMap();
private final Project myProject;
private final JavaFileManager myFileManager;
@@ -92,7 +92,7 @@ public class JavaPsiFacadeImpl extends JavaPsiFacadeEx {
Map<GlobalSearchScope, PsiClass> 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) {