From bacfc555ec14448b33fccac53d8fc78081f9f222 Mon Sep 17 00:00:00 2001 From: anna Date: Fri, 11 Mar 2011 16:39:32 +0100 Subject: [PATCH] context languages: when selected - move through selection to get non white space --- .../impl/text/TextEditorPsiDataProvider.java | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/text/TextEditorPsiDataProvider.java b/platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/text/TextEditorPsiDataProvider.java index a4d2f5012b6f..0238e016a128 100644 --- a/platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/text/TextEditorPsiDataProvider.java +++ b/platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/text/TextEditorPsiDataProvider.java @@ -117,18 +117,29 @@ public class TextEditorPsiDataProvider implements EditorDataProvider { } private static Language getLanguageAtCurrentPositionInEditor(final Editor editor, final PsiFile psiFile) { - int mostProbablyCorrectLanguageOffset = getOffset(editor); + final SelectionModel selectionModel = editor.getSelectionModel(); + int caretOffset = editor.getCaretModel().getOffset(); + int mostProbablyCorrectLanguageOffset = caretOffset == selectionModel.getSelectionStart() || + caretOffset == selectionModel.getSelectionEnd() + ? selectionModel.getSelectionStart() + : caretOffset; + if (selectionModel.hasSelection()) { + return getLanguageAtOffset(psiFile, mostProbablyCorrectLanguageOffset, selectionModel.getSelectionEnd()); + } return PsiUtilBase.getLanguageAtOffset(psiFile, mostProbablyCorrectLanguageOffset); } - private static int getOffset(Editor editor) { - final SelectionModel selectionModel = editor.getSelectionModel(); - int caretOffset = editor.getCaretModel().getOffset(); - return caretOffset == selectionModel.getSelectionStart() || - caretOffset == selectionModel.getSelectionEnd() - ? selectionModel.getSelectionStart() - : caretOffset; + private static Language getLanguageAtOffset(PsiFile psiFile, int mostProbablyCorrectLanguageOffset, int end) { + final PsiElement elt = psiFile.findElementAt(mostProbablyCorrectLanguageOffset); + if (elt == null) return psiFile.getLanguage(); + if (elt instanceof PsiWhiteSpace) { + final int incremented = elt.getTextRange().getEndOffset() + 1; + if (incremented <= end) { + return getLanguageAtOffset(psiFile, incremented, end); + } + } + return PsiUtilBase.findLanguageFromElement(elt); } @Nullable