summaryrefslogtreecommitdiff
path: root/java/java-impl/src/com/intellij/codeInsight/completion/methodChains/search/ParametersMatcher.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/java-impl/src/com/intellij/codeInsight/completion/methodChains/search/ParametersMatcher.java')
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/completion/methodChains/search/ParametersMatcher.java30
1 files changed, 22 insertions, 8 deletions
diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/methodChains/search/ParametersMatcher.java b/java/java-impl/src/com/intellij/codeInsight/completion/methodChains/search/ParametersMatcher.java
index 2c2a563cef8c..fd4d5d7c2d0b 100644
--- a/java/java-impl/src/com/intellij/codeInsight/completion/methodChains/search/ParametersMatcher.java
+++ b/java/java-impl/src/com/intellij/codeInsight/completion/methodChains/search/ParametersMatcher.java
@@ -8,19 +8,22 @@ import com.intellij.psi.PsiType;
import org.jetbrains.annotations.NotNull;
import java.util.NavigableSet;
+import java.util.Set;
import java.util.TreeSet;
/**
* @author Dmitry Batkovich
*/
-public class ParametersMatcher {
+public final class ParametersMatcher {
+
+ private ParametersMatcher() {}
public static MatchResult matchParameters(final MethodsChain chain, final ChainCompletionContext context) {
MatchResult overallResult = EMPTY;
for (final PsiMethod[] methods : chain.getPath()) {
final NavigableSet<MatchResult> matchResults = new TreeSet<MatchResult>();
for (final PsiMethod method : methods) {
- matchResults.add(matchParameters(method, context));
+ matchResults.add(matchParameters(method, context, chain.getExcludedQNames()));
}
final MatchResult best = matchResults.first();
overallResult = overallResult.add(best);
@@ -28,30 +31,37 @@ public class ParametersMatcher {
return overallResult;
}
- public static MatchResult matchParameters(final PsiMethod method, final ChainCompletionContext context) {
+ private static MatchResult matchParameters(final PsiMethod method, final ChainCompletionContext context, final Set<String> additionalExcludedNames) {
int matched = 0;
int unMatched = 0;
+ boolean hasTarget = false;
for (final PsiParameter parameter : method.getParameterList().getParameters()) {
final PsiType type = parameter.getType();
- if (context.contains(type.getCanonicalText()) || type instanceof PsiPrimitiveType) {
+ final String canonicalText = type.getCanonicalText();
+ if (context.contains(canonicalText) || type instanceof PsiPrimitiveType) {
matched++;
}
else {
unMatched++;
}
+ if (context.getTargetQName().equals(canonicalText) || additionalExcludedNames.contains(canonicalText)) {
+ hasTarget = true;
+ }
}
- return new MatchResult(matched, unMatched);
+ return new MatchResult(matched, unMatched, hasTarget);
}
- private static final MatchResult EMPTY = new MatchResult(0, 0);
+ private static final MatchResult EMPTY = new MatchResult(0, 0, false);
public static class MatchResult implements Comparable<MatchResult> {
private final int myMatched;
private final int myUnMatched;
+ private final boolean myHasTarget;
- private MatchResult(final int matched, final int unMatched) {
+ private MatchResult(final int matched, final int unMatched, final boolean hasTarget) {
myMatched = matched;
myUnMatched = unMatched;
+ myHasTarget = hasTarget;
}
public int getMatched() {
@@ -62,8 +72,12 @@ public class ParametersMatcher {
return myUnMatched;
}
+ public boolean hasTarget() {
+ return myHasTarget;
+ }
+
public MatchResult add(final MatchResult other) {
- return new MatchResult(getMatched() + other.getMatched(), getUnMatched() + other.getUnMatched());
+ return new MatchResult(getMatched() + other.getMatched(), getUnMatched() + other.getUnMatched(), other.myHasTarget || myHasTarget);
}
public boolean noUnmatchedAndHasMatched() {