有没有办法使用静态代码分析来确定某种类型的所有字段是否都有注释?

时间:2011-06-03 13:58:02

标签: java code-analysis static-analysis

我有一些POJO用于​​在我的应用程序及其Web服务中随机播放数据。我们刚刚引入了一个注释来帮助我们验证那些POJO中的String字段是否具有一定的长度。这使我们可以验证POJO,而不是等待数据库层在异常持续时发出异常。

我现在想对那些会告诉我哪些字段是没有这个新注释的字符串的对象进行分析。我想这样做,这样我就可以得到一个没有这个注释的字段列表,这样就可以将它与相应的DB字段进行比较,并将注释添加为正确的长度作为参数。

不,我们无法在POJO和数据库对象之间获得更好的关联。

我们的数据库对象没有此验证可用。我们确实希望在POJO上进行此验证,因为在运行时验证和报告无效数据更简单。

是否有一些静态分析工具可以帮助我完成这项任务?

2 个答案:

答案 0 :(得分:1)

不确定

解析Java代码。走AST吧。找到感兴趣的字段(可能需要您也可以命名并键入分辨率(“符号表”),以便在类的AST中告诉您的字段来自其他字段),并检查AST以获取所需的注释。 / p>

您可以使用任何Java AST解析器(和名称解析器)执行此操作。我认为Eclipse可以提供这个。我们的DMS Software Reengineering Toolkit可以做到这一点。 ANTLR似乎有一个Java解析器,但我怀疑它是否具有Java名称和类型解析。

答案 1 :(得分:0)

我选择使用注释来满足运行时验证需求,然后精心设计单元测试来验证是否所有字段都已注释。这受到@c0mrade的启发。

因此注释是@Length并且需要一个整数参数。在运行时,验证器迭代字段并查找@Length注释并确保将其应用于String字段。然后查看字符串值的长度,并确保它小于或等于注释的参数。

在单元测试中,我按包装载了我的POJO的所有类。然后我迭代这些类,迭代每个类字段,最后检查并查看该字段是否为字符串并分配了@Length注释。如果该字段是String且没有@Length,则会将类和字段名称添加到字符串列表中。测试的断言是这个列表是空的。