Tue, 07 May 2013 06:39:34 -0700
8014023: When a method reference to a local class constructor is contained in a method whose number of parameters matches the number of constructor parameters compilation fails
Reviewed-by: mcimadamore
1.1 --- a/src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java Mon May 06 16:22:45 2013 +0200 1.2 +++ b/src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java Tue May 07 06:39:34 2013 -0700 1.3 @@ -1252,8 +1252,17 @@ 1.4 List<Type> ptypes = ((MethodType) consSym.type).getParameterTypes(); 1.5 Type classType = consSym.owner.type; 1.6 1.7 + // Build lambda parameters 1.8 + // partially cloned from TreeMaker.Params until 8014021 is fixed 1.9 + Symbol owner = owner(); 1.10 + ListBuffer<JCVariableDecl> paramBuff = new ListBuffer<JCVariableDecl>(); 1.11 + int i = 0; 1.12 + for (List<Type> l = ptypes; l.nonEmpty(); l = l.tail) { 1.13 + paramBuff.append(make.Param(make.paramName(i++), l.head, owner)); 1.14 + } 1.15 + List<JCVariableDecl> params = paramBuff.toList(); 1.16 + 1.17 // Make new-class call 1.18 - List<JCVariableDecl> params = make.Params(ptypes, owner()); 1.19 JCNewClass nc = makeNewClass(classType, make.Idents(params)); 1.20 nc.pos = tree.pos; 1.21
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 2.2 +++ b/test/tools/javac/lambda/methodReference/TreeMakerParamsIsGoofy.java Tue May 07 06:39:34 2013 -0700 2.3 @@ -0,0 +1,53 @@ 2.4 +/* 2.5 + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. 2.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 2.7 + * 2.8 + * This code is free software; you can redistribute it and/or modify it 2.9 + * under the terms of the GNU General Public License version 2 only, as 2.10 + * published by the Free Software Foundation. 2.11 + * 2.12 + * This code is distributed in the hope that it will be useful, but WITHOUT 2.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 2.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 2.15 + * version 2 for more details (a copy is included in the LICENSE file that 2.16 + * accompanied this code). 2.17 + * 2.18 + * You should have received a copy of the GNU General Public License version 2.19 + * 2 along with this work; if not, write to the Free Software Foundation, 2.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 2.21 + * 2.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 2.23 + * or visit www.oracle.com if you need additional information or have any 2.24 + * questions. 2.25 + */ 2.26 + 2.27 +/** 2.28 + * @test 2.29 + * @bug 8014023 2.30 + * @summary When a method reference to a local class constructor is contained 2.31 + * in a method whose number of parameters matches the number of 2.32 + * constructor parameters compilation fails 2.33 + * @compile TreeMakerParamsIsGoofy.java 2.34 + * @run main TreeMakerParamsIsGoofy 2.35 + */ 2.36 + 2.37 +public class TreeMakerParamsIsGoofy { 2.38 + 2.39 + interface III { } 2.40 + 2.41 + interface UO { 2.42 + III m(III x); 2.43 + } 2.44 + 2.45 + public static void main(String[] args) { 2.46 + class BA implements III { 2.47 + BA(III b) { 2.48 + } 2.49 + } 2.50 + 2.51 + ts(BA::new); 2.52 + } 2.53 + 2.54 + static void ts(UO ba) { 2.55 + } 2.56 +}