Wed, 17 Jul 2013 14:19:25 +0100
8019340: varargs-related warnings are meaningless on signature-polymorphic methods such as MethodHandle.invokeExact
Summary: Disable certain varargs warnings when compiling polymorphic signature calls
Reviewed-by: jjg
1.1 --- a/src/share/classes/com/sun/tools/javac/comp/Check.java Wed Jul 17 14:19:02 2013 +0100 1.2 +++ b/src/share/classes/com/sun/tools/javac/comp/Check.java Wed Jul 17 14:19:25 2013 +0100 1.3 @@ -897,7 +897,8 @@ 1.4 assertConvertible(arg, arg.type, varArg, warn); 1.5 args = args.tail; 1.6 } 1.7 - } else if ((sym.flags() & VARARGS) != 0 && allowVarargs) { 1.8 + } else if ((sym.flags() & (VARARGS | SIGNATURE_POLYMORPHIC)) == VARARGS && 1.9 + allowVarargs) { 1.10 // non-varargs call to varargs method 1.11 Type varParam = owntype.getParameterTypes().last(); 1.12 Type lastArg = argtypes.last();
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 2.2 +++ b/test/tools/javac/meth/VarargsWarn.java Wed Jul 17 14:19:25 2013 +0100 2.3 @@ -0,0 +1,17 @@ 2.4 +/* 2.5 + * @test /nodynamiccopyright/ 2.6 + * @bug 8019340 2.7 + * @summary varargs-related warnings are meaningless on signature-polymorphic methods such as MethodHandle.invokeExact 2.8 + * 2.9 + * @compile/fail/ref=VarargsWarn.out -XDrawDiagnostics -Werror VarargsWarn.java 2.10 + */ 2.11 + 2.12 +import java.lang.invoke.*; 2.13 + 2.14 +class VarargsWarn { 2.15 + void test(MethodHandle mh) throws Throwable { 2.16 + mh.invokeExact((Integer[])null); 2.17 + mh.invoke((Integer[])null); 2.18 + mh.invokeWithArguments((Integer[])null); //not a sig poly method - warning here! 2.19 + } 2.20 +}
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 3.2 +++ b/test/tools/javac/meth/VarargsWarn.out Wed Jul 17 14:19:25 2013 +0100 3.3 @@ -0,0 +1,4 @@ 3.4 +VarargsWarn.java:15:32: compiler.warn.inexact.non-varargs.call: java.lang.Object, java.lang.Object[] 3.5 +- compiler.err.warnings.and.werror 3.6 +1 error 3.7 +1 warning