8174805: JavacTrees should use Types.skipTypeVars() to get the upper bound of type variables
authorvromero
Thu, 16 Feb 2017 14:47:39 -0800
changeset 43879 a6dc784b18a8
parent 43878 4b0a3bda61d3
child 43880 b5015f742ba6
child 43911 617f24021323
child 44013 81d8706c9a3e
child 44015 27aa35eb727c
8174805: JavacTrees should use Types.skipTypeVars() to get the upper bound of type variables Reviewed-by: jjg, ksrini
langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/api/JavacTrees.java
langtools/test/jdk/javadoc/doclet/testTypeVariableLinks/TestTypeVariableLinks.java
langtools/test/jdk/javadoc/doclet/testTypeVariableLinks/pkg1/C.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/api/JavacTrees.java	Thu Feb 16 12:49:44 2017 -0800
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/api/JavacTrees.java	Thu Feb 16 14:47:39 2017 -0800
@@ -483,7 +483,7 @@
                 paramTypes = lb.toList();
             }
 
-            ClassSymbol sym = (ClassSymbol) types.cvarUpperBound(tsym.type).tsym;
+            ClassSymbol sym = (ClassSymbol) types.skipTypeVars(tsym.type, false).tsym;
 
             Symbol msym = (memberName == sym.name)
                     ? findConstructor(sym, paramTypes)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/jdk/javadoc/doclet/testTypeVariableLinks/TestTypeVariableLinks.java	Thu Feb 16 14:47:39 2017 -0800
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2017, 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 8174805
+ * @summary JavacTrees should use Types.skipTypeVars() to get the upper bound of type variables
+ * @library ../lib
+ * @modules jdk.javadoc/jdk.javadoc.internal.tool
+ * @build JavadocTester
+ * @run main TestTypeVariableLinks
+ */
+
+public class TestTypeVariableLinks extends JavadocTester {
+
+    public static void main(String... args) throws Exception {
+        TestTypeVariableLinks tester = new TestTypeVariableLinks();
+        tester.runTests();
+    }
+
+    @Test
+    void test1() {
+        javadoc("-d", "out", "-sourcepath", testSrc, "-package", "pkg1");
+        checkExit(Exit.OK);
+
+        checkOutput("pkg1/C.html", true,
+                "<div class=\"block\">Linking to Object.equals() <code>Object.equals(Object)</code></div>");
+        checkOutput("pkg1/C.html", true,
+                "<div class=\"block\">Linking to List.clear() <code>List.clear()</code></div>");
+        checkOutput("pkg1/C.html", true,
+                "<div class=\"block\">Linking to Additional.doAction() <a href=\"../pkg1/Additional.html#doAction--\"><code>Additional.doAction()</code></a></div>");
+        checkOutput("pkg1/C.html", true,
+                "<div class=\"block\">Linking to I.abstractAction() <a href=\"../pkg1/I.html#abstractAction--\"><code>I.abstractAction()</code></a></div>");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/jdk/javadoc/doclet/testTypeVariableLinks/pkg1/C.java	Thu Feb 16 14:47:39 2017 -0800
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2017, 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.
+ */
+
+package pkg1;
+
+import java.util.List;
+
+public class C<T, F extends List<String>, G extends Additional & I> {
+    /**
+     * Linking to Object.equals() {@link T#equals(Object)}
+     */
+    public void m1() {}
+    /**
+     * Linking to List.clear() {@link F#clear()}
+     */
+    public void m2() {}
+    /**
+     * Linking to Additional.doAction() {@link G#doAction()}
+     */
+    public void m3() {}
+    /**
+     * Linking to I.abstractAction() {@link G#abstractAction()}
+     */
+    public void m4() {}
+}
+
+class Additional {
+    public void doAction() {}
+}
+
+interface I {
+    void abstractAction();
+}