Skip to content

Commit 120f305

Browse files
authored
Scaladoc tool: render @deprecated correctly even when named arguments weren't used (#21925)
Fixes #20118 Still need a test case for this issue using jsoup
1 parent 9646f65 commit 120f305

File tree

3 files changed

+58
-14
lines changed

3 files changed

+58
-14
lines changed

scaladoc-testcases/src/tests/deprecated.scala

+51-12
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,61 @@ package tests
22
package deprecated
33

44
class A:
5-
def defInt: Int = 1
5+
def defInt: Int
6+
= 1
67
@deprecated(message = "1")
7-
def def1: 1 = 1
8+
def def1: 1
9+
= 1
810
@deprecated("reason")
9-
val valInt: Int = 1
10-
val val1: 1 = 1
11-
var varInt: Int = 1
12-
var var1: 1 = 1
11+
val valInt: Int
12+
= 1
13+
val val1: 1
14+
= 1
15+
var varInt: Int
16+
= 1
17+
var var1: 1
18+
= 1
1319
class InnerA:
14-
val innerVal: Int = 1
20+
val innerVal: Int
21+
= 1
1522

1623
class B extends A:
1724
@deprecated(since = "1", message = "some reason")
18-
def x: Int = 1
19-
val y: Int = 1
25+
def x: Int
26+
= 1
27+
val y: Int
28+
= 1
2029

21-
22-
@java.lang.Deprecated
23-
class JavaDeprecated
30+
class C:
31+
/** zero */
32+
@deprecated
33+
def noInfo: Int
34+
= 0
35+
/** one */
36+
@deprecated()
37+
def noInfo2: Int
38+
= 0
39+
/** two */
40+
@deprecated("without names", "2.10.0")
41+
def noNames: Int
42+
= 0
43+
/** three */
44+
@deprecated(message = "with names", since = "2.10.0")
45+
def withNames: Int
46+
= 1
47+
/** four */
48+
@deprecated(since = "2.10.0", message = "backwards names")
49+
def backwardNames: Int
50+
= 2
51+
/** five */
52+
@deprecated("only message")
53+
def onlyUnnamedMessage: Int
54+
= 0
55+
/** six */
56+
@deprecated(message = "only named message")
57+
def onlyNamedMessage: Int
58+
= 1
59+
/** seven */
60+
@deprecated(since = "2.10.0")
61+
def onlyNamedSince: Int
62+
= 2

scaladoc/src/dotty/tools/scaladoc/renderers/MemberRenderer.scala

+5-2
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,12 @@ class MemberRenderer(signatureRenderer: SignatureRenderer)(using DocContext) ext
8080
signatureRenderer.renderLink(stripQuotes(text), dri)
8181
case Annotation.UnresolvedParameter(_, value) => stripQuotes(value)
8282

83+
// named arguments might be used, so we can't always rely on the order of the parameters
8384
val (named, unnamed) = a.params.partition(_.name.nonEmpty)
84-
val message = named.find(_.name.get == "message")
85-
val since = named.find(_.name.get == "since")
85+
val message: Option[Annotation.AnnotationParameter] =
86+
named.find(_.name.get == "message").fold(unnamed.lift(0))(Some(_))
87+
val since: Option[Annotation.AnnotationParameter] =
88+
named.find(_.name.get == "since").fold(unnamed.lift(1))(Some(_))
8689

8790
val content = (
8891
Seq(

scaladoc/test/dotty/tools/scaladoc/signatures/TranslatableSignaturesTestCases.scala

+2
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ class GivenSignatures extends SignatureTest("givenSignatures", SignatureTest.all
5555

5656
class Annotations extends SignatureTest("annotations", SignatureTest.all)
5757

58+
class Deprecated extends SignatureTest("deprecated", SignatureTest.all)
59+
5860
class InheritanceLoop extends SignatureTest("inheritanceLoop", SignatureTest.all)
5961

6062
class InheritedMembers extends SignatureTest("inheritedMembers2", SignatureTest.all.filter(_ != "class"),

0 commit comments

Comments
 (0)