如何编写将搜索javax.validation.constraints.NotNull批注并验证其是否具有消息属性的PMD规则?

坏:

@NotNull
private int value;




@NotNull(message = "value cannot be null.")
private int value;


我主要担心的是,该注释基本上可以放置在任何地方

@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })

最佳答案

这是xpath查询,用于查找没有消息的NotNull批注:
//Annotation[*/Name/@Image = 'NotNull' and not(.//MemberValuePair/@Image = 'message')]

我已经测试了除ANNOTATION_TYPE之外的所有情况,我不确定如何在PMD构建器应用程序中进行测试。

如果您想全部javax.validation.constraints我想出了这个:
//Annotation[*/Name/@Image = tokenize(replace(string-join(//ImportDeclaration/Name/@Image[starts-with(., "javax.validation.constraints.")], "|"), "javax.validation.constraints.", ""), '[|]') and not(.//MemberValuePair/@Image = 'message')]

因此:取所有以javax.validation.constraints.开头的导入,用string-join转换为字符串,用javax.validation.constraints.除去replace并用tokenize拆分为一组值。

关于java - PMD查找批注并检查是否具有属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40111626/

10-11 19:16