自定义findBugs检测器

1.java 检测类 继承?OpcodeStackDetector

public class SysoutDetector extends OpcodeStackDetector {

BugReporter bugReporter;

public SysoutDetector(BugReporter bugReporter) {

this.bugReporter = bugReporter;

}

@Override

public void sawOpcode(int seen) {

if (seen == GETSTATIC) {

if (getClassConstantOperand().equals(“java/lang/System”)// get class mapping

&& (getNameConstantOperand().equals(“out”))) {

BugInstance bug = new BugInstance(this, “CHECK_SYSTEMCLASS”, NORMAL_PRIORITY).addClassAndMethod(this).addSourceLine(this, getPC());

bug.addInt(getPC());

bugReporter.reportBug(bug);

}

}

}

}

BugInstance 的type参数 为 messages.xml中发布的?<BugPattern type=”CHECK_SYSTEMCLASS”>

2.更改messages.xml

注册

<BugPattern type=”CHECK_SYSTEMCLASS”>

<ShortDescription>使用了System.out </ShortDescription>

<LongDescription>checks {1} method.Changes to logger if needed.</LongDescription>

<Details>

<![CDATA[

<p>system class used.

</p>

]]>

</Details>

该 ?BugPattern 的?ShortDescription 为findbugs静态检测后bug exlpoer 中的bug 节点名称

注册?<Detector class=”edu.umd.cs.findbugs.detect. SysoutDetector “>

<Details>

<![CDATA[

<p>Checks for classes used System class. </p>

]]>

</Details>

</Detector>

注册?<BugCode abbrev=”CUSTOM”>System class used</BugCode> ,注册一个自己的bugCode,意义不大,如果自己不注册一个,

findbugs.xml中 abbrev值就要使用系统的

3.修改findbugs.xml 文件

注册 <BugPattern abbrev=”CUSTOM” type=”CHECK_SYSTEMCLASS” category=”EXPERIMENTAL” />

此意: ?CHECK_SYSTEMCLASS 为?EXPERIMENTAL 下检测器,

EXPERIMENTAL 在Myeclispe/window/preferences/java/findbugs 中勾选

注册<Detector class=”edu.umd.cs.findbugs.detect.SysoutDetector”

speed=”fast” reports=”CHECK_SYSTEMCLASS” hidden=”false”/>

4.发布

找到findbugs的Myeclipse插件目录,找到?findbugs-plugin.jar

替换其下的findbugs.xml 和 messages.xml,以及加入新的class文件。重启Myeclipse即可。

(转载本站文章请注明作者和出处 JavaRanger – javaranger.com ,请勿用于任何商业用途)

本文链接: http://www.javaranger.com/archives/109 

一条评论

  1. 美图共赏说道:

    美图在这里:http://www.fydzv.com/

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>