Skip to content

Commit 471271b

Browse files
committed
Fix deprecation for java.lang.Deprecated
1 parent 53473a8 commit 471271b

File tree

9 files changed

+38
-63
lines changed

9 files changed

+38
-63
lines changed

scala3doc-testcases/src/tests/deprecated.scala

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
package tests
2-
package deprecated
2+
package deprecated
33

44
class A:
55
def defInt: Int = 1
@@ -17,3 +17,7 @@ class B extends A:
1717
@deprecated(since = "1", message = "some reason")
1818
def x: Int = 1
1919
val y: Int = 1
20+
21+
22+
@java.lang.Deprecated(since = "1.1")
23+
class JavaDeprecated

scala3doc/src/dotty/dokka/model/api/api.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ extension[T] (member: Member)
162162

163163
def signature: Signature = memberExt.fold(Signature(name))(_.signature)
164164
def asLink: LinkToType = LinkToType(signature, dri, kind)
165-
def deprecated: Option[Annotation] = memberExt.flatMap(_.annotations.find(a => a.dri.getPackageName == "scala" && a.dri.getClassNames == "deprecated"))
165+
def deprecated: Option[Annotation] = memberExt.fold(None)(_.deprecated)
166166

167167
def modifiers: Seq[dotty.dokka.model.api.Modifier] = memberExt.fold(Nil)(_.modifiers)
168168
def kind: Kind = memberExt.fold(Kind.Unknown)(_.kind)

scala3doc/src/dotty/dokka/model/api/internalExtensions.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ case class MemberExtension(
3131
origin: Origin = Origin.RegularlyDefined,
3232
inheritedFrom: Option[InheritedFrom] = None,
3333
graph: HierarchyGraph = HierarchyGraph.empty,
34-
rawDoc: Option[Comment] = None
34+
rawDoc: Option[Comment] = None,
35+
deprecated: Option[Annotation] = None
3536
) extends ExtraProperty[Documentable]:
3637
override def getKey = MemberExtension
3738

scala3doc/src/dotty/dokka/model/scalaModel.scala

Lines changed: 2 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,7 @@ case class HtmlContentNode(
3434
class ScalaTagWrapper(root: DocTag, val name: String) extends TagWrapper(null):
3535
override def getRoot = root
3636

37-
object ScalaTagWrapper {
38-
37+
object ScalaTagWrapper:
3938
case class See(root: DocTag) extends ScalaTagWrapper(root, "See")
4039
case class Todo(root: DocTag) extends ScalaTagWrapper(root, "Todo")
4140
case class Note(root: DocTag) extends ScalaTagWrapper(root, "Note")
@@ -48,11 +47,9 @@ object ScalaTagWrapper {
4847
) extends NamedTagWrapper(null):
4948
override def getName = name
5049
override def getRoot = descTag
51-
}
5250

5351
case class ImplicitConversion(conversion: Documentable, from: DRI, to: DRI)
5452

55-
5653
case class ContentNodeParams(
5754
val dci: DCI,
5855
val sourceSets: java.util.Set[DisplaySourceSet],
@@ -74,45 +71,6 @@ abstract class ScalaContentNode(params: ContentNodeParams) extends ContentNode:
7471
override def getExtra = params.extra
7572
override def withNewExtras(p: PropertyContainer[ContentNode]) = newInstance(params.copy(extra = p))
7673

77-
case class DocumentableNameWithStyles(
78-
name: String,
79-
styles: Set[Style] = Set.empty,
80-
)
81-
82-
case class DocumentableElement(
83-
annotations: Signature,
84-
modifiers: Signature,
85-
nameWithStyles: DocumentableNameWithStyles,
86-
signature: Signature,
87-
brief: Seq[ContentNode],
88-
originInfo: Signature,
89-
attributes: Map[String, String],
90-
params: ContentNodeParams,
91-
member: Member
92-
) extends ScalaContentNode(params):
93-
override def newInstance(params: ContentNodeParams) = copy(params = params)
94-
95-
case class DocumentableElementGroup(
96-
header: Signature,
97-
elements: Seq[DocumentableElement],
98-
params: ContentNodeParams
99-
) extends ScalaContentNode(params):
100-
override def newInstance(params: ContentNodeParams) = copy(params = params)
101-
override def hasAnyContent = elements.nonEmpty
102-
override def getChildren: JList[ContentNode] = elements.asJava
103-
104-
case class DocumentableList(
105-
groupName: Signature,
106-
elements: Seq[DocumentableElement | DocumentableElementGroup],
107-
params: ContentNodeParams
108-
) extends ScalaContentNode(params):
109-
override def newInstance(params: ContentNodeParams) = copy(params = params)
110-
override def hasAnyContent = elements.nonEmpty
111-
override def getChildren: JList[ContentNode] = elements.asJava
112-
113-
case class DocumentableFilter(params: ContentNodeParams) extends ScalaContentNode(params):
114-
override def newInstance(params: ContentNodeParams) = copy(params = params)
115-
11674
case class MemberInfo(member: Member, params: ContentNodeParams)
11775
extends ScalaContentNode(params):
118-
override def newInstance(params: ContentNodeParams) = copy(params = params)
76+
override def newInstance(params: ContentNodeParams) = copy(params = params)

scala3doc/src/dotty/dokka/tasty/BasicSupport.scala

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,12 @@ trait BasicSupport:
4545
def getAnnotations(): List[Annotation] =
4646
sym.annotations.filterNot(_.symbol.packageName.startsWith("scala.annotation.internal")).map(parseAnnotation).reverse
4747

48+
def isDeprecated(): Option[Annotation] =
49+
sym.annotations.find { a =>
50+
a.symbol.packageName == "scala" && a.symbol.className.fold(false)(_ == "deprecated") ||
51+
a.symbol.packageName == "java.lang" && a.symbol.className.fold(false)(_ == "Deprecated")
52+
}.map(parseAnnotation)
53+
4854
def isLeftAssoc: Boolean = !sym.name.endsWith(":")
4955

5056

scala3doc/src/dotty/dokka/tasty/ClassLikeSupport.scala

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,8 @@ trait ClassLikeSupport:
107107
classDef.symbol.getAnnotations(),
108108
selfSiangture,
109109
classDef.symbol.source(using qctx),
110-
graph = graph
110+
graph = graph,
111+
deprecated = classDef.symbol.isDeprecated()
111112
),
112113
compositeExt
113114
)
@@ -375,7 +376,8 @@ trait ClassLikeSupport:
375376
methodSymbol.getAnnotations(),
376377
memberInfo.res.dokkaType.asSignature,
377378
methodSymbol.source(using qctx),
378-
origin
379+
origin,
380+
deprecated = methodSymbol.isDeprecated()
379381
)
380382
)
381383

