Skip to content

Commit 61dc746

Browse files
HarrisL2SethTisue
authored andcommitted
Scaladoc tool: handle more forms of @deprecated correctly
Fixes #20118
1 parent 20e6f11 commit 61dc746

File tree

3 files changed

+58
-15
lines changed

3 files changed

+58
-15
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-3
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,11 @@ class MemberRenderer(signatureRenderer: SignatureRenderer)(using DocContext) ext
8080
signatureRenderer.renderLink(stripQuotes(text), dri)
8181
case Annotation.UnresolvedParameter(_, value) => stripQuotes(value)
8282

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

8789
val content = (
8890
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)