Skip to content

Commit e5ad4af

Browse files
committed
Do not compute PackageDef members in extractor
1 parent 2b10c0b commit e5ad4af

File tree

4 files changed

+20
-11
lines changed

4 files changed

+20
-11
lines changed

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

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -194,17 +194,19 @@ object TastyImpl extends scala.tasty.Tasty {
194194

195195
type PackageDef = PackageDefinition
196196

197+
def PackageDefDeco(t: PackageDef): AbstractPackageDef = new AbstractPackageDef {
198+
def members(implicit ctx: Context): List[Statement] = {
199+
if (t.symbol.is(core.Flags.JavaDefined)) Nil // FIXME should also support java packages
200+
else t.symbol.info.decls.iterator.map(FromSymbol.definition).toList
201+
}
202+
}
203+
197204
def packageDefClassTag: ClassTag[PackageDef] = implicitly[ClassTag[PackageDef]]
198205

199206
object PackageDef extends PackageDefExtractor {
200-
def unapply(x: PackageDef)(implicit ctx: Context): Option[(String, List[Statement])] = x match {
207+
def unapply(x: PackageDef)(implicit ctx: Context): Option[(String, PackageDef)] = x match {
201208
case x: PackageDefinition =>
202-
// FIXME Do not do this eagerly as it forces everithing in the package to be loaded.
203-
// An alternative would be to add it as an extension method instead.
204-
val definitions =
205-
if (x.symbol.is(core.Flags.JavaDefined)) Nil // FIXME should also support java packages
206-
else x.symbol.info.decls.iterator.map(FromSymbol.definition).toList
207-
Some(x.symbol.name.toString, definitions)
209+
Some((x.symbol.name.toString, FromSymbol.packageDef(x.symbol.owner)))
208210
case _ => None
209211
}
210212
}

library/src/scala/tasty/Tasty.scala

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,11 +153,16 @@ abstract class Tasty {
153153

154154
type PackageDef <: Definition
155155

156+
trait AbstractPackageDef {
157+
def members(implicit ctx: Context): List[Statement]
158+
}
159+
implicit def PackageDefDeco(t: PackageDef): AbstractPackageDef
160+
156161
implicit def packageDefClassTag: ClassTag[PackageDef]
157162

158163
val PackageDef: PackageDefExtractor
159164
abstract class PackageDefExtractor {
160-
def unapply(x: PackageDef)(implicit ctx: Context): Option[(String, List[Statement])]
165+
def unapply(x: PackageDef)(implicit ctx: Context): Option[(String, PackageDef)]
161166
}
162167

163168
// ----- Parents --------------------------------------------------

library/src/scala/tasty/util/TastyPrinter.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ class TastyPrinter[T <: Tasty with Singleton](val tasty: T) {
7878
case parent @ TypeTree() => this += parent
7979
})
8080
this += ", " += self += ", " ++= body += ")"
81-
case PackageDef(name, members) =>
82-
this += "PackageDef(" += name += ", " ++= members += ")"
81+
case PackageDef(name, owner) =>
82+
this += "PackageDef(" += name += ", " += owner += ")"
8383
case Import(expr, selectors) =>
8484
this += "Import(" += expr += ", " ++= selectors += ")"
8585
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)