如何使用SpotBugs过滤器文件匹配构造方法,仅抑制其触发的EI_EXPOSE_REP2告警
如何使用SpotBugs过滤器文件匹配构造方法,仅抑制其触发的EI_EXPOSE_REP2告警
刚好对SpotBugs的过滤规则门儿清,来给你解决这个问题!你之前试的name="Boo"或者name="new"没起效,是因为SpotBugs识别构造方法靠的是字节码层面的特殊名称<init>,不是类名也不是new关键字。
要精准抑制Boo类构造方法触发的EI_EXPOSE_REP2告警,同时不影响setter方法的同类提示,你直接在过滤文件里用这段配置就行:
<Match> <!-- 锁定要抑制的具体告警类型 --> <Bug pattern="EI_EXPOSE_REP2"/> <!-- 指定目标类为Boo --> <Class name="Boo"/> <!-- 匹配构造方法:Java字节码中所有构造方法的固定名称都是<init> --> <Method name="<init>"/> </Match>
给你拆解下每个部分的作用:
<Bug pattern="EI_EXPOSE_REP2"/>:确保我们只处理这个“may expose internal representation by storing an externally mutable object”的告警,不会误抑制其他SpotBugs问题<Class name="Boo"/>:把范围限定到你关心的Boo类,不会影响其他类的规则<Method name="<init>"/>:这是关键!所有Java构造方法编译成字节码后,名称都会变成<init>,SpotBugs就是靠这个标识来识别构造方法的,用它就能精准匹配到构造方法,而不会和setter这类普通方法混淆
这样配置后,只有Boo类构造方法触发的EI_EXPOSE_REP2告警会被压制,setter方法的同类告警依然会正常触发,完全满足你“只针对构造方法”的需求。
备注:内容来源于stack exchange,提问作者Harald
相关产品推荐
相关产品推荐

