diff options
Diffstat (limited to 'platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageUtil.java')
-rw-r--r-- | platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageUtil.java | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageUtil.java b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageUtil.java index f2863469d614..27089fa70e91 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageUtil.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageUtil.java @@ -20,6 +20,7 @@ import com.intellij.injected.editor.*; import com.intellij.lang.Language; import com.intellij.lang.LanguageUtil; import com.intellij.lang.injection.InjectedLanguageManager; +import com.intellij.openapi.editor.Caret; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.SelectionModel; @@ -158,6 +159,22 @@ public class InjectedLanguageUtil { return getEditorForInjectedLanguageNoCommit(editor, file, offset); } + public static Caret getCaretForInjectedLanguageNoCommit(@Nullable Caret caret, @Nullable PsiFile file) { + if (caret == null || file == null || caret instanceof InjectedCaret) return caret; + + PsiFile injectedFile = findInjectedPsiNoCommit(file, caret.getOffset()); + Editor injectedEditor = getInjectedEditorForInjectedFile(caret.getEditor(), injectedFile); + if (!(injectedEditor instanceof EditorWindow)) { + return caret; + } + for (Caret injectedCaret : injectedEditor.getCaretModel().getAllCarets()) { + if (((InjectedCaret)injectedCaret).getDelegate() == caret) { + return injectedCaret; + } + } + return null; + } + public static Editor getEditorForInjectedLanguageNoCommit(@Nullable Editor editor, @Nullable PsiFile file, final int offset) { if (editor == null || file == null || editor instanceof EditorWindow) return editor; PsiFile injectedFile = findInjectedPsiNoCommit(file, offset); |