如何检查/读取Gradle插件中的Java文件

如何检查/读取Gradle插件中的Java文件,java,gradle,kotlin,gradle-plugin,Java,Gradle,Kotlin,Gradle Plugin,我正在编写一个Gradle插件,它需要扫描Kotlin文件并查找类中是否包含某个接口。例如,使用以下代码片段: class MyClass { interface MyInterface { fun doSomething() } } 我的插件将在控制台上打印找到接口MyInterface的信息,对于此代码段: class MySecondClass {} 不会打印任何东西 我已经成功地创建了插件结构和一个像这样的DefaultTask,在这里我从用户输入中获

我正在编写一个Gradle插件,它需要扫描Kotlin文件并查找类中是否包含某个接口。例如,使用以下代码片段:

class MyClass {
    interface MyInterface {
        fun doSomething()
    }
}
我的插件将在控制台上打印找到接口MyInterface的信息,对于此代码段:

class MySecondClass {}
不会打印任何东西

我已经成功地创建了插件结构和一个像这样的DefaultTask,在这里我从用户输入中获取了需要检查的文件(用Kotlin编写):


如何检查inputFile对象?有没有办法将其转换为UAST或PSI?如果是,怎么做?

所以我发现这个项目:我相信它会让我走上正确的方向,但是任何建议都是受欢迎的,因为我不知道这是否是首选/正确的方法

所以我发现这个项目:我相信它会让我走上正确的方向,但是任何建议都是受欢迎的,由于我不知道这是否是首选/正确的方法,我同意您的想法,即使用解析器是正确的方法。我发现它有指向GitHub上使用的两个项目的指针。看起来基本上是第一个的副本,但提供了一些更有用的示例来说明如何使用它。

我同意您的想法,即使用解析器是正确的方法。我发现它有指向GitHub上使用的两个项目的指针。看起来基本上是第一种方法的副本,但提供了一些更有用的示例来说明如何使用它。

我认为使用解析器绝对是最安全、最干净的方法,因为您不必担心自己解析文本和跟踪代码结构。(例如,如果您只是通过扫描文本来寻找
接口
,您必须确保它没有被注释掉代码。)JavaParser看起来适合这项工作,这才是真正重要的。我相信JavaParser不适用于Kotlin文件。我在Github页面上发布了一条消息:啊,我的道歉。我刚刚检查了API的适用性;我想是因为你建议它处理Kotlin。我的错。看起来可能有几条线索与之相关,我认为使用解析器绝对是最安全、最干净的方法,因为您不必担心自己解析文本和跟踪代码结构。(例如,如果您只是通过扫描文本来寻找
接口
,您必须确保它没有被注释掉代码。)JavaParser看起来适合这项工作,这才是真正重要的。我相信JavaParser不适用于Kotlin文件。我在Github页面上发布了一条消息:啊,我的道歉。我刚刚检查了API的适用性;我想是因为你建议它处理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
    }
}