From 0dbb562a2af5e55ff4605600ddbbeed80745a939 Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 5 Aug 2011 15:07:51 +0200 Subject: [PATCH] when no imported clas is found, show non-imported. on explicit completion only --- .../completion/AbstractBasicToClassNameDelegator.java | 2 +- .../completion/BasicToClassNameDelegator.java | 9 ++++++++- .../completion/JavaCompletionContributor.java | 7 +++---- .../completion/HeavyNormalCompletionTest.java | 9 +++++++++ 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/AbstractBasicToClassNameDelegator.java b/java/java-impl/src/com/intellij/codeInsight/completion/AbstractBasicToClassNameDelegator.java index 2d5a8ed7e453..933613a83726 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/AbstractBasicToClassNameDelegator.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/AbstractBasicToClassNameDelegator.java @@ -32,7 +32,7 @@ public abstract class AbstractBasicToClassNameDelegator extends CompletionContri @Override public void fillCompletionVariants(final CompletionParameters parameters, final CompletionResultSet result) { - if (parameters.getCompletionType() != CompletionType.BASIC) return; + if (parameters.getCompletionType() != CompletionType.BASIC || parameters.getInvocationCount() == 0) return; final PsiFile file = parameters.getOriginalFile(); final PsiElement position = parameters.getPosition(); diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/BasicToClassNameDelegator.java b/java/java-impl/src/com/intellij/codeInsight/completion/BasicToClassNameDelegator.java index 29f3eeb1f972..32414a444ef6 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/BasicToClassNameDelegator.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/BasicToClassNameDelegator.java @@ -18,6 +18,7 @@ package com.intellij.codeInsight.completion; import com.intellij.codeInsight.lookup.AutoCompletionPolicy; import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.lang.StdLanguages; +import com.intellij.lang.xml.XMLLanguage; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; @@ -28,7 +29,13 @@ public class BasicToClassNameDelegator extends AbstractBasicToClassNameDelegator @Override protected boolean isClassNameCompletionSupported(CompletionResultSet result, PsiFile file, PsiElement position) { - return file.getLanguage().isKindOf(StdLanguages.XML) && JavaCompletionContributor.mayStartClassName(result, false); + if (!JavaCompletionContributor.mayStartClassName(result, false)) return false; + + if (file.getLanguage() == StdLanguages.JAVA) { + return JavaCompletionContributor.isClassNamePossible(position); + } + + return file.getLanguage() instanceof XMLLanguage; } @Override diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java index 9a91c820e199..c240ad91b64a 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java @@ -235,7 +235,7 @@ public class JavaCompletionContributor extends CompletionContributor { public static void addAllClasses(CompletionParameters parameters, final CompletionResultSet result, final InheritorsHolder inheritors) { - if (!isClassNamePossible(parameters) || !mayStartClassName(result, parameters.isRelaxedMatching())) return; + if (!isClassNamePossible(parameters.getPosition()) || !mayStartClassName(result, parameters.isRelaxedMatching())) return; if (mayShowAllClasses(parameters)) { JavaClassNameCompletionContributor.addAllClasses(parameters, result, new Consumer() { @@ -276,7 +276,7 @@ public class JavaCompletionContributor extends CompletionContributor { checkAccess, result.getPrefixMatcher(), parameters); PsiClass arrays = JavaPsiFacade.getInstance(position.getProject()).findClass(CommonClassNames.JAVA_UTIL_ARRAYS, position.getResolveScope()); - if (arrays != null && filter.isAcceptable(arrays, position) && isClassNamePossible(parameters)) { + if (arrays != null && filter.isAcceptable(arrays, position) && isClassNamePossible(parameters.getPosition())) { set.add(JavaClassNameCompletionContributor.createClassLookupItem(arrays, true)); } for (LookupElement element : set) { @@ -350,8 +350,7 @@ public class JavaCompletionContributor extends CompletionContributor { } } - private static boolean isClassNamePossible(CompletionParameters parameters) { - PsiElement position = parameters.getPosition(); + public static boolean isClassNamePossible(final PsiElement position) { final PsiElement parent = position.getParent(); if (!(parent instanceof PsiJavaCodeReferenceElement)) return false; if (((PsiJavaCodeReferenceElement)parent).getQualifier() != null) return false; diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/HeavyNormalCompletionTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/completion/HeavyNormalCompletionTest.java index b63065a15b07..19cd6d1d4e0f 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/HeavyNormalCompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/HeavyNormalCompletionTest.java @@ -5,6 +5,7 @@ package com.intellij.codeInsight.completion; import com.intellij.JavaTestUtil; +import com.intellij.codeInsight.lookup.Lookup; import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.codeInsight.lookup.LookupManager; import com.intellij.codeInsight.lookup.impl.LookupImpl; @@ -42,6 +43,14 @@ public class HeavyNormalCompletionTest extends CompletionTestCase{ assertTrue(JavaPsiFacade.getInstance(myProject).findPackage("foo.bar.goo").isValid()); } + public void testAllClassesWhenNothingIsFound() throws Throwable { + createClass("package foo.bar; public class AxBxCxDxEx {}"); + + configureByFile("/codeInsight/completion/normal/" + getTestName(false) + ".java"); + ((LookupImpl)LookupManager.getActiveLookup(myEditor)).finishLookup(Lookup.NORMAL_SELECT_CHAR); + checkResultByFile("/codeInsight/completion/normal/" + getTestName(false) + "_after.java"); + } + public void testAllClassesOnSecondBasicCompletion() throws Throwable { createClass("package foo.bar; public class AxBxCxDxEx {}");