overload resolution with varargs: don't prefer promitive varargs when no arg is provided (IDEA-140759)

This commit is contained in:
Anna Kozlova
2015-05-27 21:47:53 +02:00
parent 1fa670bb93
commit a21990d31e
3 changed files with 15 additions and 2 deletions

View File

@@ -444,12 +444,11 @@ public class JavaMethodsConflictResolver implements PsiConflictResolver{
}
private static boolean isBoxingHappened(PsiType argType, PsiType parameterType, @NotNull LanguageLevel languageLevel) {
if (argType == null) return parameterType instanceof PsiPrimitiveType;
if (parameterType instanceof PsiClassType) {
parameterType = ((PsiClassType)parameterType).setLanguageLevel(languageLevel);
}
return TypeConversionUtil.boxingConversionApplicable(parameterType, argType);
return argType != null && TypeConversionUtil.boxingConversionApplicable(parameterType, argType);
}
private Specifics isMoreSpecific(@NotNull MethodCandidateInfo info1,

View File

@@ -0,0 +1,10 @@
class Test {
public void test(String... <warning descr="Parameter 'a' is never used">a</warning>){}
public void test(int... <warning descr="Parameter 'a' is never used">a</warning>){}
public static void main(String[] args) {
new Test().test<error descr="Ambiguous method call: both 'Test.test(String...)' and 'Test.test(int...)' match">()</error>;
}
}

View File

@@ -118,6 +118,10 @@ public class OverloadResolutionTest extends LightDaemonAnalyzerTestCase {
doTest();
}
public void testPrimitiveVarargsAreNoMoreSpecificThanNonPrimitiveWhenNoArgIsActuallyProvided() throws Exception {
doTest();
}
private void doTest() {
doTest(true);
}