mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-02-05 08:06:56 +07:00
[java-completion] IDEA-340250 Use JavaQualifierAsArgumentContributor in case when class and first argument are similar
GitOrigin-RevId: ea318a11f10252b5cbef9a931dc8f5941d99f948
This commit is contained in:
committed by
intellij-monorepo-bot
parent
b1353c57a6
commit
cdffacc3bd
@@ -23,11 +23,13 @@ import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.keymap.KeymapUtil;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleUtilCore;
|
||||
import com.intellij.openapi.options.advanced.AdvancedSettings;
|
||||
import com.intellij.openapi.project.DumbAware;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.ModuleRootManager;
|
||||
import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.openapi.util.NlsContexts;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.openapi.util.registry.Registry;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
@@ -75,6 +77,7 @@ import org.jetbrains.annotations.*;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import static com.intellij.codeInsight.completion.JavaQualifierAsArgumentContributor.JavaQualifierAsArgumentStaticMembersProcessor;
|
||||
import static com.intellij.patterns.PsiJavaPatterns.*;
|
||||
import static com.intellij.psi.CommonClassNames.JAVA_LANG_COMPARABLE;
|
||||
import static com.intellij.psi.CommonClassNames.JAVA_LANG_OBJECT;
|
||||
@@ -852,9 +855,31 @@ public final class JavaCompletionContributor extends CompletionContributor imple
|
||||
|
||||
ContainerUtil.addIfNotNull(items, ArrayMemberAccess.accessFirstElement(position, element));
|
||||
}
|
||||
|
||||
if (parameters.getInvocationCount() > 0) {
|
||||
items.addAll(getInnerScopeVariables(parameters, position));
|
||||
}
|
||||
|
||||
if (ref.getQualifier() instanceof PsiExpression qualifierExpression &&
|
||||
parameters.getInvocationCount() <= 2 &&
|
||||
AdvancedSettings.getBoolean("java.completion.qualifier.as.argument")) {
|
||||
JavaQualifierAsArgumentStaticMembersProcessor processor =
|
||||
new JavaQualifierAsArgumentStaticMembersProcessor(parameters, qualifierExpression);
|
||||
|
||||
items = ContainerUtil.map(items, lookupItem -> {
|
||||
JavaMethodCallElement javaMethodCallElement = lookupItem.as(JavaMethodCallElement.class);
|
||||
if (javaMethodCallElement != null) {
|
||||
PsiMethod psiMethod = javaMethodCallElement.getObject();
|
||||
Ref<LookupElement> staticref = new Ref<>();
|
||||
processor.processStaticMember(staticItem -> staticref.set(staticItem), psiMethod, new HashSet<>());
|
||||
if (!staticref.isNull()) {
|
||||
return staticref.get();
|
||||
}
|
||||
}
|
||||
return lookupItem;
|
||||
});
|
||||
}
|
||||
|
||||
return items;
|
||||
}
|
||||
|
||||
@@ -1019,7 +1044,7 @@ public final class JavaCompletionContributor extends CompletionContributor imple
|
||||
PsiAnnotationMemberValue defaultValue = ((PsiAnnotationMethod)method).getDefaultValue();
|
||||
String defText = defaultValue == null ? null : defaultValue.getText();
|
||||
if (PsiKeyword.TRUE.equals(defText) || PsiKeyword.FALSE.equals(defText)) {
|
||||
result.addElement(createAnnotationAttributeElement(method,
|
||||
result.addElement(createAnnotationAttributeElement(method,
|
||||
PsiKeyword.TRUE.equals(defText) ? PsiKeyword.FALSE : PsiKeyword.TRUE,
|
||||
position));
|
||||
result.addElement(PrioritizedLookupElement.withPriority(createAnnotationAttributeElement(method, defText, position)
|
||||
|
||||
@@ -25,6 +25,7 @@ import com.intellij.psi.util.*;
|
||||
import com.intellij.util.Processor;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.MultiMap;
|
||||
import com.siyeh.ig.callMatcher.CallMatcher;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -69,13 +70,14 @@ public class JavaQualifierAsArgumentContributor extends CompletionContributor im
|
||||
PrefixMatcher matcher = result.getPrefixMatcher();
|
||||
Project project = parameters.getEditor().getProject();
|
||||
if (project == null) return;
|
||||
MyStaticMembersProcessor processor = new MyStaticMembersProcessor(parameters, qualifierExpression);
|
||||
JavaQualifierAsArgumentStaticMembersProcessor
|
||||
processor = new JavaQualifierAsArgumentStaticMembersProcessor(parameters, qualifierExpression);
|
||||
process(parameters, matcher, processor, result);
|
||||
}
|
||||
|
||||
private static void process(@NotNull CompletionParameters parameters,
|
||||
@NotNull PrefixMatcher matcher,
|
||||
@NotNull MyStaticMembersProcessor processor,
|
||||
@NotNull JavaQualifierAsArgumentContributor.JavaQualifierAsArgumentStaticMembersProcessor processor,
|
||||
@NotNull CompletionResultSet result) {
|
||||
|
||||
PsiElement position = parameters.getPosition();
|
||||
@@ -183,7 +185,7 @@ public class JavaQualifierAsArgumentContributor extends CompletionContributor im
|
||||
}
|
||||
|
||||
|
||||
private static final class MyStaticMembersProcessor extends JavaStaticMemberProcessor {
|
||||
static final class JavaQualifierAsArgumentStaticMembersProcessor extends JavaStaticMemberProcessor {
|
||||
|
||||
@NotNull
|
||||
private final PsiExpression myOldQualifiedExpression;
|
||||
@@ -194,9 +196,15 @@ public class JavaQualifierAsArgumentContributor extends CompletionContributor im
|
||||
@NotNull
|
||||
private final NotNullLazyValue<Collection<PsiType>> myExpectedTypes;
|
||||
|
||||
@NotNull
|
||||
private static final CallMatcher MY_SKIP_METHODS =
|
||||
CallMatcher.anyOf(
|
||||
CallMatcher.staticCall(CommonClassNames.JAVA_LANG_STRING, "format")
|
||||
);
|
||||
|
||||
private MyStaticMembersProcessor(@NotNull CompletionParameters parameters,
|
||||
@NotNull PsiExpression oldQualifiedExpression) {
|
||||
|
||||
JavaQualifierAsArgumentStaticMembersProcessor(@NotNull CompletionParameters parameters,
|
||||
@NotNull PsiExpression oldQualifiedExpression) {
|
||||
super(parameters);
|
||||
this.myOldQualifiedExpression = oldQualifiedExpression;
|
||||
this.myOriginalPosition = parameters.getOriginalPosition();
|
||||
@@ -212,7 +220,7 @@ public class JavaQualifierAsArgumentContributor extends CompletionContributor im
|
||||
|
||||
@Override
|
||||
protected boolean additionalFilter(PsiMember member) {
|
||||
return (member instanceof PsiMethod method && filter(method));
|
||||
return (member instanceof PsiMethod method && filter(method) && !MY_SKIP_METHODS.methodMatches(method));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user