when no imported clas is found, show non-imported. on explicit completion only

This commit is contained in:
peter
2011-08-05 16:12:05 +02:00
parent 8f022bd35b
commit 0dbb562a2a
4 changed files with 21 additions and 6 deletions
@@ -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();
@@ -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
@@ -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<LookupElement>() {
@@ -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;
@@ -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 {}");