File tree 4 files changed +20
-11
lines changed
compiler/src/dotty/tools/dotc/tasty
4 files changed +20
-11
lines changed Original file line number Diff line number Diff line change @@ -194,17 +194,19 @@ object TastyImpl extends scala.tasty.Tasty {
194
194
195
195
type PackageDef = PackageDefinition
196
196
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
+
197
204
def packageDefClassTag : ClassTag [PackageDef ] = implicitly[ClassTag [PackageDef ]]
198
205
199
206
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 {
201
208
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)))
208
210
case _ => None
209
211
}
210
212
}
Original file line number Diff line number Diff line change @@ -153,11 +153,16 @@ abstract class Tasty {
153
153
154
154
type PackageDef <: Definition
155
155
156
+ trait AbstractPackageDef {
157
+ def members (implicit ctx : Context ): List [Statement ]
158
+ }
159
+ implicit def PackageDefDeco (t : PackageDef ): AbstractPackageDef
160
+
156
161
implicit def packageDefClassTag : ClassTag [PackageDef ]
157
162
158
163
val PackageDef : PackageDefExtractor
159
164
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 )]
161
166
}
162
167
163
168
// ----- Parents --------------------------------------------------
Original file line number Diff line number Diff line change @@ -78,8 +78,8 @@ class TastyPrinter[T <: Tasty with Singleton](val tasty: T) {
78
78
case parent @ TypeTree () => this += parent
79
79
})
80
80
this += " , " += self += " , " ++= body += " )"
81
- case PackageDef (name, members ) =>
82
- this += " PackageDef(" += name += " , " ++= members += " )"
81
+ case PackageDef (name, owner ) =>
82
+ this += " PackageDef(" += name += " , " += owner += " )"
83
83
case Import (expr, selectors) =>
84
84
this += " Import(" += expr += " , " ++= selectors += " )"
85
85
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