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 a91a2709c80c..aa32ce31a646 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java @@ -628,7 +628,7 @@ public class CodeCompletionHandlerBase { @Override public void perform(Caret caret) { CompletionAssertions.WatchingInsertionContext currentContext = insertItem(indicator, item, completionChar, items, update, editor, caret.getOffset(), caret.getOffset() + idEndOffsetDelta); - if (caret.getVisualPosition().equals(editor.getCaretModel().getPrimaryCaret().getVisualPosition())) { + if (caret == editor.getCaretModel().getPrimaryCaret()) { contextRef.set(currentContext); } } diff --git a/platform/lang-impl/src/com/intellij/injected/editor/CaretModelWindow.java b/platform/lang-impl/src/com/intellij/injected/editor/CaretModelWindow.java index 85f92f8737cd..225bb0fd374c 100644 --- a/platform/lang-impl/src/com/intellij/injected/editor/CaretModelWindow.java +++ b/platform/lang-impl/src/com/intellij/injected/editor/CaretModelWindow.java @@ -26,9 +26,7 @@ import com.intellij.openapi.util.TextRange; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; +import java.util.*; /** * @author Alexey @@ -37,6 +35,7 @@ public class CaretModelWindow implements CaretModel { private final CaretModel myDelegate; private final EditorEx myHostEditor; private final EditorWindow myEditorWindow; + private final Map myInjectedCaretMap = new WeakHashMap(); public CaretModelWindow(CaretModel delegate, EditorWindow editorWindow) { myDelegate = delegate; @@ -219,7 +218,17 @@ public class CaretModelWindow implements CaretModel { } private InjectedCaret createInjectedCaret(Caret caret) { - return caret == null ? null : new InjectedCaret(myEditorWindow, caret); + if (caret == null) { + return null; + } + synchronized (myInjectedCaretMap) { + InjectedCaret injectedCaret = myInjectedCaretMap.get(caret); + if (injectedCaret == null) { + injectedCaret = new InjectedCaret(myEditorWindow, caret); + myInjectedCaretMap.put(caret, injectedCaret); + } + return injectedCaret; + } } @Override