From 67465a724ebf9b81ed797b8473674a40f5aa5aed Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 1 Aug 2013 17:54:34 +0200 Subject: [PATCH] IDEA-104677 Selected completion item isn't inserted by typing a colon --- .../codeInsight/completion/JavaCharFilter.java | 15 ++++++++++++--- ...tionTest.java => Normal8CompletionTest.groovy} | 11 +++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) rename java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/{Normal8CompletionTest.java => Normal8CompletionTest.groovy} (84%) diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCharFilter.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCharFilter.java index a25001065d11..71360e7ba348 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCharFilter.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCharFilter.java @@ -30,9 +30,11 @@ import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.codeInsight.lookup.impl.LookupImpl; import com.intellij.lang.java.JavaLanguage; import com.intellij.patterns.PsiJavaPatterns; +import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; import com.intellij.psi.javadoc.PsiDocComment; import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.psi.util.PsiUtil; public class JavaCharFilter extends CharFilter { @@ -67,9 +69,16 @@ public class JavaCharFilter extends CharFilter { if (c == ':') { PsiFile file = lookup.getPsiFile(); PsiDocumentManager.getInstance(file.getProject()).commitDocument(lookup.getEditor().getDocument()); - PsiElement element = lookup.getPsiElement(); - if (PsiTreeUtil.getParentOfType(element, PsiSwitchLabelStatement.class) != null || - PsiTreeUtil.getParentOfType(element, PsiConditionalExpression.class) != null) { + PsiElement leaf = file.findElementAt(lookup.getEditor().getCaretModel().getOffset() - 1); + if (PsiUtil.getLanguageLevel(file).isAtLeast(LanguageLevel.JDK_1_8)) { + PsiStatement statement = PsiTreeUtil.getParentOfType(leaf, PsiStatement.class); + if (statement == null || + statement.getTextRange().getStartOffset() != leaf.getTextRange().getStartOffset()) { // not typing a statement label + return Result.SELECT_ITEM_AND_FINISH_LOOKUP; + } + } + if (PsiTreeUtil.getParentOfType(leaf, PsiSwitchLabelStatement.class) != null || + PsiTreeUtil.getParentOfType(leaf, PsiConditionalExpression.class) != null) { return Result.SELECT_ITEM_AND_FINISH_LOOKUP; } return Result.HIDE_LOOKUP; diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/Normal8CompletionTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/Normal8CompletionTest.groovy similarity index 84% rename from java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/Normal8CompletionTest.java rename to java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/Normal8CompletionTest.groovy index bb5f0a2ee253..9fcddbb0fb21 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/Normal8CompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/Normal8CompletionTest.groovy @@ -39,4 +39,15 @@ public class Normal8CompletionTest extends LightFixtureCompletionTestCase { configureByFile("SelfStaticsOnly.java"); assertStringItems("ba", "bar"); } + + public void testFinishWithColon() { + myFixture.configureByText "a.java", """ +class Foo {{ Object o = Fox }} +""" + myFixture.completeBasic() + myFixture.type('::') + myFixture.checkResult """ +class Foo {{ Object o = Foo::x }} +""" + } }