从 gradle 插件获取注释方法
Get annotated methods from gradle plugin
我正在为 kotlin 中的 android 项目开发一个 gradle 插件,我需要扫描项目源文件以获取所有测试的名称。我已经实现了一个目录扫描器,我得到了一个 Arraylist<File>
和所有测试 classes.
我试图对这些文件应用反射,但我总是得到一个没有 class 发现的异常。我假设 gradle 插件试图在同一个 gradle 插件项目中找到 class,而不是使用该插件的 Android 项目。
有什么方法可以扫描我的 ArrayList 中的每个 File 对象并获取所有带有注释的方法 @test
?
由于您拥有的是项目中所有 source 文件的列表,因此您需要遍历它们,依次打开每个文件并阅读它们(作为文本) 查找 @Test
注释后的任何方法名称。
取决于您的编码标准有多严格,以及它们的遵循情况,这可能几乎微不足道或非常困难。在我们的代码库中,您可以简单地查找匹配 ^\s+@Test
的行,然后将下一行与 ^\s+\w+\s+\w+\s+(\w+)\(
匹配以获得方法名称。 (或者,如果您愿意,也可以将其标记化。)这几乎是最简单的情况;如果您的代码库使用 @Ignore
来禁用测试,或者有人将测试包装在多行注释块 (/* ... */
) 中,或者如果可能存在奇怪的格式、缺少访问修饰符等,那么您的工作会更难。
哦,我不会费心在这里搜索如何忽略代码中的注释 - 大多数第一次点击都是错误的。错误包括假设多行注释从一行的开头开始(一行中没有匹配多行注释开头的前导内容)并在一行的结尾结束;如果一行包含多行注释开头,则不需要 also 检查单行注释(这可能会注释掉多行注释开头,具体取决于顺序), 以及其他问题。
我正在为 kotlin 中的 android 项目开发一个 gradle 插件,我需要扫描项目源文件以获取所有测试的名称。我已经实现了一个目录扫描器,我得到了一个 Arraylist<File>
和所有测试 classes.
我试图对这些文件应用反射,但我总是得到一个没有 class 发现的异常。我假设 gradle 插件试图在同一个 gradle 插件项目中找到 class,而不是使用该插件的 Android 项目。
有什么方法可以扫描我的 ArrayList 中的每个 File 对象并获取所有带有注释的方法 @test
?
由于您拥有的是项目中所有 source 文件的列表,因此您需要遍历它们,依次打开每个文件并阅读它们(作为文本) 查找 @Test
注释后的任何方法名称。
取决于您的编码标准有多严格,以及它们的遵循情况,这可能几乎微不足道或非常困难。在我们的代码库中,您可以简单地查找匹配 ^\s+@Test
的行,然后将下一行与 ^\s+\w+\s+\w+\s+(\w+)\(
匹配以获得方法名称。 (或者,如果您愿意,也可以将其标记化。)这几乎是最简单的情况;如果您的代码库使用 @Ignore
来禁用测试,或者有人将测试包装在多行注释块 (/* ... */
) 中,或者如果可能存在奇怪的格式、缺少访问修饰符等,那么您的工作会更难。
哦,我不会费心在这里搜索如何忽略代码中的注释 - 大多数第一次点击都是错误的。错误包括假设多行注释从一行的开头开始(一行中没有匹配多行注释开头的前导内容)并在一行的结尾结束;如果一行包含多行注释开头,则不需要 also 检查单行注释(这可能会注释掉多行注释开头,具体取决于顺序), 以及其他问题。