java - 从 gradle 插件中获取带注释的方法
问题描述
我正在为 kotlin 中的 android 项目开发一个 gradle 插件,我需要扫描项目源文件以获取所有测试的名称。我已经实现了一个目录扫描器,并且我得到了Arraylist<File>
所有测试类。
我试图对这些文件应用反射,但我总是得到一个找不到类的异常。我想 gradle 插件试图在项目的同一个 gradle 插件中找到类,而不是在使用该插件的 Android 项目中。
有什么方法可以扫描我的 ArrayList 中的每个 File 对象并获取所有带有注释的方法@test
?
解决方案
由于您拥有的是项目中所有源文件的列表,因此您需要遍历它们,依次打开每个文件并读取它们(作为文本)以查找@Test
注释后面的任何方法名称。
取决于你的编码标准有多强,以及它们的遵循程度,这可能几乎是微不足道的或相当困难的。在我们的代码库中,您可以简单地查找匹配的行^\s+@Test
,然后匹配下一行^\s+\w+\s+\w+\s+(\w+)\(
以获得方法名称。(或者,如果您愿意,也可以对其进行标记。)这几乎是您最简单的情况;如果您的代码库用于@Ignore
禁用测试,或者有人将测试包装在多行注释块 ( /* ... */
) 中,或者可能存在奇怪的格式、缺少访问修饰符等,那么您的工作将更加困难。
哦,我不会费心在这里搜索如何忽略代码中的注释 - 大多数第一次点击都做错了。错误包括假设多行注释从行首开始(行上没有与多行注释开始匹配的前导内容)并在行尾结束;如果一行包含多行注释开头,则也不需要检查单行注释(可能会注释掉多行注释开头,具体取决于顺序),以及其他问题。
推荐阅读
- sql - 问题:Source和Targetdestination解析问题SQL
- javascript - 在 ReactJS 的 FormData 中使用时,头像总是显示为未定义
- python - 在python中不带正则表达式的字符串中搜索*任何*数字的最快方法?
- go - 与 golang 中已验证的发件人身份错误不匹配
- ios - dyld:库未加载:反应原生
- c# - 仅将 DataGridView 的单元格值保存为图像
- ios - 如何通过SwiftUI中列表的每个元素的onTapGesture切换到另一个视图?
- javascript - 带有 onAuthStateChanged 的 Firebase 开关标头选项
- c - 我正在尝试制作一个将整数转换为不返回字符串的字符串的函数。我该如何解决这个问题?
- haskell - Hakell 不计算变量的类型