mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
don't duplicate expected type argument variant when showing non-imported classes
This commit is contained in:
+14
-4
@@ -27,6 +27,7 @@ import com.intellij.psi.filters.ElementFilter;
|
||||
import com.intellij.psi.search.PsiShortNamesCache;
|
||||
import com.intellij.util.CollectConsumer;
|
||||
import com.intellij.util.Consumer;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashSet;
|
||||
@@ -58,7 +59,14 @@ public class JavaNoVariantsDelegator extends CompletionContributor {
|
||||
JavaCompletionContributor.isClassNamePossible(parameters) &&
|
||||
!JavaSmartCompletionContributor.AFTER_NEW.accepts(parameters.getPosition())) {
|
||||
result = result.withPrefixMatcher(new BetterPrefixMatcher(result.getPrefixMatcher(), BetterPrefixMatcher.getBestMatchingDegree(plainResults)));
|
||||
suggestNonImportedClasses(parameters, result);
|
||||
InheritorsHolder holder = new InheritorsHolder(parameters.getPosition(), result);
|
||||
for (CompletionResult plainResult : plainResults) {
|
||||
LookupElement element = plainResult.getLookupElement();
|
||||
if (element instanceof TypeArgumentCompletionProvider.TypeArgsLookupElement) {
|
||||
((TypeArgumentCompletionProvider.TypeArgsLookupElement)element).registerSingleClass(holder);
|
||||
}
|
||||
}
|
||||
suggestNonImportedClasses(parameters, JavaCompletionSorting.addJavaSorting(parameters, result), holder);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -86,7 +94,7 @@ public class JavaNoVariantsDelegator extends CompletionContributor {
|
||||
if (parameters.getInvocationCount() <= 1 &&
|
||||
JavaCompletionContributor.mayStartClassName(result) &&
|
||||
JavaCompletionContributor.isClassNamePossible(parameters)) {
|
||||
suggestNonImportedClasses(parameters, result);
|
||||
suggestNonImportedClasses(parameters, result, null);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -169,12 +177,14 @@ public class JavaNoVariantsDelegator extends CompletionContributor {
|
||||
return allClasses;
|
||||
}
|
||||
|
||||
private static void suggestNonImportedClasses(CompletionParameters parameters, final CompletionResultSet _result) {
|
||||
final CompletionResultSet result = JavaCompletionSorting.addJavaSorting(parameters, _result);
|
||||
private static void suggestNonImportedClasses(CompletionParameters parameters, final CompletionResultSet result, @Nullable final InheritorsHolder inheritorsHolder) {
|
||||
JavaClassNameCompletionContributor.addAllClasses(parameters,
|
||||
true, result.getPrefixMatcher(), new Consumer<LookupElement>() {
|
||||
@Override
|
||||
public void consume(LookupElement element) {
|
||||
if (inheritorsHolder != null && inheritorsHolder.alreadyProcessed(element)) {
|
||||
return;
|
||||
}
|
||||
JavaPsiClassReferenceElement classElement = element.as(JavaPsiClassReferenceElement.CLASS_CONDITION_KEY);
|
||||
if (classElement != null) {
|
||||
classElement.setAutoCompletionPolicy(AutoCompletionPolicy.NEVER_AUTOCOMPLETE);
|
||||
|
||||
+16
-10
@@ -108,15 +108,10 @@ class TypeArgumentCompletionProvider extends CompletionProvider<CompletionParame
|
||||
typeItems.add(PsiTypeLookupItem.createLookupItem(arg, context));
|
||||
}
|
||||
|
||||
if (typeItems.size() == 1 && myInheritors != null) {
|
||||
PsiClass aClass = PsiUtil.resolveClassInClassTypeOnly(typeItems.get(0).getPsiType());
|
||||
if (aClass != null) {
|
||||
JavaCompletionUtil.setShowFQN(typeItems.get(0));
|
||||
myInheritors.registerClass(aClass);
|
||||
}
|
||||
}
|
||||
|
||||
resultSet.addElement(new TypeArgsLookupElement(typeItems, globalTail, ConstructorInsertHandler.hasConstructorParameters(actualClass, context)));
|
||||
boolean hasParameters = ConstructorInsertHandler.hasConstructorParameters(actualClass, context);
|
||||
TypeArgsLookupElement element = new TypeArgsLookupElement(typeItems, globalTail, hasParameters);
|
||||
element.registerSingleClass(myInheritors);
|
||||
resultSet.addElement(element);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -193,7 +188,7 @@ class TypeArgumentCompletionProvider extends CompletionProvider<CompletionParame
|
||||
return Pair.create(referencedClass, parameterIndex);
|
||||
}
|
||||
|
||||
private static class TypeArgsLookupElement extends LookupElement {
|
||||
public static class TypeArgsLookupElement extends LookupElement {
|
||||
private String myLookupString;
|
||||
private final List<PsiTypeLookupItem> myTypeItems;
|
||||
private final TailType myGlobalTail;
|
||||
@@ -217,6 +212,17 @@ class TypeArgumentCompletionProvider extends CompletionProvider<CompletionParame
|
||||
return myTypeItems.get(0).getObject();
|
||||
}
|
||||
|
||||
public void registerSingleClass(@Nullable InheritorsHolder inheritors) {
|
||||
if (inheritors != null && myTypeItems.size() == 1) {
|
||||
PsiType type = myTypeItems.get(0).getPsiType();
|
||||
PsiClass aClass = PsiUtil.resolveClassInClassTypeOnly(type);
|
||||
if (aClass != null && !aClass.hasTypeParameters()) {
|
||||
JavaCompletionUtil.setShowFQN(myTypeItems.get(0));
|
||||
inheritors.registerClass(aClass);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getLookupString() {
|
||||
|
||||
Reference in New Issue
Block a user