Skip to content

Fix deprecation for java.lang.Deprecated #11216

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion scala3doc-testcases/src/tests/deprecated.scala
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
package tests
package deprecated
package deprecated

class A:
def defInt: Int = 1
Expand All @@ -17,3 +17,7 @@ class B extends A:
@deprecated(since = "1", message = "some reason")
def x: Int = 1
val y: Int = 1


@java.lang.Deprecated(since = "1.1")
class JavaDeprecated
4 changes: 1 addition & 3 deletions scala3doc/src/dotty/dokka/model/api/api.scala
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,7 @@ case class Member(
parents: Seq[LinkToType] = Nil,
knownChildren: Seq[LinkToType] = Nil,
companion: Option[DRI] = None,
deprecated: Option[Annotation] = None,
)

object Member:
Expand All @@ -166,9 +167,6 @@ object Member:

extension[T] (member: Member)
def asLink: LinkToType = LinkToType(member.signature, member.dri, member.kind)
def deprecated: Option[Annotation] =
member.annotations.find(_.dri.location == "scala.deprecated")

def membersBy(op: Member => Boolean): Seq[Member] = member.members.filter(op)

extension (members: Seq[Member]) def byInheritance =
Expand Down
6 changes: 6 additions & 0 deletions scala3doc/src/dotty/dokka/tasty/BasicSupport.scala
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,12 @@ trait BasicSupport:
def getAnnotations(): List[Annotation] =
sym.annotations.filterNot(_.symbol.packageName.startsWith("scala.annotation.internal")).map(parseAnnotation).reverse

def isDeprecated(): Option[Annotation] =
sym.annotations.find { a =>
a.symbol.packageName == "scala" && a.symbol.className.contains("deprecated") ||
a.symbol.packageName == "java.lang" && a.symbol.className.contains("Deprecated")
}.map(parseAnnotation)

def isLeftAssoc: Boolean = !sym.name.endsWith(":")


13 changes: 8 additions & 5 deletions scala3doc/src/dotty/dokka/tasty/ClassLikeSupport.scala
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,8 @@ trait ClassLikeSupport:

val baseMember = mkMember(classDef.symbol, kindForClasslike(classDef), selfSiangture)(
modifiers = modifiers,
graph = graph
graph = graph,
deprecated = classDef.symbol.isDeprecated()
)

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

mkMember(method.symbol, methodKind, memberInfo.res.asSignature)(origin = origin)
mkMember(methodSymbol, methodKind, memberInfo.res.asSignature)(origin = origin, deprecated = methodSymbol.isDeprecated())

def mkParameter(
argument: ValDef,
Expand Down Expand Up @@ -402,7 +403,7 @@ trait ClassLikeSupport:
case tpe => (Nil, tpe)

val kind = Kind.Type(!isTreeAbstract(typeDef.rhs), typeDef.symbol.isOpaque, generics)
mkMember(typeDef.symbol, kind, tpeTree.asSignature)()
mkMember(typeDef.symbol, kind, tpeTree.asSignature)(deprecated = typeDef.symbol.isDeprecated())

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

mkMember(valDef.symbol, kind, memberInfo.res.asSignature)()
mkMember(valDef.symbol, kind, memberInfo.res.asSignature)(deprecated = valDef.symbol.isDeprecated())

def mkMember(symbol: Symbol, kind: Kind, signature: DSignature)(
modifiers: Seq[dotty.dokka.model.api.Modifier] = symbol.getExtraModifiers(),
origin: Origin = Origin.RegularlyDefined,
inheritedFrom: Option[InheritedFrom] = None,
graph: HierarchyGraph = HierarchyGraph.empty,
deprecated: Option[Annotation] = None,
) = Member(
name = symbol.normalizedName,
dri = symbol.dri,
Expand All @@ -430,7 +432,8 @@ trait ClassLikeSupport:
origin = origin,
inheritedFrom = inheritedFrom,
graph = graph,
docs = symbol.documentation
docs = symbol.documentation,
deprecated = deprecated
)

case class MemberInfo(genericTypes: Map[String, TypeBounds], paramLists: List[Map[String, TypeRepr]], res: TypeRepr)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,11 @@ trait SignatureBuilder extends ScalaSignatureUtils {

private def buildAnnotationParams(a: Annotation): SignatureBuilder =
if !a.params.isEmpty then
list(a.params, "(", ")", ", "){ (bdr, param) => bdr.buildAnnotationParameter(param)}
val params = a.params.filterNot {
case Annotation.LinkParameter(_, _, text) => text == "_"
case _ => false
}
list(params, "(", ")", ", "){ (bdr, param) => bdr.buildAnnotationParameter(param)}
else this

private def addParameterName(txt: Option[String]): SignatureBuilder = txt match {
Expand Down
17 changes: 8 additions & 9 deletions scala3doc/src/dotty/renderers/MemberRenderer.scala
Original file line number Diff line number Diff line change
Expand Up @@ -79,15 +79,14 @@ class MemberRenderer(signatureRenderer: SignatureRenderer)(using DocContext) ext
case Annotation.UnresolvedParameter(_, value) => stripQuotes(value)

val (named, unnamed) = a.params.partition(_.name.nonEmpty)
val message = named.find(_.name.get == "message").orElse(unnamed.headOption)
val since = named.find(_.name.get == "since").orElse(unnamed.drop(1).headOption)

val content =
since.fold(Nil)(since =>
Seq(code("[Since version ", parameter(since), "] ")) ++
message.fold(Nil)(m => Seq(parameter(m))) ++
m.docs.fold(Nil)(_.deprecated.toSeq.map(renderDocPart))
)
val message = named.find(_.name.get == "message")
val since = named.find(_.name.get == "since")

val content = Seq(
since.map(s => code("[Since version ", parameter(s), "] ")),
message.map(m => parameter(m)),
m.docs.map(_.deprecated.toSeq.map(renderDocPart)):_*
).flatten
Seq(dt("Deprecated"), dd(content:_*))
}

Expand Down
1 change: 0 additions & 1 deletion scala3doc/test/dotty/dokka/SignatureTestCases.scala
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ class ObjectSignatures extends SignatureTest("objectSignatures", Seq("object"))

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


// We do not support companion objects properly in tests
class ClassSignatureTestSourceTest extends SignatureTest("classSignatureTestSource",
SignatureTest.all diff Seq("val", "var", "object"))
Expand Down