File tree 4 files changed +20
-11
lines changed
compiler/src/dotty/tools/dotc/tastyreflect
4 files changed +20
-11
lines changed Original file line number Diff line number Diff line change @@ -207,17 +207,19 @@ object TastyImpl extends scala.tasty.Tasty {
207
207
208
208
type PackageDef = PackageDefinition
209
209
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
+
210
217
def packageDefClassTag : ClassTag [PackageDef ] = implicitly[ClassTag [PackageDef ]]
211
218
212
219
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 {
214
221
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)))
221
223
case _ => None
222
224
}
223
225
}
Original file line number Diff line number Diff line change @@ -165,11 +165,16 @@ abstract class Tasty { tasty =>
165
165
166
166
type PackageDef <: Definition
167
167
168
+ trait AbstractPackageDef {
169
+ def members (implicit ctx : Context ): List [Statement ]
170
+ }
171
+ implicit def PackageDefDeco (t : PackageDef ): AbstractPackageDef
172
+
168
173
implicit def packageDefClassTag : ClassTag [PackageDef ]
169
174
170
175
val PackageDef : PackageDefExtractor
171
176
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 )]
173
178
}
174
179
175
180
// ----- Parents --------------------------------------------------
Original file line number Diff line number Diff line change @@ -75,8 +75,8 @@ class ShowExtractors[T <: Tasty with Singleton](tasty0: T) extends Show[T](tasty
75
75
case parent @ TypeTree () => this += parent
76
76
})
77
77
this += " , " += self += " , " ++= body += " )"
78
- case PackageDef (name, members ) =>
79
- this += " PackageDef(\" " += name += " \" , " ++= members += " )"
78
+ case PackageDef (name, owner ) =>
79
+ this += " PackageDef(\" " += name += " \" , " += owner += " )"
80
80
case Import (expr, selectors) =>
81
81
this += " Import(" += expr += " , " ++= selectors += " )"
82
82
case PackageClause (pid, stats) =>
Original file line number Diff line number Diff line change @@ -43,7 +43,9 @@ object definitions {
43
43
self : Option [ValDef ], body : List [Statement ]) extends Definition {
44
44
def mods : List [Modifier ] = ???
45
45
}
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
+ }
47
49
48
50
// ------ Terms ---------------------------------
49
51
You can’t perform that action at this time.
0 commit comments