我正在写一个Gradle插件,它需要扫描Kotlin文件,并找到类中是否包含特定的接口。例如,使用以下代码片段:
class MyClass {
interface MyInterface {
fun doSomething()
}
}
我的插件将在控制台上打印找到接口MyInterface的信息,并显示以下代码片段:
class MySecondClass {}
不会打印任何东西。
我已经成功地创建了插件结构和类似这样的DefaultTask,其中我从用户输入(用Kotlin编写)中获取需要检查的文件:
open class MyGradleTas : DefaultTask() {
@InputFile lateinit var inputFile: File
@OutputDirectory lateinit var outputDirectory: File
@TaskAction
fun run() {
// How can I inspect the Java/Kotlin code inside the inputFile object
}
}
如何检查inputFile文件对象?有没有办法把它转换成UAST或PSI?如果是这样的话,是怎么做的?
发布于 2018-06-09 02:44:45
所以我找到了这个项目:http://javaparser.org/,我相信它会把我带到正确的方向,但欢迎任何建议,因为我不知道这是否是首选/正确的方法
发布于 2018-06-09 04:12:31
我同意您的想法,即使用解析器是解决此问题的正确方法。我发现a discussion of parsing Kotlin上有两个使用antlr4 grammars to parse Kotlin的GitHub项目的指针。The second project看起来基本上是前者的副本,但提供了一些更有用的示例来说明如何使用它。
https://stackoverflow.com/questions/50766462
复制相似问题