changeset 3224:4a4f58f3b344

8148128: Regression: array constructor references marked as inexact Summary: Missing check in constructor reference stuckness check Reviewed-by: vromero
author mcimadamore
date Tue, 26 Jan 2016 12:11:55 +0000
parents 94cfc50c1b8a
children 3a9a4b5eabe4 0d9c7e282d95
files src/jdk.compiler/share/classes/com/sun/tools/javac/comp/ArgumentAttr.java test/tools/javac/lambda/8148128/T8148128.java
diffstat 2 files changed, 49 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/ArgumentAttr.java	Mon Jan 25 19:01:32 2016 +0000
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/ArgumentAttr.java	Tue Jan 26 12:11:55 2016 +0000
@@ -68,6 +68,7 @@
 import java.util.function.Function;
 import java.util.function.Supplier;
 
+import static com.sun.tools.javac.code.TypeTag.ARRAY;
 import static com.sun.tools.javac.code.TypeTag.DEFERRED;
 import static com.sun.tools.javac.code.TypeTag.FORALL;
 import static com.sun.tools.javac.code.TypeTag.METHOD;
@@ -275,7 +276,7 @@
                 res.type != null && res.type.hasTag(FORALL) ||
                 (res.flags() & Flags.VARARGS) != 0 ||
                 (TreeInfo.isStaticSelector(exprTree, tree.name.table.names) &&
-                exprTree.type.isRaw())) {
+                exprTree.type.isRaw() && !exprTree.type.hasTag(ARRAY))) {
             tree.overloadKind = JCMemberReference.OverloadKind.OVERLOADED;
         } else {
             tree.overloadKind = JCMemberReference.OverloadKind.UNOVERLOADED;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/tools/javac/lambda/8148128/T8148128.java	Tue Jan 26 12:11:55 2016 +0000
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2016, 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.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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 8148128
+ * @summary Regression: array constructor references marked as inexact
+ * @compile T8148128.java
+ */
+import java.util.*;
+import java.util.stream.*;
+
+class T8148128 {
+    public static void doSomething (List<String>[] stuff) {
+        System.out.println("List Stuff");
+    }
+
+    public static void doSomething (Set<String>[] stuff) {
+        System.out.println("Set Stuff");
+    }
+
+    public static void main (String[] args) {
+        doSomething(Stream.of("Foo", "Bar").map(Collections::singletonList).toArray(List[]::new));
+    }
+}