在Scala編譯器外掛中建立新的* package *

為了在Scala編譯器外掛中生成新程式碼,我現在已經建立了工作類.下一個合乎邏輯的步驟是將這些類放在一個新的,不存在的包中.在 Java

中,包基本上是一個目錄名,但在Scala中,包看起來要複雜得多.到目前為止,我還沒有找到/識別編譯器外掛建立新包的示例.

根據我目前的理解水平,我認為我需要首先建立一個包符號:

parentPackage.newPackage(...)
// ...

然後使用PackageDef為包建立一個Tree.但是PackageDef沒有將符號作為引數,正如人們所期望的那樣,並且搜尋:

Scala newPackage PackageDef

沒有任何用處.所以我似乎不需要一起做這兩個步驟.可能一個是由編譯器為我完成的,但我不知道哪一個.到目前為止,我看起來像這樣:

val newPkg = parentPackage.newPackage(NoPosition, newTermName(name))
newPkg.moduleClass.setInfo(new PackageClassInfoType(new Scope,
    newPkg.moduleClass))
newPkg.setInfo(newPkg.moduleClass.tpe)
parentPackage.info.decls.enter(newPkg)
// ...
val newPkgTree = PackageDef(Ident(newPkg.name), List(ClassDef(...)))