Skip to content

Commit 296289d

Browse files
committed
Fix deprecation for java.lang.Deprecated
1 parent 913d0a8 commit 296289d

File tree

7 files changed

+33
-20
lines changed

7 files changed

+33
-20
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 & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ case class Member(
158158
parents: Seq[LinkToType] = Nil,
159159
knownChildren: Seq[LinkToType] = Nil,
160160
companion: Option[DRI] = None,
161+
deprecated: Option[Annotation] = None,
161162
)
162163

163164
object Member:
@@ -166,9 +167,6 @@ object Member:
166167

167168
extension[T] (member: Member)
168169
def asLink: LinkToType = LinkToType(member.signature, member.dri, member.kind)
169-
def deprecated: Option[Annotation] =
170-
member.annotations.find(_.dri.location == "scala.deprecated")
171-
172170
def membersBy(op: Member => Boolean): Seq[Member] = member.members.filter(op)
173171

174172
extension (members: Seq[Member]) def byInheritance =

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

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

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

4955

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

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,8 @@ trait ClassLikeSupport:
8282

8383
val baseMember = mkMember(classDef.symbol, kindForClasslike(classDef), selfSiangture)(
8484
modifiers = modifiers,
85-
graph = graph
85+
graph = graph,
86+
deprecated = classDef.symbol.isDeprecated()
8687
)
8788

8889
if signatureOnly then baseMember else baseMember.copy(
@@ -355,7 +356,7 @@ trait ClassLikeSupport:
355356
val overridenSyms = methodSymbol.allOverriddenSymbols.map(_.owner)
356357
Origin.Overrides(overridenSyms.map(s => Overriden(s.name, s.dri)).toSeq)
357358

358-
mkMember(method.symbol, methodKind, memberInfo.res.asSignature)(origin = origin)
359+
mkMember(methodSymbol, methodKind, memberInfo.res.asSignature)(origin = origin, deprecated = methodSymbol.isDeprecated())
359360

360361
def mkParameter(
361362
argument: ValDef,
@@ -402,7 +403,7 @@ trait ClassLikeSupport:
402403
case tpe => (Nil, tpe)
403404

404405
val kind = Kind.Type(!isTreeAbstract(typeDef.rhs), typeDef.symbol.isOpaque, generics)
405-
mkMember(typeDef.symbol, kind, tpeTree.asSignature)()
406+
mkMember(typeDef.symbol, kind, tpeTree.asSignature)(deprecated = typeDef.symbol.isDeprecated())
406407

407408
def parseValDef(c: ClassDef, valDef: ValDef): Member =
408409
def defaultKind = if valDef.symbol.flags.is(Flags.Mutable) then Kind.Var else Kind.Val
@@ -411,13 +412,14 @@ trait ClassLikeSupport:
411412
Kind.Implicit(Kind.Val, extractImplicitConversion(valDef.tpt.tpe))
412413
else defaultKind
413414

414-
mkMember(valDef.symbol, kind, memberInfo.res.asSignature)()
415+
mkMember(valDef.symbol, kind, memberInfo.res.asSignature)(deprecated = valDef.symbol.isDeprecated())
415416

416417
def mkMember(symbol: Symbol, kind: Kind, signature: DSignature)(
417418
modifiers: Seq[dotty.dokka.model.api.Modifier] = symbol.getExtraModifiers(),
418419
origin: Origin = Origin.RegularlyDefined,
419420
inheritedFrom: Option[InheritedFrom] = None,
420421
graph: HierarchyGraph = HierarchyGraph.empty,
422+
deprecated: Option[Annotation] = None,
421423
) = Member(
422424
name = symbol.normalizedName,
423425
dri = symbol.dri,
@@ -430,7 +432,8 @@ trait ClassLikeSupport:
430432
origin = origin,
431433
inheritedFrom = inheritedFrom,
432434
graph = graph,
433-
docs = symbol.documentation
435+
docs = symbol.documentation,
436+
deprecated = deprecated
434437
)
435438

436439
case class MemberInfo(genericTypes: Map[String, TypeBounds], paramLists: List[Map[String, TypeRepr]], res: TypeRepr)

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

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

5353
private def buildAnnotationParams(a: Annotation): SignatureBuilder =
5454
if !a.params.isEmpty then
55-
list(a.params, "(", ")", ", "){ (bdr, param) => bdr.buildAnnotationParameter(param)}
55+
val params = a.params.filterNot {
56+
case Annotation.LinkParameter(_, _, text) => text == "_"
57+
case _ => false
58+
}
59+
list(params, "(", ")", ", "){ (bdr, param) => bdr.buildAnnotationParameter(param)}
5660
else this
5761

5862
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
@@ -79,15 +79,14 @@ class MemberRenderer(signatureRenderer: SignatureRenderer)(using DocContext) ext
7979
case Annotation.UnresolvedParameter(_, value) => stripQuotes(value)
8080

8181
val (named, unnamed) = a.params.partition(_.name.nonEmpty)
82-
val message = named.find(_.name.get == "message").orElse(unnamed.headOption)
83-
val since = named.find(_.name.get == "since").orElse(unnamed.drop(1).headOption)
84-
85-
val content =
86-
since.fold(Nil)(since =>
87-
Seq(code("[Since version ", parameter(since), "] ")) ++
88-
message.fold(Nil)(m => Seq(parameter(m))) ++
89-
m.docs.fold(Nil)(_.deprecated.toSeq.map(renderDocPart))
90-
)
82+
val message = named.find(_.name.get == "message")
83+
val since = named.find(_.name.get == "since")
84+
85+
val content = Seq(
86+
since.map(s => code("[Since version ", parameter(s), "] ")),
87+
message.map(m => parameter(m)),
88+
m.docs.map(_.deprecated.toSeq.map(renderDocPart)):_*
89+
).flatten
9190
Seq(dt("Deprecated"), dd(content:_*))
9291
}
9392

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)