是否有一种方法可以使用校验样式来不允许使用特定的枚举值(除了试图用正则表达式捕获它)?
我想阻止javax.persistence.CascadeType.ALL
的使用,但似乎只能找到防止使用整个javax.persistence.CascadeType枚举的选项。
发布于 2022-01-29 23:34:05
这不是那么容易,但有几种方法(或解决办法?)
CascadeType.ALL
的任何用法的冲突。配置如下所示<!-- under TreeWalker -->
<module name="MatchXpath">
<property name="query" value="//DOT[count(./IDENT) = 2 and ./*[1][@text = 'CascadeType'] and ./*[2][@text = 'ALL']]"/>
<message key="matchxpath.match"
value="Do not use Cascade.ALL"/>
</module>
它将报告违反CascadeType.ALL
的任何使用,不包括进口。但是,如果您直接使用静态导入和常量,它将无法工作。
import static javax.persistence.CascadeType.ALL;
Object a = ALL; // we wont catch it
ALL
。<!-- under TreeWalker -->
<module name="MatchXpath">
<property name="query" value="//IDENT[@text = 'ALL']"/>
<message key="matchxpath.match"
value="Do not use CascadeType.ALL"/>
</module>
这将捕获所有的用法(导入也是如此),但是如果您有其他名为ALL的常量,则会产生假阳性,因为这里我们没有指定它的类型。
import static javax.persistence.CascadeType.ALL;
但如果有明星进口的话,这是行不通的。
您还可以尝试组合这些方法或创建更好的xpath,因为上面的只是一个草图。
https://stackoverflow.com/questions/70801277
复制相似问题