diff --git a/platform/lang-impl/src/com/intellij/semantic/SemServiceImpl.java b/platform/lang-impl/src/com/intellij/semantic/SemServiceImpl.java index 222e154f132a..500c66260ddb 100644 --- a/platform/lang-impl/src/com/intellij/semantic/SemServiceImpl.java +++ b/platform/lang-impl/src/com/intellij/semantic/SemServiceImpl.java @@ -312,8 +312,12 @@ public class SemServiceImpl extends SemService{ private ConcurrentMap> cacheOrGetMap(final PsiElement element, @NotNull PsiElement root) { FileChunk chunk = obtainChunk(root); if (chunk == null) { - chunk = new FileChunk(root); - myCache.putIfAbsent(root, new SoftReference(chunk)); + synchronized (myCache) { + chunk = obtainChunk(root); + if (chunk == null) { + myCache.put(root, new SoftReference(chunk = new FileChunk(root))); + } + } } ConcurrentMap> map = chunk.map.get(element);