Skip to content

Commit 656b96a

Browse files
authored
Merge pull request #4578 from dotty-staging/add-missing-tasty-implemetations
Do not compute PackageDef members in extractor
2 parents 1399889 + b90ff00 commit 656b96a

File tree

4 files changed

+26
-15
lines changed

4 files changed

+26
-15
lines changed

compiler/src/dotty/tools/dotc/tastyreflect/TastyImpl.scala

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ object TastyImpl extends scala.tasty.Tasty {
8181
}
8282

8383
def PackageClauseDeco(x: PackageClause): AbstractPackageClause = new AbstractPackageClause {
84-
override def definition: Definition = ???
84+
def definition(implicit ctx: Context): Definition = FromSymbol.packageDef(x.symbol)
8585
}
8686

8787
// ----- Statements -----------------------------------------------
@@ -214,17 +214,19 @@ object TastyImpl extends scala.tasty.Tasty {
214214

215215
type PackageDef = PackageDefinition
216216

217+
def PackageDefDeco(t: PackageDef): AbstractPackageDef = new AbstractPackageDef {
218+
def members(implicit ctx: Context): List[Statement] = {
219+
if (t.symbol.is(core.Flags.JavaDefined)) Nil // FIXME should also support java packages
220+
else t.symbol.info.decls.iterator.map(FromSymbol.definition).toList
221+
}
222+
}
223+
217224
def packageDefClassTag: ClassTag[PackageDef] = implicitly[ClassTag[PackageDef]]
218225

219226
object PackageDef extends PackageDefExtractor {
220-
def unapply(x: PackageDef)(implicit ctx: Context): Option[(String, List[Statement])] = x match {
227+
def unapply(x: PackageDef)(implicit ctx: Context): Option[(String, PackageDef)] = x match {
221228
case x: PackageDefinition =>
222-
// FIXME Do not do this eagerly as it forces everithing in the package to be loaded.
223-
// An alternative would be to add it as an extension method instead.
224-
val definitions =
225-
if (x.symbol.is(core.Flags.JavaDefined)) Nil // FIXME should also support java packages
226-
else x.symbol.info.decls.iterator.map(FromSymbol.definition).toList
227-
Some(x.symbol.name.toString, definitions)
229+
Some((x.symbol.name.toString, FromSymbol.packageDef(x.symbol.owner)))
228230
case _ => None
229231
}
230232
}
@@ -596,7 +598,9 @@ object TastyImpl extends scala.tasty.Tasty {
596598

597599
type TypeBoundsTree = tpd.TypeBoundsTree
598600

599-
def TypeBoundsTreeDeco(x: TypeBoundsTree): AbstractTypeBoundsTree = ???
601+
def TypeBoundsTreeDeco(x: TypeBoundsTree): AbstractTypeBoundsTree = new AbstractTypeBoundsTree {
602+
def tpe(implicit ctx: Context): TypeBounds = x.tpe.bounds
603+
}
600604

601605
def typeBoundsTreeClassTag: ClassTag[TypeBoundsTree] = implicitly[ClassTag[TypeBoundsTree]]
602606

library/src/scala/tasty/Tasty.scala

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ abstract class Tasty { tasty =>
6767
}
6868

6969
trait AbstractPackageClause {
70-
def definition: Definition
70+
def definition(implicit ctx: Context): Definition
7171
}
7272
implicit def PackageClauseDeco(x: PackageClause): AbstractPackageClause
7373

@@ -170,11 +170,16 @@ abstract class Tasty { tasty =>
170170

171171
type PackageDef <: Definition
172172

173+
trait AbstractPackageDef {
174+
def members(implicit ctx: Context): List[Statement]
175+
}
176+
implicit def PackageDefDeco(t: PackageDef): AbstractPackageDef
177+
173178
implicit def packageDefClassTag: ClassTag[PackageDef]
174179

175180
val PackageDef: PackageDefExtractor
176181
abstract class PackageDefExtractor {
177-
def unapply(x: PackageDef)(implicit ctx: Context): Option[(String, List[Statement])]
182+
def unapply(x: PackageDef)(implicit ctx: Context): Option[(String, PackageDef)]
178183
}
179184

180185
// ----- Parents --------------------------------------------------
@@ -431,7 +436,7 @@ abstract class Tasty { tasty =>
431436
type TypeBoundsTree <: TypeOrBoundsTree
432437

433438
trait AbstractTypeBoundsTree {
434-
def tpe: TypeBounds
439+
def tpe(implicit ctx: Context): TypeBounds
435440
}
436441
implicit def TypeBoundsTreeDeco(x: TypeBoundsTree): AbstractTypeBoundsTree
437442

library/src/scala/tasty/util/ShowExtractors.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@ class ShowExtractors[T <: Tasty with Singleton](tasty0: T) extends Show[T](tasty
7575
case parent @ TypeTree() => this += parent
7676
})
7777
this += ", " += self += ", " ++= body += ")"
78-
case PackageDef(name, members) =>
79-
this += "PackageDef(\"" += name += "\", " ++= members += ")"
78+
case PackageDef(name, owner) =>
79+
this += "PackageDef(\"" += name += "\", " += owner += ")"
8080
case Import(expr, selectors) =>
8181
this += "Import(" += expr += ", " ++= selectors += ")"
8282
case PackageClause(pid, stats) =>

tests/pos/tasty/definitions.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,9 @@ object definitions {
4343
self: Option[ValDef], body: List[Statement]) extends Definition {
4444
def mods: List[Modifier] = ???
4545
}
46-
case class PackageDef(name: String, members: List[Statement]) extends Definition
46+
case class PackageDef(name: String, override val owner: PackageDef) extends Definition {
47+
def members: List[Statement] = ???
48+
}
4749

4850
// ------ Terms ---------------------------------
4951

0 commit comments

Comments
 (0)