[英]Custom Validator for Static Use of Reflection vs. Custom Rule in SonarQube (Java, Eclipse)
可能存在一些相关的问题,但是我认为我的情况非常独特,足以单独提出一个问题。
我正在开发一个历史悠久的大型Java项目(由于其他原因,我们目前仍绑定Java 6,因此LOC远远超过100万个LOC),其中反射用于在表中显示数据-反射不用于动态更改显示的数据,但仅用于在代码中使用某种捷径。 代码的简化部分如下所示。
TableColumns taco = new TableColumns(Bean.class);
taco.add(new TableColumn("myFirstMember"));
taco.add(new TableColumn("mySecondMember"));
...
List<Bean> dataList = getDataFromDB(myFilterSettings);
taco.displayTable(dataList);
因此,每一行的表格单元格的值都存储在Bean
的实例中。 第一个单元格的值来自调用itemOfDataList.getMyFirstMember()
(因此,代码的反射部分来自此)。 表格单元格的呈现取决于itemOfDataList.getMyFirstMember()
的返回类型。
这样,很容易将新列添加到表中,使它们以标准方式呈现而无需关心任何细节。
这种方法的问题:当getter名称更改时,编译器不会注意到,并且在运行时会发生异常,以防Bean.getMyFirstMember()
重命名为Bean.getMyFirstMemberChanged()
。
虽然使用反射来确定调用哪个getter,但实际上所需的信息在编译时可用,但没有任何变量用于列信息。
我的目标是:拥有一个验证器,该验证器将在编译时检查Bean
类中所需的getter方法是否存在。
可能的解决方法:
修改代码 (使用更具体的信息,编写适配器,使用批注或编译器可以在编译时检查的任何内容),由于代码基础庞大, 我显然不希望这种解决方案 。 我只需要保证反射在运行时不会失败。
编写自定义验证器 :我想这应该不太复杂,但是我不知道如何开始,我们使用eclipse作为ide,因此应该有可能编写这样的自定义验证器-任何提示都是一个好的起点? 验证器应该显示在蚀警告,如果parameter
在TableColumn(parameter)
是不final
(应该是文字或恒定)。 如果将TableColumn
添加到TableColumns
并且相应的Bean.getParameter()
不存在,则验证器将在Eclipse中显示错误。
当我们使用SonarQube进行质量检查时,如果方法确实存在,我们还可以实施自定义规则检查-不能完全确定这种自定义规则是否可行(可能是)
我要的是:
在这种情况下,更简单的方法是:为日食编写自定义验证器,或为SonarQube编写自定义规则?
提示从哪一种方法开始
其他解决方案的提示
谢谢你的帮助。
一些替代方案:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.