在Scala编译器插件中创建新的* package *

时间:2011-10-24 15:58:09

标签: scala plugins compiler-construction 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(...)))

1 个答案:

答案 0 :(得分:2)

我认为我对你的另一个问题的回答也应该回答这个问题:

How to add a new Class in a Scala Compiler Plugin?