changeset 59871:ac36f341fca0

8243533: Only one of several deprecated overloaded methods listed in the Deprecated list Reviewed-by: jjg
author hannesw
date Fri, 19 Jun 2020 18:21:08 +0200
parents 28501e8a0f8d
children e93c48b9cf55
files src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/DeprecatedListWriter.java src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Comparators.java test/langtools/jdk/javadoc/doclet/testDeprecatedDocs/TestDeprecatedDocs.java test/langtools/jdk/javadoc/doclet/testDeprecatedDocs/pkg/TestClass.java
diffstat 4 files changed, 154 insertions(+), 32 deletions(-) [+]
line wrap: on
line diff
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/DeprecatedListWriter.java	Fri Jun 19 16:42:52 2020 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/DeprecatedListWriter.java	Fri Jun 19 18:21:08 2020 +0200
@@ -205,8 +205,6 @@
 
     private EnumMap<DeprElementKind, AbstractMemberWriter> writerMap;
 
-    private HtmlConfiguration configuration;
-
     private final Navigation navBar;
 
     /**
@@ -218,7 +216,6 @@
 
     public DeprecatedListWriter(HtmlConfiguration configuration, DocPath filename) {
         super(configuration, filename);
-        this.configuration = configuration;
         this.navBar = new Navigation(null, configuration, PageMode.DEPRECATED, path);
         NestedClassWriterImpl classW = new NestedClassWriterImpl(this);
         writerMap = new EnumMap<>(DeprElementKind.class);
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Comparators.java	Fri Jun 19 16:42:52 2020 +0100
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Comparators.java	Fri Jun 19 18:21:08 2020 +0200
@@ -139,9 +139,15 @@
                 @Override
                 public int compare(Element e1, Element e2) {
                     int result = compareFullyQualifiedNames(e1, e2);
-                    if (result == 0)
-                        result = compareModuleNames(e1, e2);
-                    return result;
+                    if (result != 0) {
+                        return result;
+                    }
+                    // if elements are executable compare their parameter arrays
+                    result = compareParameters(e1, e2);
+                    if (result != 0) {
+                        return result;
+                    }
+                    return compareModuleNames(e1, e2);
                 }
             };
         }
@@ -256,19 +262,11 @@
                     if (result != 0) {
                         return result;
                     }
-                    // if element kinds are the same, and are methods,
-                    // compare the method parameters
-                    if (hasParameters(e1)) {
-                        List<? extends VariableElement> parameters1 = ((ExecutableElement)e1).getParameters();
-                        List<? extends VariableElement> parameters2 = ((ExecutableElement)e2).getParameters();
-                        result = compareParameters(false, parameters1, parameters2);
-                        if (result != 0) {
-                            return result;
-                        }
-                        result = compareParameters(true, parameters1, parameters2);
-                        if (result != 0) {
-                            return result;
-                        }
+                    // if element kinds are the same, and are executable,
+                    // compare the parameter arrays
+                    result = compareParameters(e1, e2);
+                    if (result != 0) {
+                        return result;
                     }
                     // else fall back on fully qualified names
                     result = compareFullyQualifiedNames(e1, e2);
@@ -383,15 +381,7 @@
                     if (result != 0) {
                         return result;
                     }
-                    if (hasParameters(e1) && hasParameters(e2)) {
-                        List<? extends VariableElement> parameters1 = ((ExecutableElement)e1).getParameters();
-                        List<? extends VariableElement> parameters2 = ((ExecutableElement)e2).getParameters();
-                        result = compareParameters(false, parameters1, parameters2);
-                        if (result != 0) {
-                            return result;
-                        }
-                        result = compareParameters(true, parameters1, parameters2);
-                    }
+                    result = compareParameters(e1, e2);
                     if (result != 0) {
                         return result;
                     }
@@ -504,6 +494,34 @@
             return 0;
         }
 
+        /**
+         * Compares the parameter arrays of two elements if they both are executable.
+         * @param e1 the first element
+         * @param e2 the second element
+         * @return a negative integer, zero, or a positive integer as the first
+         *         argument is less than, equal to, or greater than the second
+         */
+        protected int compareParameters(Element e1, Element e2) {
+            int result = 0;
+            if (hasParameters(e1) && hasParameters(e2)) {
+                List<? extends VariableElement> parameters1 = ((ExecutableElement)e1).getParameters();
+                List<? extends VariableElement> parameters2 = ((ExecutableElement)e2).getParameters();
+                result = compareParameters(false, parameters1, parameters2);
+                if (result != 0) {
+                    return result;
+                }
+                result = compareParameters(true, parameters1, parameters2);
+            }
+            return result;
+        }
+
+        /**
+         * Compares the kinds of two elements.
+         * @param e1 the first element
+         * @param e2 the second element
+         * @return a negative integer, zero, or a positive integer as the first
+         *         argument is less than, equal to, or greater than the second
+         */
         protected int compareElementKinds(Element e1, Element e2) {
             return Integer.compare(getKindIndex(e1), getKindIndex(e2));
         }
