8243533: Only one of several deprecated overloaded methods listed in the Deprecated list

Reviewed-by: jjg
This commit is contained in:
Hannes Wallnöfer 2020-06-19 18:21:08 +02:00
parent 9d40d80237
commit 2e6923ffd6
4 changed files with 154 additions and 32 deletions
src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets
test/langtools/jdk/javadoc/doclet/testDeprecatedDocs

@ -205,8 +205,6 @@ public class DeprecatedListWriter extends SubWriterHolderWriter {
private EnumMap<DeprElementKind, AbstractMemberWriter> writerMap;
private HtmlConfiguration configuration;
private final Navigation navBar;
/**
@ -218,7 +216,6 @@ public class DeprecatedListWriter extends SubWriterHolderWriter {
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);

@ -139,9 +139,15 @@ public class Comparators {
@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 @@ public class Comparators {
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 @@ public class Comparators {
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 @@ public class Comparators {
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));
}

@ -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,9 +164,28 @@ public class TestDeprecatedDocs extends JavadocTester {
</td>""",
"""
<td class="col-last">
<div class="block"><span class="deprecated-label">Deprecated.</span>
<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_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>""");
checkOutput("pkg/TestClass.html", false,
@ -355,6 +374,78 @@ public class TestDeprecatedDocs extends JavadocTester {
</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>""");
}
}

@ -41,7 +41,23 @@ public class TestClass {
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) {}
}