8019340: varargs-related warnings are meaningless on signature-polymorphic methods such as MethodHandle.invokeExact

Wed, 17 Jul 2013 14:19:25 +0100

author
mcimadamore
date
Wed, 17 Jul 2013 14:19:25 +0100
changeset 1904
b577222ef7b3
parent 1903
155809b1b969
child 1905
f65a807714ba

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

src/share/classes/com/sun/tools/javac/comp/Check.java file | annotate | diff | comparison | revisions
test/tools/javac/meth/VarargsWarn.java file | annotate | diff | comparison | revisions
test/tools/javac/meth/VarargsWarn.out file | annotate | diff | comparison | revisions
     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

mercurial