我有一些代表包、对象和类的符号列表,希望在宏环境中导入它们。
对于包和对象,这意味着通配符导入;而对于类,则是“标准”导入。
如果给定一个包含“some.package”、“some.Class”和“some.Object”的“List [Symbol]”,我该如何正确地导入它们?如何决定是使用“标准”导入还是通配符导入?
我的当前方法是:
对于包和对象,这意味着通配符导入;而对于类,则是“标准”导入。
如果给定一个包含“some.package”、“some.Class”和“some.Object”的“List [Symbol]”,我该如何正确地导入它们?如何决定是使用“标准”导入还是通配符导入?
我的当前方法是:
def importPackageOrModuleOrClass(sym: Symbol): Import =
if (sym.isPackage || sym.isModule) // e. g. import scala._, scala.Predef
gen.mkWildcardImport(sym)
else // e. g. import java.lang.String
gen.mkImport(sym.enclosingPackage, sym.name, sym.name) // <--- ?????
包/模块导入可以工作,但是类导入似乎不行,即使看起来是正确的。
TreeGen
的东西来完成这个,但如果你是在一个普通的宏中编写这个,你需要将sym.name
(目前是一个TypeName
)更改为TermName
。 - Travis BrownasTerm
,但是没有成功。 - socgen.mkImport(sym.enclosingPackage, sym.name.toTermName, sym.name.toTermName)
可行! - soc