Mercurial > hg > release > icedtea7-forest-2.2 > langtools
changeset 1134:8031a8112618
7086586: Inference producing null type argument
Reviewed-by: mcimadamore, forax
author | dmeetry |
---|---|
date | Sat, 15 Oct 2011 17:40:24 +0400 |
parents | abab66e88efd |
children | d4ea063b55af |
files | src/share/classes/com/sun/tools/javac/comp/Infer.java test/tools/javac/generics/inference/7086586/T7086586.java test/tools/javac/generics/inference/7086586/T7086586.out |
diffstat | 3 files changed, 33 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/com/sun/tools/javac/comp/Infer.java Thu Sep 22 06:56:32 2011 -0700 +++ b/src/share/classes/com/sun/tools/javac/comp/Infer.java Sat Oct 15 17:40:24 2011 +0400 @@ -249,6 +249,13 @@ } }; + private final Filter<Type> botFilter = new Filter<Type>() { + @Override + public boolean accepts(Type t) { + return t.tag != BOT; + } + }; + /** Instantiate undetermined type variable to the lub of all its lower bounds. * Throw a NoInstanceException if this not possible. */ @@ -470,7 +477,8 @@ UndetVar uv = (UndetVar)t; if (uv.qtype == tv) { switch (ck) { - case EXTENDS: return uv.hibounds.appendList(types.subst(types.getBounds(tv), all_tvars, inferredTypes)); + case EXTENDS: return Type.filter(uv.hibounds, botFilter) + .appendList(types.subst(types.getBounds(tv), all_tvars, inferredTypes)); case SUPER: return uv.lobounds; case EQUAL: return uv.inst != null ? List.of(uv.inst) : List.<Type>nil(); }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/generics/inference/7086586/T7086586.java Sat Oct 15 17:40:24 2011 +0400 @@ -0,0 +1,19 @@ +/** + * @test /nodynamiccopyright/ + * @bug 7086586 + * @summary Inference producing null type argument + * @compile/fail/ref=T7086586.out -XDrawDiagnostics T7086586.java + */ +import java.util.List; + +class T7086586 { + + <T> List<T> m(List<? super T> dummy) { return null; } + + void test(List<?> l) { + String s = m(l).get(0); + Number n = m(l).get(0); + Exception e = m(l).get(0); + m(l).nonExistentMethod(); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/generics/inference/7086586/T7086586.out Sat Oct 15 17:40:24 2011 +0400 @@ -0,0 +1,5 @@ +T7086586.java:14:21: compiler.err.invalid.inferred.types: T, (compiler.misc.no.conforming.assignment.exists: java.util.List<compiler.misc.type.captureof: 1, ?>, java.util.List<? super java.lang.Object>) +T7086586.java:15:21: compiler.err.invalid.inferred.types: T, (compiler.misc.no.conforming.assignment.exists: java.util.List<compiler.misc.type.captureof: 1, ?>, java.util.List<? super java.lang.Object>) +T7086586.java:16:24: compiler.err.invalid.inferred.types: T, (compiler.misc.no.conforming.assignment.exists: java.util.List<compiler.misc.type.captureof: 1, ?>, java.util.List<? super java.lang.Object>) +T7086586.java:17:10: compiler.err.invalid.inferred.types: T, (compiler.misc.no.conforming.assignment.exists: java.util.List<compiler.misc.type.captureof: 1, ?>, java.util.List<? super java.lang.Object>) +4 errors