changeset 3602:12470d69d5ae

8061305: Javadoc crashes when method name ends with "Property" Reviewed-by: jjg
author sgehwolf
date Tue, 19 Jun 2018 12:03:35 +0200
parents db3c95ad8335
children a0081a63abee
files src/share/classes/com/sun/tools/doclets/internal/toolkit/util/VisibleMemberMap.java test/com/sun/javadoc/testMethodEndingInProperty/Test.java test/com/sun/javadoc/testMethodEndingInProperty/TestMethodEndingInProperty.java
diffstat 3 files changed, 105 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/VisibleMemberMap.java	Fri Apr 13 18:20:32 2018 +0000
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/VisibleMemberMap.java	Tue Jun 19 12:03:35 2018 +0200
@@ -664,6 +664,9 @@
         // properties aren't named setA* or getA*
         private final Pattern pattern = Pattern.compile("[sg]et\\p{Upper}.*");
         private boolean isPropertyMethod(MethodDoc method) {
+            if (!configuration.javafx) {
+               return false;
+            }
             if (!method.name().endsWith("Property")) {
                 return false;
             }
@@ -675,7 +678,9 @@
             if (pattern.matcher(method.name()).matches()) {
                 return false;
             }
-
+            if (method.typeParameters().length > 0) {
+                return false;
+            }
             return 0 == method.parameters().length
                     && !"void".equals(method.returnType().simpleTypeName());
         }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/com/sun/javadoc/testMethodEndingInProperty/Test.java	Tue Jun 19 12:03:35 2018 +0200
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2012, 2018, 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.
+ */
+
+public class Test {
+    public <T> Object fProperty() { return null; }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/com/sun/javadoc/testMethodEndingInProperty/TestMethodEndingInProperty.java	Tue Jun 19 12:03:35 2018 +0200
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2012, 2018, 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 8061305
+ * @summary Test methods ending in 'Property'
+ * @library ../lib/
+ * @build JavadocTester TestMethodEndingInProperty
+ * @run main TestMethodEndingInProperty
+ */
+
+public class TestMethodEndingInProperty extends JavadocTester {
+
+    private static final String BUG_ID = "8061305";
+    private static final String ERROR_OUTPUT = "com.sun.tools.doclets.formats.html.PropertyWriterImpl " +
+                                               "cannot be cast to " +
+                                               "com.sun.tools.doclets.formats.html.AbstractExecutableMemberWriter";
+
+    private static final String[] ARGS = new String[] {
+        "-d", BUG_ID, "-sourcepath", SRC_DIR, SRC_DIR + FS + "Test.java"
+    };
+
+    /**
+     * The entry point of the test.
+     * @param args the array of command line arguments.
+     */
+    public static void main(String[] args) {
+        TestMethodEndingInProperty tester = new TestMethodEndingInProperty();
+        int actual = tester.runJavadoc(ARGS);
+        int expected = 0;
+        tester.checkExitCode(expected, actual);
+        String errOut = tester.getErrorOutput();
+        if (errOut.contains(ERROR_OUTPUT)) {
+            throw new Error("Error output contained: " + ERROR_OUTPUT);
+        }
+        System.out.println("Test passed");
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getBugId() {
+        return BUG_ID;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getBugName() {
+        return getClass().getName();
+    }
+}