首页 > 解决方案 > 从 gradle 插件中获取带注释的方法

问题描述

我正在为 kotlin 中的 android 项目开发一个 gradle 插件,我需要扫描项目源文件以获取所有测试的名称。我已经实现了一个目录扫描器,并且我得到了Arraylist<File>所有测试类。

我试图对这些文件应用反射,但我总是得到一个找不到类的异常。我想 gradle 插件试图在项目的同一个 gradle 插件中找到类,而不是在使用该插件的 Android 项目中。

有什么方法可以扫描我的 ArrayList 中的每个 File 对象并获取所有带有注释的方法@test

标签: javaandroidkotlingradle-plugin

解决方案


由于您拥有的是项目中所有文件的列表,因此您需要遍历它们,依次打开每个文件并读取它们(作为文本)以查找@Test注释后面的任何方法名称。

取决于你的编码标准有多强,以及它们的遵循程度,这可能几乎是微不足道的或相当困难的。在我们的代码库中,您可以简单地查找匹配的行^\s+@Test,然后匹配下一行^\s+\w+\s+\w+\s+(\w+)\(以获得方法名称。(或者,如果您愿意,也可以对其进行标记。)这几乎是您最简单的情况;如果您的代码库用于@Ignore禁用测试,或者有人将测试包装在多行注释块 ( /* ... */) 中,或者可能存在奇怪的格式、缺少访问修饰符等,那么您的工作将更加困难。

哦,我不会费心在这里搜索如何忽略代码中的注释 - 大多数第一次点击都做错了。错误包括假设多行注释从行首开始(行上没有与多行注释开始匹配的前导内容)并在行尾结束;如果一行包含多行注释开头,则也不需要检查单行注释(可能会注释掉多行注释开头,具体取决于顺序),以及其他问题。


推荐阅读