From 54ba2266c6c35504ca5a3e1b64d65bc8c4ae3dec Mon Sep 17 00:00:00 2001 From: Maxim Medvedev Date: Fri, 19 Feb 2010 17:28:26 +0300 Subject: [PATCH] IDEA-51934: Groovy constructor calls should be disambiguated by parameter count --- .../plugins/groovy/lang/resolve/ResolveUtil.java | 10 ++++++---- .../lang/resolve/processors/CompletionProcessor.java | 2 +- .../resolve/processors/MethodResolverProcessor.java | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/ResolveUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/ResolveUtil.java index 69fa1301397c..7f681e2ada76 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/ResolveUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/ResolveUtil.java @@ -348,7 +348,7 @@ public class ResolveUtil { return elements; } - public static GroovyResolveResult[] filterSameSignatureCandidates(Collection candidates) { + public static GroovyResolveResult[] filterSameSignatureCandidates(Collection candidates, int argumentCount) { GroovyResolveResult[] array = candidates.toArray(new GroovyResolveResult[candidates.size()]); if (array.length == 1) return array; @@ -365,10 +365,10 @@ public class ResolveUtil { PsiElement element = otherResolveResult.getElement(); if (element instanceof PsiMethod) { PsiMethod method = (PsiMethod)element; - if (dominated(currentMethod, array[i].getSubstitutor(), method, otherResolveResult.getSubstitutor())) { + if (dominated(currentMethod, array[i].getSubstitutor(), method, otherResolveResult.getSubstitutor(), argumentCount)) { continue Outer; } - else if (dominated(method, otherResolveResult.getSubstitutor(), currentMethod, array[i].getSubstitutor())) { + else if (dominated(method, otherResolveResult.getSubstitutor(), currentMethod, array[i].getSubstitutor(), argumentCount)) { iterator.remove(); } } @@ -384,11 +384,13 @@ public class ResolveUtil { public static boolean dominated(PsiMethod method1, PsiSubstitutor substitutor1, PsiMethod method2, - PsiSubstitutor substitutor2) { //method1 has more general parameter types thn method2 + PsiSubstitutor substitutor2, + int argumentCount) { //method1 has more general parameter types then method2 if (!method1.getName().equals(method2.getName())) return false; PsiParameter[] params1 = method1.getParameterList().getParameters(); PsiParameter[] params2 = method2.getParameterList().getParameters(); + if (argumentCount != params1.length && argumentCount == params2.length) return true; if (params1.length != params2.length) return false; diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/processors/CompletionProcessor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/processors/CompletionProcessor.java index 16209a63aa01..d60adfc72832 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/processors/CompletionProcessor.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/processors/CompletionProcessor.java @@ -55,6 +55,6 @@ public class CompletionProcessor extends ResolverProcessor { public GroovyResolveResult[] getCandidates() { if (myCandidates.size() == 0) return GroovyResolveResult.EMPTY_ARRAY; - return ResolveUtil.filterSameSignatureCandidates(myCandidates); + return ResolveUtil.filterSameSignatureCandidates(myCandidates, -1); } } \ No newline at end of file diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/processors/MethodResolverProcessor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/processors/MethodResolverProcessor.java index d43dcbb5c16f..530cbe2cdff1 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/processors/MethodResolverProcessor.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/processors/MethodResolverProcessor.java @@ -212,7 +212,7 @@ public class MethodResolverProcessor extends ResolverProcessor { return filterCandidates(); } if (!myInapplicableCandidates.isEmpty()) { - return ResolveUtil.filterSameSignatureCandidates(myInapplicableCandidates); + return ResolveUtil.filterSameSignatureCandidates(myInapplicableCandidates, myArgumentTypes != null ? myArgumentTypes.length : -1); } return GroovyResolveResult.EMPTY_ARRAY; } -- 2.32.0