From 620d54b64764c3ed03d4914d52c9fef2e1afdac1 Mon Sep 17 00:00:00 2001 From: peter Date: Sun, 1 Jan 2012 17:08:16 +0100 Subject: [PATCH] select word to work meaningfully at the end of line/file --- .../editorActions/SelectWordHandler.java | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/SelectWordHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/SelectWordHandler.java index 7a66d5e749ca..81315c5d8b82 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/SelectWordHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/SelectWordHandler.java @@ -79,7 +79,6 @@ public class SelectWordHandler extends EditorActionHandler { } private static void doAction(Editor editor, PsiFile file) { - CharSequence text = editor.getDocument().getCharsSequence(); if (file instanceof PsiCompiledElement) { file = (PsiFile)((PsiCompiledElement)file).getMirror(); @@ -87,12 +86,7 @@ public class SelectWordHandler extends EditorActionHandler { FeatureUsageTracker.getInstance().triggerFeatureUsed("editing.select.word"); - int caretOffset = editor.getCaretModel().getOffset(); - - if (caretOffset > 0 && caretOffset < editor.getDocument().getTextLength() && - !Character.isJavaIdentifierPart(text.charAt(caretOffset)) && Character.isJavaIdentifierPart(text.charAt(caretOffset - 1))) { - caretOffset--; - } + int caretOffset = adjustCaretOffset(editor); PsiElement element = findElementAt(file, caretOffset); @@ -144,7 +138,7 @@ public class SelectWordHandler extends EditorActionHandler { final Ref minimumRange = new Ref(new TextRange(0, editor.getDocument().getTextLength())); - SelectWordUtil.processRanges(element, text, caretOffset, editor, new Processor() { + SelectWordUtil.processRanges(element, editor.getDocument().getCharsSequence(), caretOffset, editor, new Processor() { @Override public boolean process(TextRange range) { if (range.contains(selectionRange) && !range.equals(selectionRange)) { @@ -161,6 +155,24 @@ public class SelectWordHandler extends EditorActionHandler { editor.getSelectionModel().setSelection(range.getStartOffset(), range.getEndOffset()); } + private static int adjustCaretOffset(Editor editor) { + int caretOffset = editor.getCaretModel().getOffset(); + if (caretOffset == 0) { + return caretOffset; + } + + CharSequence text = editor.getDocument().getCharsSequence(); + char prev = text.charAt(caretOffset - 1); + if (caretOffset < text.length() && + !Character.isJavaIdentifierPart(text.charAt(caretOffset)) && Character.isJavaIdentifierPart(prev)) { + return caretOffset - 1; + } + if ((caretOffset == text.length() || Character.isWhitespace(text.charAt(caretOffset))) && !Character.isWhitespace(prev)) { + return caretOffset - 1; + } + return caretOffset; + } + @Nullable private static PsiElement findElementAt(final PsiFile file, final int caretOffset) { PsiElement elementAt = file.findElementAt(caretOffset);