From f3f59e0f0dabd732e645a55c99bdbeb36e12b3f3 Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 12 Aug 2011 19:16:28 +0200 Subject: [PATCH] when typing a class name which is not yet imported, just type the space/[/ lookup.itemPattern(item).length()) { + if (JavaPsiFacade.getInstance(file.getProject()).getShortNamesCache().getClassesByName(lookup.itemPattern(item), file.getResolveScope()).length > 0) { + return true; + } + } + + return false; + } + public Result acceptChar(char c, final int prefixLength, final Lookup lookup) { if (!lookup.isCompletion()) return null; @@ -63,6 +85,11 @@ public class JavaCharFilter extends CharFilter { return null; } if (c == '.' && isWithinLiteral(lookup)) return Result.ADD_TO_PREFIX; + + if ((c == '[' || c == '<' || c == '.' || c == ' ') && isNonImportedClassEntered((LookupImpl)lookup)) { + return Result.HIDE_LOOKUP; + } + if (c == '[') return CharFilter.Result.SELECT_ITEM_AND_FINISH_LOOKUP; if (c == '<' && o instanceof PsiClass) return Result.SELECT_ITEM_AND_FINISH_LOOKUP; if (c == '(' && o instanceof PsiClass) { diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy index 9f1483f0f11a..c850bd079e00 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy @@ -1037,4 +1037,21 @@ class LiveComplete { assert myFixture.lookupElementStrings == ['iterator'] } + public void testTypingNonImportedClassName() { + myFixture.addClass("package foo; public class Foo239 {} ") + myFixture.addClass("class Foo239Util {} ") + myFixture.addClass("class Foo239Util2 {} ") + + myFixture.configureByText "a.java", "class Foo {{ }}" + type 'Foo239 ' + assert myFixture.file.text.contains('Foo239 ') + + myFixture.configureByText "a.java", "class Foo {{ }}" + type 'Foo239' + edt { myFixture.performEditorAction IdeActions.ACTION_EDITOR_MOVE_CARET_DOWN } + type ' ' + assert myFixture.file.text.contains('Foo239Util2 ') + } + + } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyReferenceCharFilter.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyReferenceCharFilter.java index 01192094320b..5e86bdb69fe6 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyReferenceCharFilter.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyReferenceCharFilter.java @@ -15,9 +15,11 @@ */ package org.jetbrains.plugins.groovy.lang.completion; +import com.intellij.codeInsight.completion.JavaCharFilter; import com.intellij.codeInsight.lookup.CharFilter; import com.intellij.codeInsight.lookup.Lookup; import com.intellij.codeInsight.lookup.LookupElement; +import com.intellij.codeInsight.lookup.impl.LookupImpl; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiFile; import org.jetbrains.annotations.Nullable; @@ -39,6 +41,10 @@ public class GroovyReferenceCharFilter extends CharFilter { return Result.ADD_TO_PREFIX; } + if ((c == '[' || c == '<' || c == '.' || c == ' ') && JavaCharFilter.isNonImportedClassEntered((LookupImpl)lookup)) { + return Result.HIDE_LOOKUP; + } + if (c == '[') return CharFilter.Result.SELECT_ITEM_AND_FINISH_LOOKUP; if (c == '<' && item.getObject() instanceof PsiClass) return Result.SELECT_ITEM_AND_FINISH_LOOKUP; diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyAutoPopupTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyAutoPopupTest.groovy index f0be2a8facf3..bf3233866081 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyAutoPopupTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyAutoPopupTest.groovy @@ -121,5 +121,21 @@ class GroovyAutoPopupTest extends CompletionAutoPopupTestCase { assert myFixture.lookupElementStrings == ['xxxxx'] } + public void testTypingNonImportedClassName() { + CodeInsightSettings.instance.AUTOPOPUP_FOCUS_POLICY = CodeInsightSettings.ALWAYS + + try { + myFixture.addClass("package foo; public class Foo239 {} ") + myFixture.addClass("class Foo239Util {} ") + myFixture.configureByText "a.groovy", "" + type 'Foo239 ' + myFixture.checkResult 'Foo239 ' + } + finally { + CodeInsightSettings.instance.AUTOPOPUP_FOCUS_POLICY = CodeInsightSettings.SMART + } + } + + }