From 3a224a11cefbe1e529d5d344561587ed2ef598cd Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 4 Nov 2013 17:43:07 +0100 Subject: [PATCH] just consider dash a part of word for hippie completion (IDEA-115762) --- .../completion/HippieCompletionTest.groovy | 15 +++++++++++ .../actions/HippieWordCompletionHandler.java | 25 +++++++------------ 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/HippieCompletionTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/HippieCompletionTest.groovy index 16ca708560a6..ab9ea13a425d 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/HippieCompletionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/HippieCompletionTest.groovy @@ -113,6 +113,21 @@ class Foo { ''' } + public void "test complete variable name in string literal"() { + myFixture.configureByText "a.java", ''' +class Xoo { + String foobar = "foo"; +} +''' + complete() + myFixture.checkResult ''' +class Xoo { + String foobar = "foobar"; +} +''' + + } + private void complete() { myFixture.performEditorAction(IdeActions.ACTION_HIPPIE_COMPLETION) } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/actions/HippieWordCompletionHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/actions/HippieWordCompletionHandler.java index 4f273bb1cb90..19d4804efbe5 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/actions/HippieWordCompletionHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/actions/HippieWordCompletionHandler.java @@ -44,7 +44,6 @@ import java.util.*; */ public class HippieWordCompletionHandler implements CodeInsightActionHandler { private static final Key KEY_STATE = new Key("HIPPIE_COMPLETION_STATE"); - private static final String WHITESPACE_CHARS = " \t\n"; private final boolean myForward; public HippieWordCompletionHandler(boolean forward) { @@ -188,7 +187,7 @@ public class HippieWordCompletionHandler implements CodeInsightActionHandler { } } - private static boolean isWordLike(CharSequence seq, int start, int end) { + private static boolean containsLetters(CharSequence seq, int start, int end) { for (int i = start; i < end; i++) { if (Character.isLetter(seq.charAt(i))) { return true; @@ -256,7 +255,7 @@ public class HippieWordCompletionHandler implements CodeInsightActionHandler { @Override public boolean processToken(int start, int end) { if ((start > caretOffset || end < caretOffset) && //skip prefix itself - end - start > matcher.getPrefix().length() && isWordLike(chars, start, end)) { + end - start > matcher.getPrefix().length()) { final String word = chars.subSequence(start, end).toString(); if (matcher.isStartMatch(word)) { CompletionVariant v = new CompletionVariant(editor, word, start); @@ -280,25 +279,15 @@ public class HippieWordCompletionHandler implements CodeInsightActionHandler { while (!iterator.atEnd()) { int start = iterator.getStart(); int end = iterator.getEnd(); - if (StringUtil.indexOfAny(chars, WHITESPACE_CHARS, start, end) < 0) { - //a single token without whitespace, consider it one word, even if it's an identifier with '-' inside - if (isWordLike(chars, start, end) && !processor.processToken(start, end)) { - return; - } - iterator.advance(); - continue; - } - // a token with whitespace inside (a string literal or comment) - // use the default java-identifier notion of word while (start < end) { int wordStart = start; - while (wordStart < end && !Character.isJavaIdentifierPart(chars.charAt(wordStart))) wordStart++; + while (wordStart < end && !isWordPart(chars.charAt(wordStart))) wordStart++; int wordEnd = wordStart; - while (wordEnd < end && Character.isJavaIdentifierPart(chars.charAt(wordEnd))) wordEnd++; + while (wordEnd < end && isWordPart(chars.charAt(wordEnd))) wordEnd++; - if (!processor.processToken(wordStart, wordEnd)) { + if (wordEnd > wordStart && containsLetters(chars, wordStart, wordEnd) && !processor.processToken(wordStart, wordEnd)) { return; } start = wordEnd + 1; @@ -307,6 +296,10 @@ public class HippieWordCompletionHandler implements CodeInsightActionHandler { } } + private static boolean isWordPart(final char c) { + return Character.isJavaIdentifierPart(c) || c == '-' || c == '*' ; + } + private static CompletionData computeData(final Editor editor, final CharSequence charsSequence) { final int offset = editor.getCaretModel().getOffset();