Use spotbugs-archetype to create Maven project. Then Maven archetype plugin will ask you to decide plugin's groupId, artifactId, package and initial version.
.. literalinclude:: generated/use-archetype.template.inc :language: bash
In generated project, you can find a file named as BadCase.java. Update this file to represent the target bug to find.
If you have multiple patterns to represent, add more classes into src/test/java
directory.
In generated project, you can find another file named as MyDetectorTest.java.
The spotbugs.performAnalysis(Path)
in this test runs SpotBugs with your plugin, and return all found bugs (here 1st argument of this method is a path of class file compiled from BadCase.java
).
You can use BugInstanceMatcher to verify that your plugin can find bug as expected.
Currently this test should fail, because we've not updated detector itself yet.
To avoid false-positive, it is good to ensure that in which case detector should NOT find bug.
Update GoodCase.java in your project, and represent such cases.
After that, add a test method into MyDetectorTest.java
which verify that no bug found from this GoodCase
class.
If you have multiple patterns to represent, add more classes into src/test/java
directory.
Now you have tests to ensure that your detector can work as expected.
Note
TBU
- AnnotationDetector
- Base detector which analyzes annotations on classes, fields, methods, and method parameters.
- BytecodeScanningDetector
- Base detector which analyzes java bytecode in class files.
- OpcodeStackDetector
- Sub class of
BytecodeScanningDetector
, which can scan the bytecode of a method and use an operand stack.
SpotBugs reads findbugs.xml
in each plugin to find detectors and bugs.
So when you add new detector, you need to add new <Detector>
element like below:
<Detector class="com.github.plugin.MyDetector" reports="MY_BUG" speed="fast" />
It is also necessary to add <BugPattern>
, to describe type and category of your bug pattern.
<BugPattern type="MY_BUG" category="CORRECTNESS" />
You can find findbugs.xml
in src/main/resources
directory of generated Maven project.
SpotBugs reads messages.xml
in each plugin to construct human readable message to report detected bug.
It also supports reading localized messages from messages_ja.xml
, messages_fr.xml
and so on.
You can find messages.xml
in src/main/resources
directory of generated Maven project.
In <Detector>
element, you can add detector's description message. Note that it should be plain text, HTML is not supported.
<Detector class="com.github.plugin.MyDetector">
<Details>
Original detector to detect MY_BUG bug pattern.
</Details>
</Detector>
In <BugPattern>
element, you can add bug pattern's description message.
There are three kinds of messages:
- ShortDescription
- Short description for bug pattern. Useful to tell its intent and character for users. It should be plain text, HTML is not supported.
- LongDescription
Longer description for bug pattern. You can use placeholder like
{0}
(0-indexed), then added data into BugInstance will be inserted at there. So thisLongDescription
is useful to tell detailed information about detected bug.It should be plain text, HTML is not supported.
- Details
- Detailed description for bug pattern. It should be HTML format, so this is useful to tell detailed specs/examples with table, list and code snippets.
<BugPattern type="MY_BUG">
<ShortDescription>Explain bug pattern shortly.</ShortDescription>
<LongDescription>
Explain existing problem in code, and how developer should improve their implementation.
</LongDescription>
<Details>
<![CDATA[
<p>Explain existing problem in code, and how developer should improve their implementation.</p>
]]>
</Details>
</BugPattern>