使checkstyle需要变量前缀



我希望所有复选框变量都以"ckx"开头。

^.*JCheckBox((?! ckx).)*$

这适用于变量声明,但也匹配定义。例如

ckxSomeCheckbox = new JCheckBox();

知道如何防止此代码显示为错误吗?

有效示例:

private JCheckBox ckxTest = new JCheckBox();
public javax.swing.JCheckBox ckxTest;

无效示例:

private JCheckBox abcTest;
private JCheckBox abcckxTest;
ckxTest = new JCheckBox();
ckxTest = new JCheckBox("");

我建议使用RegexpMultiline检查,这样可以发现人们在不方便的地方插入换行符的情况。

正则表达式将是bJCheckBoxbs*(?!ckx[A-Z])w+(解释/示例(。

<module name="RegexpMultiline">
<property name="format" value="bJCheckBoxbs*(?!ckx[A-Z])w+"/>
<property name="message" value="Missing prefix 'ckx' on checkbox variable"/>
<property name="fileExtensions" value="java"/>
</module>

请注意,我去掉了错误标识符位于行开头的行,因为这些行不会编译。除非您已经提前声明了变量,否则在这种情况下,这将是标记问题的地方。

ckxTest = new JCheckBox(); 
ckxTest = new JCheckBox("");

用正则表达式检查这一点并不完美,因为人们可能会使用注释或子类来混淆检测器。因此,使用PMD XPath规则或其他方法将是一种更强大的方法,但这是另一个问题。:-(


使用RegexpSinglelineJava也可以实现同样的效果,它增加了忽略注释的功能,但会因意外的换行而脱轨:

<module name="RegexpSinglelineJava">
<property name="format" value="bJCheckBoxbs*(?!ckx[A-Z])w+"/>
<property name="message" value="Missing prefix 'ckx' on checkbox variable"/>
<property name="ignoreComments" value="true"/>
</module>

最新更新