我正在编写一个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 File 对象?有没有办法将其转换为UAST或PSI?如果是这样,怎么样?
答案 0 :(得分:1)
所以我找到了这个项目:http://javaparser.org/我相信它会让我朝着正确的方向前进,但欢迎任何建议,因为我不知道这是否是首选/正确的方法
答案 1 :(得分:1)
我同意你的想法,使用解析器是解决这个问题的正确方法。我发现a discussion of parsing Kotlin指向使用antlr4 grammars to parse Kotlin的GitHub上的2个项目。 The second project似乎基本上是第一个的副本,但提供了更有用的如何使用它的示例。