Tue, 20 Aug 2013 17:34:06 +0400
7182350: Regression in wording of unchecked warning message
Reviewed-by: mcimadamore, jjg
1.1 --- a/src/share/classes/com/sun/tools/javac/comp/Check.java Mon Aug 19 07:47:10 2013 -0700 1.2 +++ b/src/share/classes/com/sun/tools/javac/comp/Check.java Tue Aug 20 17:34:06 2013 +0400 1.3 @@ -875,19 +875,23 @@ 1.4 } 1.5 Type owntype = mtype; 1.6 List<Type> formals = owntype.getParameterTypes(); 1.7 + List<Type> nonInferred = sym.type.getParameterTypes(); 1.8 + if (nonInferred.length() != formals.length()) nonInferred = formals; 1.9 Type last = useVarargs ? formals.last() : null; 1.10 - if (sym.name == names.init && 1.11 - sym.owner == syms.enumSym) 1.12 - formals = formals.tail.tail; 1.13 + if (sym.name == names.init && sym.owner == syms.enumSym) { 1.14 + formals = formals.tail.tail; 1.15 + nonInferred = nonInferred.tail.tail; 1.16 + } 1.17 List<JCExpression> args = argtrees; 1.18 if (args != null) { 1.19 //this is null when type-checking a method reference 1.20 while (formals.head != last) { 1.21 JCTree arg = args.head; 1.22 - Warner warn = convertWarner(arg.pos(), arg.type, formals.head); 1.23 + Warner warn = convertWarner(arg.pos(), arg.type, nonInferred.head); 1.24 assertConvertible(arg, arg.type, formals.head, warn); 1.25 args = args.tail; 1.26 formals = formals.tail; 1.27 + nonInferred = nonInferred.tail; 1.28 } 1.29 if (useVarargs) { 1.30 Type varArg = types.elemtype(last); 1.31 @@ -903,17 +907,17 @@ 1.32 Type varParam = owntype.getParameterTypes().last(); 1.33 Type lastArg = argtypes.last(); 1.34 if (types.isSubtypeUnchecked(lastArg, types.elemtype(varParam)) && 1.35 - !types.isSameType(types.erasure(varParam), types.erasure(lastArg))) 1.36 + !types.isSameType(types.erasure(varParam), types.erasure(lastArg))) 1.37 log.warning(argtrees.last().pos(), "inexact.non-varargs.call", 1.38 - types.elemtype(varParam), varParam); 1.39 + types.elemtype(varParam), varParam); 1.40 } 1.41 } 1.42 if (useVarargs) { 1.43 Type argtype = owntype.getParameterTypes().last(); 1.44 if (!types.isReifiable(argtype) && 1.45 - (!allowSimplifiedVarargs || 1.46 - sym.attribute(syms.trustMeType.tsym) == null || 1.47 - !isTrustMeAllowedOnMethod(sym))) { 1.48 + (!allowSimplifiedVarargs || 1.49 + sym.attribute(syms.trustMeType.tsym) == null || 1.50 + !isTrustMeAllowedOnMethod(sym))) { 1.51 warnUnchecked(env.tree.pos(), 1.52 "unchecked.generic.array.creation", 1.53 argtype); 1.54 @@ -929,15 +933,15 @@ 1.55 return owntype; 1.56 } 1.57 //where 1.58 - private void assertConvertible(JCTree tree, Type actual, Type formal, Warner warn) { 1.59 - if (types.isConvertible(actual, formal, warn)) 1.60 - return; 1.61 - 1.62 - if (formal.isCompound() 1.63 - && types.isSubtype(actual, types.supertype(formal)) 1.64 - && types.isSubtypeUnchecked(actual, types.interfaces(formal), warn)) 1.65 - return; 1.66 - } 1.67 + private void assertConvertible(JCTree tree, Type actual, Type formal, Warner warn) { 1.68 + if (types.isConvertible(actual, formal, warn)) 1.69 + return; 1.70 + 1.71 + if (formal.isCompound() 1.72 + && types.isSubtype(actual, types.supertype(formal)) 1.73 + && types.isSubtypeUnchecked(actual, types.interfaces(formal), warn)) 1.74 + return; 1.75 + } 1.76 1.77 /** 1.78 * Check that type 't' is a valid instantiation of a generic class
2.1 --- a/test/tools/javac/6758789/T6758789b.out Mon Aug 19 07:47:10 2013 -0700 2.2 +++ b/test/tools/javac/6758789/T6758789b.out Tue Aug 20 17:34:06 2013 +0400 2.3 @@ -1,5 +1,5 @@ 2.4 T6758789b.java:16:10: compiler.warn.unchecked.meth.invocation.applied: kindname.method, m, T6758789a.Foo<X>, T6758789a.Foo, kindname.class, T6758789a 2.5 -T6758789b.java:16:11: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), T6758789a.Foo, T6758789a.Foo<java.lang.Object> 2.6 +T6758789b.java:16:11: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), T6758789a.Foo, T6758789a.Foo<X> 2.7 - compiler.err.warnings.and.werror 2.8 1 error 2.9 2 warnings
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 3.2 +++ b/test/tools/javac/7182350/T7182350.java Tue Aug 20 17:34:06 2013 +0400 3.3 @@ -0,0 +1,14 @@ 3.4 +/** 3.5 + * @test /nodynamiccopyright/ 3.6 + * @bug 7182350 3.7 + * @summary verify correct output of -Xlint:unchecked on methods with unchecked conversations in parameters 3.8 + * @compile/ref=T7182350.out -XDrawDiagnostics -Xlint:unchecked T7182350.java 3.9 + */ 3.10 + 3.11 +import java.util.*; 3.12 + 3.13 +class T7182350 { 3.14 + public static void quicksort(Vector vector, Comparator compare) { 3.15 + Collections.sort(vector,compare); 3.16 + } 3.17 +}
4.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 4.2 +++ b/test/tools/javac/7182350/T7182350.out Tue Aug 20 17:34:06 2013 +0400 4.3 @@ -0,0 +1,4 @@ 4.4 +T7182350.java:12:25: compiler.warn.unchecked.meth.invocation.applied: kindname.method, sort, java.util.List<T>,java.util.Comparator<? super T>, java.util.Vector,java.util.Comparator, kindname.class, java.util.Collections 4.5 +T7182350.java:12:26: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), java.util.Vector, java.util.List<T> 4.6 +T7182350.java:12:33: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), java.util.Comparator, java.util.Comparator<? super T> 4.7 +3 warnings
5.1 --- a/test/tools/javac/generics/7015430/T7015430_1.out Mon Aug 19 07:47:10 2013 -0700 5.2 +++ b/test/tools/javac/generics/7015430/T7015430_1.out Tue Aug 20 17:34:06 2013 +0400 5.3 @@ -1,13 +1,13 @@ 5.4 T7015430.java:42:14: compiler.warn.unchecked.meth.invocation.applied: kindname.method, empty, java.lang.Iterable<E>, java.lang.Iterable, kindname.class, T7015430 5.5 T7015430.java:42:15: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), java.lang.Iterable, java.lang.Iterable<E> 5.6 T7015430.java:51:41: compiler.warn.unchecked.meth.invocation.applied: kindname.method, empty, java.lang.Iterable<E>, java.lang.Iterable, kindname.class, T7015430 5.7 -T7015430.java:51:42: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), java.lang.Iterable, java.lang.Iterable<java.lang.RuntimeException> 5.8 +T7015430.java:51:42: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), java.lang.Iterable, java.lang.Iterable<E> 5.9 T7015430.java:69:9: compiler.warn.unchecked.meth.invocation.applied: kindname.constructor, <init>, java.lang.Iterable<E>, java.lang.Iterable, kindname.class, T7015430 5.10 T7015430.java:69:22: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), java.lang.Iterable, java.lang.Iterable<E> 5.11 T7015430.java:78:9: compiler.warn.unchecked.meth.invocation.applied: kindname.constructor, <init>, java.lang.Iterable<E>, java.lang.Iterable, kindname.class, T7015430 5.12 -T7015430.java:78:40: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), java.lang.Iterable, java.lang.Iterable<java.lang.RuntimeException> 5.13 +T7015430.java:78:40: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), java.lang.Iterable, java.lang.Iterable<E> 5.14 T7015430.java:105:9: compiler.warn.unchecked.meth.invocation.applied: kindname.constructor, <init>, java.lang.Iterable<E>, java.lang.Iterable, kindname.class, T7015430 5.15 -T7015430.java:105:41: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), java.lang.Iterable, java.lang.Iterable<java.lang.RuntimeException> 5.16 +T7015430.java:105:41: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), java.lang.Iterable, java.lang.Iterable<E> 5.17 T7015430.java:114:9: compiler.warn.unchecked.meth.invocation.applied: kindname.constructor, <init>, java.lang.Iterable<E>, java.lang.Iterable, kindname.class, T7015430 5.18 T7015430.java:114:22: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), java.lang.Iterable, java.lang.Iterable<E> 5.19 T7015430.java:42:14: compiler.err.unreported.exception.need.to.catch.or.throw: java.lang.Exception
6.1 --- a/test/tools/javac/generics/7015430/T7015430_2.out Mon Aug 19 07:47:10 2013 -0700 6.2 +++ b/test/tools/javac/generics/7015430/T7015430_2.out Tue Aug 20 17:34:06 2013 +0400 6.3 @@ -1,15 +1,15 @@ 6.4 T7015430.java:42:14: compiler.warn.unchecked.meth.invocation.applied: kindname.method, empty, java.lang.Iterable<E>, java.lang.Iterable, kindname.class, T7015430 6.5 -T7015430.java:42:15: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), java.lang.Iterable, java.lang.Iterable<java.lang.RuntimeException> 6.6 +T7015430.java:42:15: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), java.lang.Iterable, java.lang.Iterable<E> 6.7 T7015430.java:51:41: compiler.warn.unchecked.meth.invocation.applied: kindname.method, empty, java.lang.Iterable<E>, java.lang.Iterable, kindname.class, T7015430 6.8 -T7015430.java:51:42: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), java.lang.Iterable, java.lang.Iterable<java.lang.RuntimeException> 6.9 +T7015430.java:51:42: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), java.lang.Iterable, java.lang.Iterable<E> 6.10 T7015430.java:69:9: compiler.warn.unchecked.meth.invocation.applied: kindname.constructor, <init>, java.lang.Iterable<E>, java.lang.Iterable, kindname.class, T7015430 6.11 -T7015430.java:69:22: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), java.lang.Iterable, java.lang.Iterable<java.lang.RuntimeException> 6.12 +T7015430.java:69:22: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), java.lang.Iterable, java.lang.Iterable<E> 6.13 T7015430.java:78:9: compiler.warn.unchecked.meth.invocation.applied: kindname.constructor, <init>, java.lang.Iterable<E>, java.lang.Iterable, kindname.class, T7015430 6.14 -T7015430.java:78:40: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), java.lang.Iterable, java.lang.Iterable<java.lang.RuntimeException> 6.15 +T7015430.java:78:40: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), java.lang.Iterable, java.lang.Iterable<E> 6.16 T7015430.java:105:9: compiler.warn.unchecked.meth.invocation.applied: kindname.constructor, <init>, java.lang.Iterable<E>, java.lang.Iterable, kindname.class, T7015430 6.17 -T7015430.java:105:41: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), java.lang.Iterable, java.lang.Iterable<java.lang.RuntimeException> 6.18 +T7015430.java:105:41: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), java.lang.Iterable, java.lang.Iterable<E> 6.19 T7015430.java:114:9: compiler.warn.unchecked.meth.invocation.applied: kindname.constructor, <init>, java.lang.Iterable<E>, java.lang.Iterable, kindname.class, T7015430 6.20 -T7015430.java:114:22: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), java.lang.Iterable, java.lang.Iterable<java.lang.RuntimeException> 6.21 +T7015430.java:114:22: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), java.lang.Iterable, java.lang.Iterable<E> 6.22 T7015430.java:130:9: compiler.err.unreported.exception.need.to.catch.or.throw: java.lang.Exception 6.23 1 error 6.24 12 warnings
7.1 --- a/test/tools/javac/generics/7151802/T7151802.out Mon Aug 19 07:47:10 2013 -0700 7.2 +++ b/test/tools/javac/generics/7151802/T7151802.out Tue Aug 20 17:34:06 2013 +0400 7.3 @@ -1,6 +1,6 @@ 7.4 T7151802.java:14:31: compiler.warn.unchecked.meth.invocation.applied: kindname.method, get1, Z, T7151802.Foo, kindname.class, T7151802 7.5 T7151802.java:22:30: compiler.warn.unchecked.meth.invocation.applied: kindname.method, get3, T7151802.Foo<Z>, T7151802.Foo, kindname.class, T7151802 7.6 -T7151802.java:22:31: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), T7151802.Foo, T7151802.Foo<java.lang.Object> 7.7 +T7151802.java:22:31: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), T7151802.Foo, T7151802.Foo<Z> 7.8 T7151802.java:30:36: compiler.warn.unchecked.meth.invocation.applied: kindname.method, get5, compiler.misc.no.args, compiler.misc.no.args, kindname.class, T7151802 7.9 T7151802.java:38:31: compiler.warn.unchecked.meth.invocation.applied: kindname.method, get7, T7151802.Foo<java.lang.String>, T7151802.Foo, kindname.class, T7151802 7.10 T7151802.java:38:32: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), T7151802.Foo, T7151802.Foo<java.lang.String>
8.1 --- a/test/tools/javac/generics/inference/6718364/T6718364.out Mon Aug 19 07:47:10 2013 -0700 8.2 +++ b/test/tools/javac/generics/inference/6718364/T6718364.out Tue Aug 20 17:34:06 2013 +0400 8.3 @@ -1,3 +1,3 @@ 8.4 T6718364.java:13:10: compiler.warn.unchecked.meth.invocation.applied: kindname.method, m, T6718364.X<T>,T, T6718364.X<T6718364.X<java.lang.Integer>>,T6718364.X, kindname.class, T6718364 8.5 -T6718364.java:13:32: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), T6718364.X, T6718364.X<java.lang.Integer> 8.6 +T6718364.java:13:32: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), T6718364.X, T 8.7 2 warnings
9.1 --- a/test/tools/javac/generics/inference/7177306/T7177306a.out Mon Aug 19 07:47:10 2013 -0700 9.2 +++ b/test/tools/javac/generics/inference/7177306/T7177306a.out Tue Aug 20 17:34:06 2013 +0400 9.3 @@ -1,5 +1,5 @@ 9.4 T7177306a.java:13:33: compiler.warn.unchecked.meth.invocation.applied: kindname.method, m, java.util.List<E>, java.util.List, kindname.class, T7177306a 9.5 -T7177306a.java:13:34: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), java.util.List, java.util.List<java.lang.Object> 9.6 +T7177306a.java:13:34: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), java.util.List, java.util.List<E> 9.7 T7177306a.java:13:33: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), T7177306a, T7177306a<java.lang.Object> 9.8 - compiler.err.warnings.and.werror 9.9 1 error