Mercurial > hg > openjdk > lambda > langtools
changeset 2250:e13d3a6dfaa6
8023389: Javac fails to infer type for lambda used with intersection type and wildcards
author | mcimadamore |
---|---|
date | Tue, 20 Aug 2013 18:13:09 +0100 |
parents | 654796cd8e47 |
children | ef024c4b4c97 |
files | src/share/classes/com/sun/tools/javac/comp/Attr.java test/tools/javac/lambda/8023389/T8023389.java |
diffstat | 2 files changed, 46 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/com/sun/tools/javac/comp/Attr.java Mon Aug 12 13:47:51 2013 +0100 +++ b/src/share/classes/com/sun/tools/javac/comp/Attr.java Tue Aug 20 18:13:09 2013 +0100 @@ -2316,12 +2316,14 @@ //attribute lambda parameters attribStats(that.params, localEnv); explicitParamTypes = TreeInfo.types(that.params); - target = infer.instantiateFunctionalInterface(that, target, explicitParamTypes, resultInfo.checkContext); } Type lambdaType; if (pt() != Type.recoveryType) { target = targetChecker.visit(target, that); + if (explicitParamTypes != null) { + target = infer.instantiateFunctionalInterface(that, target, explicitParamTypes, resultInfo.checkContext); + } lambdaType = types.findDescriptorType(target); } else { target = Type.recoveryType;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/lambda/8023389/T8023389.java Tue Aug 20 18:13:09 2013 +0100 @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8023389 + * @summary Javac fails to infer type for lambda used with intersection type and wildcards + * @compile T8023389.java + */ +class T8023389 { + + static class U1 {} + static class X1 extends U1 {} + + interface I { } + + interface SAM<T> { + void m(T t); + } + + SAM<? extends U1> sam1 = (SAM<? extends U1>) (X1 x) -> { }; + SAM<? extends U1> sam2 = (SAM<? extends U1> & I) (X1 x) -> { }; +}