@@ -430,8 +432,9 @@ trait ClassLikeSupport:
430432
Kind.Type(!isTreeAbstract(typeDef.rhs), typeDef.symbol.isOpaque, generics),
431433
typeDef.symbol.getAnnotations(),
432434
tpeTree.dokkaType.asSignature,
433-
typeDef.symbol.source(using qctx)
434-
)
435+
typeDef.symbol.source(using qctx),
436+
deprecated = typeDef.symbol.isDeprecated()
437+
)
435438
)
436439

437440
def parseValDef(c: ClassDef, valDef: ValDef): Member =
@@ -449,7 +452,8 @@ trait ClassLikeSupport:
449452
kind,
450453
valDef.symbol.getAnnotations(),
451454
memberInfo.res.dokkaType.asSignature,
452-
valDef.symbol.source(using qctx)
455+
valDef.symbol.source(using qctx),
456+
deprecated = valDef.symbol.isDeprecated()
453457
)
454458
)
455459

scala3doc/src/dotty/dokka/translators/ScalaSignatureUtils.scala

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,11 @@ trait SignatureBuilder extends ScalaSignatureUtils {
5656

5757
private def buildAnnotationParams(a: Annotation): SignatureBuilder =
5858
if !a.params.isEmpty then
59-
list(a.params, "(", ")", ", "){ (bdr, param) => bdr.buildAnnotationParameter(param)}
59+
val params = a.params.filterNot {
60+
case Annotation.LinkParameter(_, _, text) => text == "_"
61+
case _ => false
62+
}
63+
list(params, "(", ")", ", "){ (bdr, param) => bdr.buildAnnotationParameter(param)}
6064
else this
6165

6266
private def addParameterName(txt: Option[String]): SignatureBuilder = txt match {

scala3doc/src/dotty/renderers/MemberRenderer.scala

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -92,15 +92,14 @@ class MemberRenderer(signatureRenderer: SignatureRenderer, buildNode: ContentNod
9292
case Annotation.UnresolvedParameter(_, value) => stripQuotes(value)
9393

9494
val (named, unnamed) = a.params.partition(_.name.nonEmpty)
95-
val message = named.find(_.name.get == "message").orElse(unnamed.headOption)
96-
val since = named.find(_.name.get == "since").orElse(unnamed.drop(1).headOption)
97-
98-
val content =
99-
since.fold(Nil)(since =>
100-
Seq(code("[Since version ", parameter(since), "] ")) ++
101-
message.fold(Nil)(m => Seq(parameter(m))) ++
102-
m.docs.fold(Nil)(_.deprecated.toSeq.map(renderDocPart))
103-
)
95+
val message = named.find(_.name.get == "message")
96+
val since = named.find(_.name.get == "since")
97+
98+
val content = Seq(
99+
since.map(s => code("[Since version ", parameter(s), "] ")),
100+
message.map(m => parameter(m)),
101+
m.docs.map(_.deprecated.toSeq.map(renderDocPart)):_*
102+
).flatten
104103
Seq(dt("Deprecated"), dd(content:_*))
105104
}
106105

scala3doc/test/dotty/dokka/SignatureTestCases.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ class ObjectSignatures extends SignatureTest("objectSignatures", Seq("object"))
88

99
class TraitSignatures extends SignatureTest("traitSignatures", Seq("trait"))
1010

11-
1211
// We do not support companion objects properly in tests
1312
class ClassSignatureTestSourceTest extends SignatureTest("classSignatureTestSource",
1413
SignatureTest.all diff Seq("val", "var", "object"))

0 commit comments

Comments
 (0)