Skip to content

Commit b90ff00

Browse files
committed
Do not compute PackageDef members in extractor
1 parent 2b8b1ec commit b90ff00

File tree

4 files changed

+20
-11
lines changed

4 files changed

+20
-11
lines changed

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

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

208208
type PackageDef = PackageDefinition
209209

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

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

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)