--- a/test/langtools/jdk/javadoc/doclet/testDeprecatedDocs/TestDeprecatedDocs.java	Fri Jun 19 16:42:52 2020 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testDeprecatedDocs/TestDeprecatedDocs.java	Fri Jun 19 18:21:08 2020 +0200
@@ -24,7 +24,7 @@
 /*
  * @test
  * @bug      4927552 8026567 8071982 8162674 8175200 8175218 8183511 8186332
- *           8169819 8074407 8191030 8182765 8184205
+ *           8169819 8074407 8191030 8182765 8184205 8243533
  * @summary  test generated docs for deprecated items
  * @library  ../../lib
  * @modules jdk.javadoc/jdk.javadoc.internal.tool
@@ -164,8 +164,27 @@
                     </td>""",
                 """
                     <td class="col-last">
+                    <div class="block"><span class="deprecated-label">Deprecated, for removal: This \
+                    API element is subject to removal in a future version.</span>
+                    <div class="deprecation-comment">class_test4 passes.</div>
+                    </div>
+                    </td>""",
+                """
+                    <td class="col-last">
                     <div class="block"><span class="deprecated-label">Deprecated.</span>
-                    <div class="deprecation-comment">class_test4 passes.</div>
+                    <div class="deprecation-comment">class_test5 passes.</div>
+                    </div>
+                    </td>""",
+                """
+                    <td class="col-last">
+                    <div class="block"><span class="deprecated-label">Deprecated.</span>
+                    <div class="deprecation-comment">class_test6 passes.</div>
+                    </div>
+                    </td>""",
+                """
+                    <td class="col-last">
+                    <div class="block"><span class="deprecated-label">Deprecated.</span>
+                    <div class="deprecation-comment">class_test7 passes.</div>
                     </div>
                     </td>""");
 
@@ -355,6 +374,78 @@
                     </tr>
                     </tbody>
                     </table>
-                    </div>""");
+                    </div>""",
+                """
+                    <div class="deprecated-summary" id="method">
+                    <table class="summary-table">
+                    <caption><span>Methods</span></caption>
+                    <thead>
+                    <tr>
+                    <th class="col-first" scope="col">Method</th>
+                    <th class="col-last" scope="col">Description</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <tr class="alt-color">
+                    <th class="col-deprecated-item-name" scope="row"><a href="pkg/DeprecatedClassByAnnotation.html#method()">pkg.DeprecatedClassByAnnotation.method()</a></th>
+                    <td class="col-last"></td>
+                    </tr>
+                    <tr class="row-color">
+                    <th class="col-deprecated-item-name" scope="row"><a href="pkg/TestAnnotationType.html#optional()">pkg.TestAnnotationType.optional()</a></th>
+                    <td class="col-last">
+                    <div class="deprecation-comment">annotation_test2 passes.</div>
+                    </td>
+                    </tr>
+                    <tr class="alt-color">
+                    <th class="col-deprecated-item-name" scope="row"><a href="pkg/TestAnnotationType.html#required()">pkg.TestAnnotationType.required()</a></th>
+                    <td class="col-last">
+                    <div class="deprecation-comment">annotation_test3 passes.</div>
+                    </td>
+                    </tr>
+                    <tr class="row-color">
+                    <th class="col-deprecated-item-name" scope="row"><a href="pkg/TestClass.html#method()">pkg.TestClass.method()</a></th>
+                    <td class="col-last">
+                    <div class="deprecation-comment">class_test5 passes. This is the second sentence of deprecated description for a method.</div>
+                    </td>
+                    </tr>
+                    <tr class="alt-color">
+                    <th class="col-deprecated-item-name" scope="row"><a href="pkg/TestClass.html#overloadedMethod(int)">pkg.TestClass.overloadedMethod&#8203;(int)</a></th>
+                    <td class="col-last">
+                    <div class="deprecation-comment">class_test7 passes. Overloaded method 2.</div>
+                    </td>
+                    </tr>
+                    <tr class="row-color">
+                    <th class="col-deprecated-item-name" scope="row"><a href="pkg/TestClass.html#overloadedMethod(java.lang.String)">pkg.TestClass.overloadedMethod&#8203;(String)</a></th>
+                    <td class="col-last">
+                    <div class="deprecation-comment">class_test6 passes. Overloaded method 1.</div>
+                    </td>
+                    </tr>""",
+                """
+                    <div class="deprecated-summary" id="constructor">
+                    <table class="summary-table">
+                    <caption><span>Constructors</span></caption>
+                    <thead>
+                    <tr>
+                    <th class="col-first" scope="col">Constructor</th>
+                    <th class="col-last" scope="col">Description</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    <tr class="alt-color">
+                    <th class="col-deprecated-item-name" scope="row"><a href="pkg/DeprecatedClassByAnnotation.html#%3Cinit%3E()">pkg.DeprecatedClassByAnnotation()</a></th>
+                    <td class="col-last"></td>
+                    </tr>
+                    <tr class="row-color">
+                    <th class="col-deprecated-item-name" scope="row"><a href="pkg/TestClass.html#%3Cinit%3E()">pkg.TestClass()</a></th>
+                    <td class="col-last">
+                    <div class="deprecation-comment">class_test3 passes. This is the second sentence of deprecated description for a constructor.</div>
+                    </td>
+                    </tr>
+                    <tr class="alt-color">
+                    <th class="col-deprecated-item-name" scope="row"><a href="pkg/TestClass.html#%3Cinit%3E(java.lang.String)">pkg.TestClass&#8203;(String)</a></th>
+                    <td class="col-last">
+                    <div class="deprecation-comment">class_test4 passes. Overloaded constructor.</div>
+                    </td>
+                    </tr>""");
     }
 }
--- a/test/langtools/jdk/javadoc/doclet/testDeprecatedDocs/pkg/TestClass.java	Fri Jun 19 16:42:52 2020 +0100
+++ b/test/langtools/jdk/javadoc/doclet/testDeprecatedDocs/pkg/TestClass.java	Fri Jun 19 18:21:08 2020 +0200
@@ -41,7 +41,23 @@
     public TestClass() {}
 
     /**
-     * @deprecated class_test4 passes. This is the second sentence of deprecated description for a method.
+     * @deprecated class_test4 passes. Overloaded constructor.
+     */
+    @Deprecated(forRemoval=true)
+    public TestClass(String s) {}
+
+    /**
+     * @deprecated class_test5 passes. This is the second sentence of deprecated description for a method.
      */
     public void method() {}
+
+    /**
+     * @deprecated class_test6 passes. Overloaded method 1.
+     */
+    public void overloadedMethod(String s) {}
+
+    /**
+     * @deprecated class_test7 passes. Overloaded method 2.
+     */
+    public void overloadedMethod(int i) {}
 }