diff options
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.java | 30 |
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() { |