从gradle插件中获取带注释的方法

时间:2018-05-27 09:23:53

标签: java android kotlin gradle-plugin

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

我尝试将反射应用于此文件,但我总是找到一个没有类的异常。我想gradle插件试图在项目的同一个gradle插件中找到类,而不是使用插件的Android项目。

有没有办法扫描我的ArrayList中的每个File对象并获取带有注释@test的所有方法?

1 个答案:

答案 0 :(得分:1)

由于您拥有项目中所有文件的列表,您需要迭代它们,依次打开它们并读取它们(作为文本)以查找任何方法在@Test注释之后的名称。

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

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