From 2a554d19e00006e0b497e2a4b52560eaaf4466e9 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Wed, 25 Jan 2012 17:25:58 +0400 Subject: [PATCH] IOOBE --- .../smartPointers/InjectedSelfElementInfo.java | 3 +-- .../injected/InjectedLanguageManagerImpl.java | 18 +++++++++++------- .../tree/injected/MultiHostRegistrarImpl.java | 1 + 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/InjectedSelfElementInfo.java b/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/InjectedSelfElementInfo.java index 1dfa279a8d69..f4a0db2a0ab2 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/InjectedSelfElementInfo.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/InjectedSelfElementInfo.java @@ -86,8 +86,7 @@ class InjectedSelfElementInfo extends SelfElementInfo { PsiDocumentManager documentManager = PsiDocumentManager.getInstance(hostFile.getProject()); Document document = documentManager.getDocument(hostFile); if (document != null && documentManager.isUncommited(document)) { - List documents = InjectedLanguageUtil.getCachedInjectedDocuments(hostFile); - for (DocumentWindow documentWindow : documents) { + for (DocumentWindow documentWindow : InjectedLanguageUtil.getCachedInjectedDocuments(hostFile)) { PsiFile injected = documentManager.getPsiFile(documentWindow); if (injected != null) { visitor.visit(injected, Collections.emptyList()); diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageManagerImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageManagerImpl.java index b99e9eef400c..7abfe33d4845 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageManagerImpl.java @@ -143,7 +143,9 @@ public class InjectedLanguageManagerImpl extends InjectedLanguageManager impleme RangeMarker rangeMarker = documentWindow.getHostRanges()[0]; PsiElement element = rangeMarker.isValid() ? hostPsiFile.findElementAt(rangeMarker.getStartOffset()) : null; if (element == null) { - injected.remove(documentWindow); + synchronized (PsiLock.LOCK) { + injected.remove(documentWindow); + } return true; } final DocumentWindow[] stillInjectedDocument = {null}; @@ -155,12 +157,14 @@ public class InjectedLanguageManagerImpl extends InjectedLanguageManager impleme PsiDocumentManagerImpl.checkConsistency(injectedPsi, stillInjectedDocument[0]); } }); - if (stillInjectedDocument[0] == null) { - injected.remove(documentWindow); - } - else if (stillInjectedDocument[0] != documentWindow) { - injected.remove(documentWindow); - injected.add(stillInjectedDocument[0]); + synchronized (PsiLock.LOCK) { + if (stillInjectedDocument[0] == null) { + injected.remove(documentWindow); + } + else if (stillInjectedDocument[0] != documentWindow) { + injected.remove(documentWindow); + injected.add(stillInjectedDocument[0]); + } } return true; diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/MultiHostRegistrarImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/MultiHostRegistrarImpl.java index d63fc42d3bc1..0c5d2887a08c 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/MultiHostRegistrarImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/MultiHostRegistrarImpl.java @@ -385,6 +385,7 @@ public class MultiHostRegistrarImpl implements MultiHostRegistrar, ModificationT TreeUtil.clearCaches((TreeElement)parsedNode); } + // under com.intellij.psi.PsiLock.LOCK private static PsiFile registerDocument(final DocumentWindowImpl documentWindow, final PsiFile injectedPsi, final Place shreds,