From 21c02a1e1b631336e030ce4d13b50fb55e8c3fff Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 9 Mar 2011 19:36:55 +0100 Subject: [PATCH] EA-26030 reading from offset map may change it --- .../codeInsight/completion/CodeCompletionHandlerBase.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java index 5e2ea8902ae3..2d837ed140a3 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java @@ -64,6 +64,7 @@ import com.intellij.util.concurrency.Semaphore; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.concurrent.atomic.AtomicReference; @@ -497,7 +498,7 @@ public class CodeCompletionHandlerBase implements CodeInsightActionHandler { final OffsetMap hostMap = new OffsetMap(hostEditor.getDocument()); final OffsetMap original = initContext.getOffsetMap(); - for (final OffsetKey key : original.keySet()) { + for (final OffsetKey key : new ArrayList(original.keySet())) { hostMap.addOffset(key, injectedLanguageManager.injectedToHost(fileCopy, original.getOffset(key))); } @@ -519,7 +520,7 @@ public class CodeCompletionHandlerBase implements CodeInsightActionHandler { EditorWindow injectedEditor = (EditorWindow)InjectedLanguageUtil.getEditorForInjectedLanguageNoCommit(hostEditor, hostFile, hostStartOffset); assert injected == injectedEditor.getInjectedFile(); final OffsetMap map = new OffsetMap(injectedEditor.getDocument()); - for (final OffsetKey key : hostMap.keySet()) { + for (final OffsetKey key : new ArrayList(hostMap.keySet())) { map.addOffset(key, injectedEditor.logicalPositionToOffset(injectedEditor.hostToInjected(hostEditor.offsetToLogicalPosition(hostMap.getOffset(key))))); } context = new CompletionContext(initContext.getProject(), injectedEditor, injected, map);