Skip to content

Commit 7378bc2

Browse files
committed
Do not compute PackageDef members in extractor
1 parent bd79795 commit 7378bc2

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
@@ -205,17 +205,19 @@ object TastyImpl extends scala.tasty.Tasty {
205205

206206
type PackageDef = PackageDefinition
207207

208+
def PackageDefDeco(t: PackageDef): AbstractPackageDef = new AbstractPackageDef {
209+
def members(implicit ctx: Context): List[Statement] = {
210+
if (t.symbol.is(core.Flags.JavaDefined)) Nil // FIXME should also support java packages
211+
else t.symbol.info.decls.iterator.map(FromSymbol.definition).toList
212+
}
213+
}
214+
208215
def packageDefClassTag: ClassTag[PackageDef] = implicitly[ClassTag[PackageDef]]
209216

210217
object PackageDef extends PackageDefExtractor {
211-
def unapply(x: PackageDef)(implicit ctx: Context): Option[(String, List[Statement])] = x match {
218+
def unapply(x: PackageDef)(implicit ctx: Context): Option[(String, PackageDef)] = x match {
212219
case x: PackageDefinition =>
213-
// FIXME Do not do this eagerly as it forces everithing in the package to be loaded.
214-
// An alternative would be to add it as an extension method instead.
215-
val definitions =
216-
if (x.symbol.is(core.Flags.JavaDefined)) Nil // FIXME should also support java packages
217-
else x.symbol.info.decls.iterator.map(FromSymbol.definition).toList
218-
Some(x.symbol.name.toString, definitions)
220+
Some((x.symbol.name.toString, FromSymbol.packageDef(x.symbol.owner)))
219221
case _ => None
220222
}
221223
}

library/src/scala/tasty/Tasty.scala

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,11 +165,16 @@ abstract class Tasty { tasty =>
165165

166166
type PackageDef <: Definition
167167

168+
trait AbstractPackageDef {
169+
def members(implicit ctx: Context): List[Statement]
170+
}
171+
implicit def PackageDefDeco(t: PackageDef): AbstractPackageDef
172+
168173
implicit def packageDefClassTag: ClassTag[PackageDef]
169174

170175
val PackageDef: PackageDefExtractor
171176
abstract class PackageDefExtractor {
172-
def unapply(x: PackageDef)(implicit ctx: Context): Option[(String, List[Statement])]
177+
def unapply(x: PackageDef)(implicit ctx: Context): Option[(String, PackageDef)]
173178
}
174179

175180
// ----- Parents --------------------------------------------------

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)