Skip to content

Commit 0c77c36

Browse files
committed
Remove Position existence check in Scaladoc
1 parent 0132907 commit 0c77c36

File tree

3 files changed

+40
-39
lines changed

3 files changed

+40
-39
lines changed

scaladoc/src/dotty/tools/scaladoc/tasty/ClassLikeSupport.scala

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,9 @@ trait ClassLikeSupport:
9696
getSupertypesGraph(LinkToType(selfSignature, classDef.symbol.dri, bareClasslikeKind(classDef.symbol)), unpackTreeToClassDef(classDef).parents)
9797
)
9898

99-
val baseMember = mkMember(classDef.symbol, kindForClasslike(classDef), selfSignature)(
99+
val kind = if intrinsicClassDefs.contains(classDef.symbol) then Kind.Class(Nil, Nil) else kindForClasslike(classDef)
100+
101+
val baseMember = mkMember(classDef.symbol, kind, selfSignature)(
100102
modifiers = modifiers,
101103
graph = graph,
102104
deprecated = classDef.symbol.isDeprecated(),
@@ -253,8 +255,9 @@ trait ClassLikeSupport:
253255
}
254256

255257
def getParentsAsTreeSymbolTuples: List[(Tree, Symbol)] =
256-
for
257-
parentTree <- c.parents if isValidPos(parentTree.pos) // We assume here that order is correct
258+
if noPosClassDefs.contains(c.symbol) then Nil
259+
else for
260+
parentTree <- c.parents if parentTree.pos.start != parentTree.pos.end // We assume here that order is correct
258261
parentSymbol = parentTree match
259262
case t: TypeTree => t.tpe.typeSymbol
260263
case tree if tree.symbol.isClassConstructor => tree.symbol.owner

scaladoc/src/dotty/tools/scaladoc/tasty/SyntheticSupport.scala

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,12 @@ object SyntheticsSupport:
3333

3434
end extension
3535

36-
def isValidPos(using Quotes)(pos: reflect.Position) =
37-
if hackExists(pos) then pos.start != pos.end else false
38-
3936
def isSyntheticField(using Quotes)(c: reflect.Symbol) =
4037
import reflect._
4138
c.flags.is(Flags.CaseAccessor) || (c.flags.is(Flags.Module) && !c.flags.is(Flags.Given))
4239

4340
def constructorWithoutParamLists(using Quotes)(c: reflect.ClassDef): Boolean =
44-
!isValidPos(c.constructor.pos) || {
41+
c.constructor.pos.start == c.constructor.pos.end || {
4542
val end = c.constructor.pos.end
4643
val typesEnd = c.constructor.leadingTypeParams.lastOption.fold(end - 1)(_.pos.end)
4744
val classDefTree = c.constructor.show
@@ -77,15 +74,6 @@ object SyntheticsSupport:
7774
baseTypes.asInstanceOf[List[(Symbol, TypeRepr)]]
7875
}
7976

80-
private def hackExists(using Quotes)(rpos: reflect.Position) = {
81-
import reflect._
82-
import dotty.tools.dotc
83-
import dotty.tools.dotc.util.Spans._
84-
given dotc.core.Contexts.Context = quotes.asInstanceOf[scala.quoted.runtime.impl.QuotesImpl].ctx
85-
val pos = rpos.asInstanceOf[dotc.util.SourcePosition]
86-
pos.exists
87-
}
88-
8977
def getSupertypes(using Quotes)(c: reflect.ClassDef) = hackGetSupertypes(c).tail
9078

9179
def typeForClass(using Quotes)(c: reflect.ClassDef): reflect.TypeRepr =

scaladoc/src/dotty/tools/scaladoc/tasty/TastyParser.scala

Lines changed: 33 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -123,27 +123,17 @@ case class ScaladocTastyInspector()(using ctx: DocContext) extends DocTastyInspe
123123
topLevels ++= parser.parseRootTree(treeRoot)
124124
}
125125

126-
val defn = ctx.compilerContext.definitions
127-
128126
if ctx.args.documentSyntheticTypes then
129-
val intrinsicClassDefs = Seq(
130-
defn.AnyClass,
131-
defn.MatchableClass,
132-
defn.AnyKindClass,
133-
defn.AnyValClass,
134-
defn.NullClass,
135-
defn.NothingClass,
136-
defn.SingletonClass,
137-
defn.andType,
138-
defn.orType,
139-
).map { s =>
140-
"scala" -> s.asInstanceOf[parser.qctx.reflect.Symbol].tree.match {
141-
case cd: parser.qctx.reflect.ClassDef => parser.parseClasslike(cd)
142-
case td: parser.qctx.reflect.TypeDef => parser.parseTypeDef(td)
143-
}
127+
import parser.qctx.reflect._
128+
val intrinsicTypeDefs = parser.intrinsicTypeDefs.toSeq.map { s =>
129+
"scala" -> parser.parseTypeDef(s.tree.asInstanceOf[TypeDef])
130+
}
131+
val intrinsicClassDefs = parser.intrinsicClassDefs.toSeq.map { s =>
132+
"scala" -> parser.parseClasslike(s.tree.asInstanceOf[ClassDef])
144133
}
145134
topLevels ++= intrinsicClassDefs
146-
val scalaPckg = defn.ScalaPackageVal.asInstanceOf[parser.qctx.reflect.Symbol]
135+
topLevels ++= intrinsicTypeDefs
136+
val scalaPckg = defn.ScalaPackage
147137
given parser.qctx.type = parser.qctx
148138
topLevels += "scala" -> Member(scalaPckg.fullName, scalaPckg.dri, Kind.Package)
149139
topLevels += mergeAnyRefAliasAndObject(parser)
@@ -167,12 +157,13 @@ case class ScaladocTastyInspector()(using ctx: DocContext) extends DocTastyInspe
167157
}.toList -> rootDoc
168158

169159
def mergeAnyRefAliasAndObject(parser: TastyParser) =
170-
val defn = ctx.compilerContext.definitions
171-
val oM = parser.parseClasslike(defn.ObjectClass.asInstanceOf[parser.qctx.reflect.Symbol].tree.asInstanceOf[parser.qctx.reflect.ClassDef])
172-
val aM = parser.parseTypeDef(defn.AnyRefAlias.asInstanceOf[parser.qctx.reflect.Symbol].tree.asInstanceOf[parser.qctx.reflect.TypeDef])
160+
import parser.qctx.reflect._
161+
val javaLangObjectDef = defn.ObjectClass.tree.asInstanceOf[ClassDef]
162+
val objectMembers = parser.extractPatchedMembers(javaLangObjectDef)
163+
val aM = parser.parseTypeDef(defn.AnyRefClass.tree.asInstanceOf[TypeDef])
173164
"scala" -> aM.copy(
174-
kind = oM.kind,
175-
members = oM.members
165+
kind = Kind.Class(Nil, Nil),
166+
members = objectMembers
176167
)
177168
/** Parses a single Tasty compilation unit. */
178169
case class TastyParser(
@@ -187,6 +178,25 @@ case class TastyParser(
187178

188179
private given qctx.type = qctx
189180

181+
val intrinsicClassDefs = Set(
182+
defn.AnyClass,
183+
defn.MatchableClass,
184+
defn.ScalaPackage.typeMember("AnyKind"),
185+
defn.AnyValClass,
186+
defn.NullClass,
187+
defn.NothingClass,
188+
defn.ScalaPackage.typeMember("Singleton"),
189+
)
190+
191+
val noPosClassDefs = intrinsicClassDefs ++ Set(
192+
defn.ObjectClass,
193+
defn.AnyRefClass
194+
)
195+
196+
val intrinsicTypeDefs = Set(
197+
defn.ScalaPackage.typeMember("&"),
198+
defn.ScalaPackage.typeMember("|"),
199+
)
190200
def processTree[T](tree: Tree)(op: => T): Option[T] = try Option(op) catch
191201
case e: Exception =>
192202
report.warning(throwableToString(e), tree.pos)

0 commit comments

Comments
 (0)