3506 lines
129 KiB
HTML
3506 lines
129 KiB
HTML
<html>
|
|
<head>
|
|
<title>FindBugs Change Log</title>
|
|
<link rel="stylesheet" type="text/css" href="findbugs.css">
|
|
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<table width="100%">
|
|
<tr>
|
|
|
|
|
|
<td bgcolor="#b9b9fe" valign="top" align="left" width="20%">
|
|
<table width="100%" cellspacing="0" border="0">
|
|
<tr><td><a class="sidebar" href="index.html"><img src="umdFindbugs.png" alt="FindBugs"></a></td></tr>
|
|
|
|
<tr><td> </td></tr>
|
|
|
|
<tr><td><b>Docs and Info</b></td></tr>
|
|
<tr><td><font size="-1"><a class="sidebar" href="findbugs2.html">FindBugs 2.0</a></font></td></tr>
|
|
<tr><td><font size="-1"><a class="sidebar" href="demo.html">Demo and data</a></font></td></tr>
|
|
<tr><td><font size="-1"><a class="sidebar" href="users.html">Users and supporters</a></font></td></tr>
|
|
<tr><td><font size="-1"><a class="sidebar" href="http://findbugs.blogspot.com/">FindBugs blog</a></font></td></tr>
|
|
<tr><td><font size="-1"><a class="sidebar" href="factSheet.html">Fact sheet</a></font></td></tr>
|
|
<tr><td><font size="-1"><a class="sidebar" href="manual/index.html">Manual</a></font></td></tr>
|
|
<tr><td><font size="-1"><a class="sidebar" href="ja/manual/index.html">Manual(ja/日本語)</a></font></td></tr>
|
|
<tr><td><font size="-1"><a class="sidebar" href="FAQ.html">FAQ</a></font></td></tr>
|
|
<tr><td><font size="-1"><a class="sidebar" href="bugDescriptions.html">Bug descriptions</a></font></td></tr>
|
|
<tr><td><font size="-1"><a class="sidebar" href="mailingLists.html">Mailing lists</a></font></td></tr>
|
|
<tr><td><font size="-1"><a class="sidebar" href="publications.html">Documents and Publications</a></font></td></tr>
|
|
<tr><td><font size="-1"><a class="sidebar" href="links.html">Links</a></font></td></tr>
|
|
|
|
<tr><td> </td></tr>
|
|
|
|
<tr><td><a class="sidebar" href="downloads.html"><b>Downloads</b></a></td></tr>
|
|
|
|
<tr><td> </td></tr>
|
|
|
|
<tr><td><a class="sidebar" href="http://www.cafeshops.com/findbugs"><b>FindBugs Swag</b></a></td></tr>
|
|
|
|
<tr><td> </td></tr>
|
|
|
|
<tr><td><b>Development</b></td></tr>
|
|
<tr><td><font size="-1"><a class="sidebar" href="http://sourceforge.net/tracker/?group_id=96405">Open bugs</a></font></td></tr>
|
|
<tr><td><font size="-1"><a class="sidebar" href="reportingBugs.html">Reporting bugs</a></font></td></tr>
|
|
<tr><td><font size="-1"><a class="sidebar" href="contributing.html">Contributing</a></font></td></tr>
|
|
<tr><td><font size="-1"><a class="sidebar" href="team.html">Dev team</a></font></td></tr>
|
|
<tr><td><font size="-1"><a class="sidebar" href="api/index.html">API</a> <a class="sidebar" href="api/overview-summary.html">[no frames]</a></font></td></tr>
|
|
<tr><td><font size="-1"><a class="sidebar" href="Changes.html">Change log</a></font></td></tr>
|
|
<tr><td><font size="-1"><a class="sidebar" href="http://sourceforge.net/projects/findbugs">SF project page</a></font></td></tr>
|
|
<tr><td><font size="-1"><a class="sidebar" href="http://code.google.com/p/findbugs/source/browse/">Browse source</a></font></td></tr>
|
|
<tr><td><font size="-1"><a class="sidebar" href="http://code.google.com/p/findbugs/source/list">Latest code changes</a></font></td></tr>
|
|
</table>
|
|
</td>
|
|
|
|
<td align="left" valign="top">
|
|
|
|
|
|
<h1>
|
|
FindBugs Change Log, Version 2.0.0
|
|
</h1>
|
|
|
|
<h2> Changes since version 1.3.8</h2>
|
|
<ul>
|
|
<li>New bug patterns; in some cases, bugs previous reported as other bug patterns are reported as instances
|
|
of these new bug patterns in order to make it easier for developers to understand the bug reports</li>
|
|
<ul>
|
|
<li><a href="http://findbugs.sourceforge.net/bugDescriptions.html#BC_IMPOSSIBLE_DOWNCAST ">BC_IMPOSSIBLE_DOWNCAST </a>
|
|
<li><a href="http://findbugs.sourceforge.net/bugDescriptions.html#BC_IMPOSSIBLE_DOWNCAST_OF_TOARRAY ">BC_IMPOSSIBLE_DOWNCAST_OF_TOARRAY </a>
|
|
<li><a href="http://findbugs.sourceforge.net/bugDescriptions.html#EC_INCOMPATIBLE_ARRAY_COMPARE ">EC_INCOMPATIBLE_ARRAY_COMPARE </a>
|
|
<li><a href="http://findbugs.sourceforge.net/bugDescriptions.html#JLM_JSR166_UTILCONCURRENT_MONITORENTER ">JLM_JSR166_UTILCONCURRENT_MONITORENTER </a>
|
|
<li><a href="http://findbugs.sourceforge.net/bugDescriptions.html#LG_LOST_LOGGER_DUE_TO_WEAK_REFERENCE ">LG_LOST_LOGGER_DUE_TO_WEAK_REFERENCE </a>
|
|
<li><a href="http://findbugs.sourceforge.net/bugDescriptions.html#NP_CLOSING_NULL ">NP_CLOSING_NULL </a>
|
|
<li><a href="http://findbugs.sourceforge.net/bugDescriptions.html#RC_REF_COMPARISON_BAD_PRACTICE ">RC_REF_COMPARISON_BAD_PRACTICE </a> <li><a href="http://findbugs.sourceforge.net/bugDescriptions.html#RC_REF_COMPARISON_BAD_PRACTICE_BOOLEAN ">RC_REF_COMPARISON_BAD_PRACTICE_BOOLEAN </a> <li><a href="http://findbugs.sourceforge.net/bugDescriptions.html#RV_RETURN_VALUE_OF_PUTIFABSENT_IGNORED ">RV_RETURN_VALUE_OF_PUTIFABSENT_IGNORED </a> <li><a href="http://findbugs.sourceforge.net/bugDescriptions.html#SIC_THREADLOCAL_DEADLY_EMBRACE ">SIC_THREADLOCAL_DEADLY_EMBRACE </a> <li><a href="http://findbugs.sourceforge.net/bugDescriptions.html#UR_UNINIT_READ_CALLED_FROM_SUPER_CONSTRUCTOR ">UR_UNINIT_READ_CALLED_FROM_SUPER_CONSTRUCTOR </a> <li><a href="http://findbugs.sourceforge.net/bugDescriptions.html#VA_FORMAT_STRING_EXPECTED_MESSAGE_FORMAT_SUPPLIED ">VA_FORMAT_STRING_EXPECTED_MESSAGE_FORMAT_SUPPLIED </a>
|
|
</ul>
|
|
<li>Providing a bug rank (1-20), and the ability to filter by bug rank. Eventually,
|
|
it will be possible to specify your own rules for ranking bugs, but the procedure for doing so hasn't been specified yet.
|
|
<li>Fixed about <a href="https://sourceforge.net/search/index.php?group_id=96405&search_summary=1&search_details=1&type_of_search=artifact&group_artifact_id%5B%5D=614693&open_date_start=2009-03-16&open_date_end=2009-08-20&form_submit=Search">45 bugs filed</a> through SourceForge
|
|
<li>Various reclassifications and priority tweaks
|
|
<li>Added more bug annotations to a variety of bug reports.
|
|
This provides more context for understanding bug reports
|
|
(e.g., if the value in question was is the return value
|
|
of a method, the method is described as the source of
|
|
the value in a bug annotation). This also provide more
|
|
accurate tracking of issues across versions of the code
|
|
being analyzed, but has the downside that when comparing
|
|
results from FindBugs 1.3.8 and FindBugs 1.3.9 on the
|
|
same version of code being analyzed,
|
|
FindBugs may think that mistakenly believe that the
|
|
issue reported by 1.3.8 was fixed and a new issue was
|
|
introduced that was reported by FindBugs 1.3.9. While
|
|
annoying, it would be unusual for more than a dozen
|
|
issues per million
|
|
lines of codes to be mistracked.
|
|
<li> Lots of internal changes moving towards FindBugs 2.0, but these
|
|
features are undocumented, not yet officially supported, and subject to
|
|
radical changes before FindBugs 2.0 is released.
|
|
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
<p> Changes since version 1.3.8</p>
|
|
<ul>
|
|
<li>New bug patterns; in some cases, bugs previous reported as other bug patterns are reported as instances
|
|
of these new bug patterns in order to make it easier for developers to understand the bug reports</li>
|
|
<ul>
|
|
<li><a href="http://findbugs.sourceforge.net/bugDescriptions.html#BC_IMPOSSIBLE_DOWNCAST ">BC_IMPOSSIBLE_DOWNCAST </a>
|
|
<li><a href="http://findbugs.sourceforge.net/bugDescriptions.html#BC_IMPOSSIBLE_DOWNCAST_OF_TOARRAY ">BC_IMPOSSIBLE_DOWNCAST_OF_TOARRAY </a>
|
|
<li><a href="http://findbugs.sourceforge.net/bugDescriptions.html#EC_INCOMPATIBLE_ARRAY_COMPARE ">EC_INCOMPATIBLE_ARRAY_COMPARE </a>
|
|
<li><a href="http://findbugs.sourceforge.net/bugDescriptions.html#JLM_JSR166_UTILCONCURRENT_MONITORENTER ">JLM_JSR166_UTILCONCURRENT_MONITORENTER </a>
|
|
<li><a href="http://findbugs.sourceforge.net/bugDescriptions.html#LG_LOST_LOGGER_DUE_TO_WEAK_REFERENCE ">LG_LOST_LOGGER_DUE_TO_WEAK_REFERENCE </a>
|
|
<li><a href="http://findbugs.sourceforge.net/bugDescriptions.html#NP_CLOSING_NULL ">NP_CLOSING_NULL </a>
|
|
<li><a href="http://findbugs.sourceforge.net/bugDescriptions.html#RC_REF_COMPARISON_BAD_PRACTICE ">RC_REF_COMPARISON_BAD_PRACTICE </a> <li><a href="http://findbugs.sourceforge.net/bugDescriptions.html#RC_REF_COMPARISON_BAD_PRACTICE_BOOLEAN ">RC_REF_COMPARISON_BAD_PRACTICE_BOOLEAN </a> <li><a href="http://findbugs.sourceforge.net/bugDescriptions.html#RV_RETURN_VALUE_OF_PUTIFABSENT_IGNORED ">RV_RETURN_VALUE_OF_PUTIFABSENT_IGNORED </a> <li><a href="http://findbugs.sourceforge.net/bugDescriptions.html#SIC_THREADLOCAL_DEADLY_EMBRACE ">SIC_THREADLOCAL_DEADLY_EMBRACE </a> <li><a href="http://findbugs.sourceforge.net/bugDescriptions.html#UR_UNINIT_READ_CALLED_FROM_SUPER_CONSTRUCTOR ">UR_UNINIT_READ_CALLED_FROM_SUPER_CONSTRUCTOR </a> <li><a href="http://findbugs.sourceforge.net/bugDescriptions.html#VA_FORMAT_STRING_EXPECTED_MESSAGE_FORMAT_SUPPLIED ">VA_FORMAT_STRING_EXPECTED_MESSAGE_FORMAT_SUPPLIED </a>
|
|
</ul>
|
|
<li>Providing a bug rank (1-20), and the ability to filter by bug rank. Eventually,
|
|
it will be possible to specify your own rules for ranking bugs, but the procedure for doing so hasn't been specified yet.
|
|
<li>Fixed about <a href="https://sourceforge.net/search/index.php?group_id=96405&search_summary=1&search_details=1&type_of_search=artifact&group_artifact_id%5B%5D=614693&open_date_start=2009-03-16&open_date_end=2009-08-20&form_submit=Search">45 bugs filed</a> through SourceForge
|
|
<li>Various reclassifications and priority tweaks
|
|
<li>Added more bug annotations to a variety of bug reports.
|
|
This provides more context for understanding bug reports
|
|
(e.g., if the value in question was is the return value
|
|
of a method, the method is described as the source of
|
|
the value in a bug annotation). This also provide more
|
|
accurate tracking of issues across versions of the code
|
|
being analyzed, but has the downside that when comparing
|
|
results from FindBugs 1.3.8 and FindBugs 1.3.9 on the
|
|
same version of code being analyzed,
|
|
FindBugs may think that mistakenly believe that the
|
|
issue reported by 1.3.8 was fixed and a new issue was
|
|
introduced that was reported by FindBugs 1.3.9. While
|
|
annoying, it would be unusual for more than a dozen
|
|
issues per million
|
|
lines of codes to be mistracked.
|
|
<li> Lots of internal changes moving towards FindBugs 2.0, but these
|
|
features are undocumented, not yet officially supported, and subject to
|
|
radical changes before FindBugs 2.0 is released.
|
|
|
|
|
|
</ul>
|
|
<p> Changes since version 1.3.7</p>
|
|
<ul>
|
|
<li>Primarily another small bugfix release.</li>
|
|
<li>FindBugs base:</li>
|
|
<ul>
|
|
<li>New Reports:</li>
|
|
<ul>
|
|
<li>SF_SWITCH_NO_DEFAULT: missing default case in switch statement.</li>
|
|
<li>SF_DEAD_STORE_DUE_TO_SWITCH_FALLTHROUGH_TO_THROW: value ignored when switch fallthrough leads to
|
|
thrown exception.</li>
|
|
<li>INT_VACUOUS_BIT_OPERATION: bit operations that don't do any meaningful work.</li>
|
|
<li>FB_UNEXPECTED_WARNING: warning generated that conflicts with @NoWarning FindBugs annotation.</li>
|
|
<li>FB_MISSING_EXPECTED_WARNING: warning not generated despite presence of @ExpectedWarning FindBugs annotation.</li>
|
|
<li>NOISE category: intended for use in data mining experiments.</li>
|
|
<ul>
|
|
<li>NOISE_NULL_DEREFERENCE: fake null point dereference warning.</li>
|
|
<li>NOISE_METHOD_CALL: fake method call warning.</li>
|
|
<li>NOISE_FIELD_REFERENCE: fake field dereference warning.</li>
|
|
<li>NOISE_OPERATION: fake operation warning.</li>
|
|
</ul>
|
|
</ul>
|
|
<li>Other:</li>
|
|
<ul>
|
|
<li>Garvin Leclaire has created a new Apache Maven repository for FindBugs at
|
|
<a href="http://code.google.com/p/findbugs/">the Google Code FindBugs SVN repository</a>. (Thanks Garvin!)</li>
|
|
</ul>
|
|
<li>Fixes:</li>
|
|
<ul>
|
|
<li>[ 2317842 ] Highlighting broken in Windows</li>
|
|
<li>[ 2515908 ] check for oddness should track sign of argument</li>
|
|
<li>[ 2487936 ] "L B GC" false pos cast from Map.Entry.getKey() to Map.get()</li>
|
|
<li>[ 2528264 ] Ant tasks not compatible with Ant 1.7.1</li>
|
|
<li>[ 2539590 ] SF_SWITCH_FALLTHROUGH wrong message reported </li>
|
|
<li>[ 2020066 ] Bug history displayed in fancy-hist.xsl is incorrect</li>
|
|
<li>[ 2545098 ] Invalid character in analysis results file</li>
|
|
<li>[ 2492673 ] Plugin sites should specify 'requires Eclipse 3.3 or newer'</li>
|
|
<li>[ 2588044 ] a tiny typing error</li>
|
|
<li>[ 2589048 ] Documentation for convertXmlToText insufficient</li>
|
|
<li>[ 2638739 ] NullPointerException when building</li>
|
|
</ul>
|
|
<li>Patches:</li>
|
|
<ul>
|
|
<li>[ 2538184 ] Make BugCollection implement Iterable<BugInstance> (thanks to Tomas Pollak)</li>
|
|
<li>[ 2249771 ] Add Maven2 Findbugs plugin link to the Links page (thanks to Garvin Leclaire)</li>
|
|
<li>[ 2609526 ] Japanese manual update (thanks to K. Hashimoto)</li>
|
|
<li>[ 2119482 ] CheckBcel checks for nonexistent classes (thanks to Jerry James)</li>
|
|
</ul>
|
|
</ul>
|
|
<li>FindBugs Eclipse plugin:</li>
|
|
<ul>
|
|
<li>Major feature enhancements (thanks to Andrey Loskutov).
|
|
See <a href="http://andrei.gmxhome.de/findbugs/index.html">this overview</a> for more information.</li>
|
|
<li>Major test improvements (thanks to Tomas Pollak).</li>
|
|
<li>Fixes:</li>
|
|
<ul>
|
|
<li>[ 2532365 ] Compiler warning</li>
|
|
<li>[ 2522989 ] Fix filter files selection</li>
|
|
<li>[ 2504068 ] NullPointerException</li>
|
|
<li>[ 2640849 ] NPE in Eclipse plugin 1.3.7 and Eclipse 3.5 M5</li>
|
|
</ul>
|
|
<li>Patches:</li>
|
|
<ul>
|
|
<li>[ 2143140 ] Unchecked conversion fixes for Eclipse plugin (thanks to Jerry James)
|
|
</ul>
|
|
</ul>
|
|
</ul>
|
|
</ul>
|
|
|
|
<p> Changes since version 1.3.6</p>
|
|
<ul>
|
|
<li>Overall, a small bugfix release.
|
|
<li>New detection of accidental vacuous/useless calls to EasyMock methods,
|
|
and of generic signatures that proclaim the use of unhashable classes
|
|
in ways that require that they be hashed.
|
|
<li>Eliminate some false positives where we were warning about
|
|
a useless call (e.g., comparing two incompatible types for equality),
|
|
but the only thing the code was doing with the result was
|
|
passing it to assertFalse.
|
|
<li>Japanese localization and manual by K.Hashimoto. (Thanks!)
|
|
<li>Added -exclude and -outputDir command line options to rejarForAnalysis
|
|
<li>Extended -adjustPriorities option to FindBugs analysis textui so that you
|
|
can modify the priorities of individual bug patterns as well as visitors,
|
|
and also completely suppress individual bug patterns or visitors.
|
|
<ul>
|
|
<li> e.g., -adjustPriority MS_SHOULD_BE_FINAL=suppress,MS_PKGPROTECT=suppress,EI_EXPOSE_REP=suppress,EI_EXPOSE_REP2=suppress,PZLA_PREFER_ZERO_LENGTH_ARRAYS=raise
|
|
</ul>
|
|
</ul>
|
|
|
|
|
|
<p> Changes since version 1.3.5</p>
|
|
<ul>
|
|
<li>Added fairly exhaustive static analysis
|
|
of uses of format strings, checking for missing or
|
|
extra arguements, invalid format specifiers,
|
|
or mismatched format specifiers and arguments (e.g,
|
|
passing a String value for a %d format specifier).
|
|
The logic for doing so is derived from Sun's java.util.Formatter class,
|
|
and available separately from FindBugs as part of the
|
|
<a href="https://jformatstring.dev.java.net/">jFormatString</a> project.
|
|
|
|
<li>More tuning of the unsatisfied obligation detector. Since this
|
|
detector is still rather noisy and an unfinished research project,
|
|
I've moved the generated issues to a new category: EXPERIMENTAL.
|
|
|
|
<li>Added check for <a href="http://findbugs.sourceforge.net/bugDescriptions.html#BIT_ADD_OF_SIGNED_BYTE">BIT_ADD_OF_SIGNED_BYTE</a>; similar to <a href="http://findbugs.sourceforge.net/bugDescriptions.html#BIT_IOR_OF_SIGNED_BYTE">BIT_IOR_OF_SIGNED_BYTE</a>, except that
|
|
addition is being used to combine shifted signed bytes.
|
|
|
|
<li>Changed detection of EI_EXPOSE_REP2, so we only report it if the value stored
|
|
is guaranteed to be the same value that was passed in as a parameter.
|
|
|
|
<li>Added <a href="http://findbugs.sourceforge.net/bugDescriptions.html#EQ_CHECK_FOR_OPERAND_NOT_COMPATIBLE_WITH_THIS">EQ_CHECK_FOR_OPERAND_NOT_COMPATIBLE_WITH_THIS</a>, a warning when
|
|
an equals method checks to see if an operand is an instance of a class not
|
|
compatible with itself. For example, if the Foo class checks to see if the argument
|
|
is an instance of String. This is either a questionable design decision or a coding mistake.
|
|
<li>Added <a href="http://findbugs.sourceforge.net/bugDescriptions.html#DMI_INVOKING_HASHCODE_ON_ARRAY">DMI_INVOKING_HASHCODE_ON_ARRAY</a>,
|
|
which checks for invoking <code>hashCode()</code> on an array, which returns a hash code that ignores the contents of the array.
|
|
<li>Added checks for using <code>x.removeAll(x)</code> to rather than <code>x.clear()</code>
|
|
to clear an array.
|
|
<li>Add checks for calls such as <code>x.contains(x)</code>, <code>x.remove(x)</code> and <code>x.containsAll(x)</code>.
|
|
<li>Improvements to Eclipse plugin (thanks to Andrey Loskutov):
|
|
<ul>
|
|
<li>Report separate markers for each occurrence of an issue that appears multiple times in a method
|
|
<li> fine tuning for reported markers: add only one marker for fields, add marker on right position
|
|
<li> link bugs selected in bug explorer view to the opened editor and vice versa
|
|
<li> select bugs selected in editor ruler in the opened bug explorer view
|
|
<li> consistent abbreviations used in both bug explorer and bug details view
|
|
<li> added "Expand All" button to the bug explorer view
|
|
<li> added "Go Into/Go Up" buttons to the bug explorer view
|
|
<li> added "Copy to clipboard" menu/functionality to the details view list widget
|
|
<li> fix for CNF exception if loading the backup solution for broken browser widget
|
|
|
|
</ul></ul>
|
|
|
|
|
|
|
|
<p> Changes since version 1.3.4</p>
|
|
<ul>
|
|
<li>Analysis about 15% faster
|
|
<li><a href="http://sourceforge.net/tracker/?atid=614693&group_id=96405&func=browse&status=closed">38 bugs closed</a></li>
|
|
<li>New defect warnings:
|
|
<ul>
|
|
<li>calls to methods that always throw
|
|
UnsupportedOperationException (DMI_UNSUPPORTED_METHOD)
|
|
<li>repeated conditional tests (e.g.,
|
|
<code>if (x < 0 || x < 0) ...</code>)
|
|
(RpC_REPEATED_CONDITIONAL_TEST)
|
|
<li>Complete rewrite of detector for format string problems.
|
|
More accurate, finds more problems, generates
|
|
more descriptive reports, several different
|
|
bug pattern
|
|
(VA_FORMAT_STRING_EXTRA_ARGUMENTS_PASSED,
|
|
VA_FORMAT_STRING_ILLEGAL,
|
|
VA_FORMAT_STRING_MISSING_ARGUMENT,
|
|
VA_FORMAT_STRING_BAD_ARGUMENT,
|
|
VA_FORMAT_STRING_NO_PREVIOUS_ARGUMENT)
|
|
|
|
<li>Fairly complete implementation of JSR-305 custom type qualifier
|
|
analysis (no support for custom validators yet).
|
|
(TQ_MAYBE_SOURCE_VALUE_REACHES_NEVER_SINK
|
|
TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_ALWAYS_SINK
|
|
TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_NEVER_SINK)
|
|
<li>New detector for unsatisfied obligations such forgetting to
|
|
close a file (OBL_UNSATISFIED_OBLIGATION).
|
|
<li>Warning when a parameter is marked as nullable, but is
|
|
always dereferenced.
|
|
(NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE)
|
|
<lI>Separate warning for dereference the result of readLine (NP_DEREFERENCE_OF_READLINE_VALUE)
|
|
</ul>
|
|
<li>When XML is generated with messages, the project stats now
|
|
include <FileStat> elements.
|
|
For each source file, this gives the path for the file,
|
|
the total number of warnings for that file, and a bugHash
|
|
for the file. While the instanceHash for a bug is intended
|
|
to be version invariant (ignoring line numbers, etc), the
|
|
bugHash for a file is intended to reflect all the information
|
|
about the warnings in that file. The intended use case is that
|
|
if the bugHash for a file is the same in two analysis runs,
|
|
then <em>nothing</em> has changed about any of the warnings
|
|
reported for that file between the two analysis runs.
|
|
<li>More merging of similar issues within a method. For example,
|
|
if the result of readLine() is dereferences multiple times
|
|
within a method, it will be reported as a single warning
|
|
with occurrences at multiple source lines.
|
|
</ul>
|
|
<p> Changes since version 1.3.3</p>
|
|
|
|
<ul>
|
|
<li>FindBugs base
|
|
<ul>
|
|
<li>New Reports:</li>
|
|
<ul>
|
|
<li>EQ_OVERRIDING_EQUALS_NOT_SYMMETRIC:
|
|
equals method overrides equals in superclass and may not be symmetric</li>
|
|
<li>EQ_ALWAYS_TRUE:
|
|
equals method always returns true</li>
|
|
<li>EQ_ALWAYS_FALSE:
|
|
equals method always returns false</li>
|
|
<li>EQ_COMPARING_CLASS_NAMES:
|
|
equals method compares class names rather than class objects</li>
|
|
<li>EQ_UNUSUAL: Unusual equals method</li>
|
|
<li>EQ_GETCLASS_AND_CLASS_CONSTANT:
|
|
equals method fails for subtypes</li>
|
|
<li>SE_READ_RESOLVE_IS_STATIC:
|
|
The readResolve method must not be declared as a static method.</li>
|
|
<li>SE_PRIVATE_READ_RESOLVE_NOT_INHERITED:
|
|
private readResolve method not inherited by subclasses</li>
|
|
<li>MSF_MUTABLE_SERVLET_FIELD: Mutable servlet field</li>
|
|
<li>XSS_REQUEST_PARAMETER_TO_SEND_ERROR:
|
|
Servlet reflected cross site scripting vulnerability</li>
|
|
<li>SKIPPED_CLASS_TOO_BIG: Class too big for analysis</li>
|
|
</ul>
|
|
<li>Other:</li>
|
|
<ul>
|
|
<li>Value-number analysis now more space-efficient</li>
|
|
<li>Enhancements to reduce memory overhead when
|
|
analyzing very large classes</li>
|
|
<li>Now skips very large classes that would otherwise
|
|
take too much time and memory to analyze</li>
|
|
<li>Infrastructure for tracking effectively-constant/
|
|
effectively-final fields</li>
|
|
<li>Added more cweids</li>
|
|
<li>Enhanced taint tracking for taint-based detectors</li>
|
|
<li>Ignore doomed calls to equals if result is used
|
|
as an argument to assertFalse</li>
|
|
<li>EQ_OVERRIDING_EQUALS_NOT_SYMMETRIC handles compareTo</li>
|
|
<li>Priority tweak for ICAST_INTEGER_MULTIPLY_CAST_TO_LONG
|
|
(only low priority if multiplying by 1000)</li>
|
|
<li>Improved tracking of fields across method calls</li>
|
|
</ul>
|
|
<li>Fixes:</li>
|
|
<ul>
|
|
<li>[ 1941450 ] DLS_DEAD_LOCAL_STORE not reported</li>
|
|
<li>[ 1953323 ] Omitted break statement in SynchronizeAndNullCheckField</li>
|
|
<li>[ 1942620 ] Source Directories selection dialog interface confusion (partial)</li>
|
|
<li>[ 1948275 ] Unhelpful "Load of known null"</li>
|
|
<li>[ 1933922 ] MWM error in findbugs</li>
|
|
<li>[ 1934772 ] 1.3.3 appears to rely on JDK 1.6, JNLP still specifies 1.5</li>
|
|
<li>[ 1933945 ] -loadbugs doesn't work</li>
|
|
<li>Fixed problems for class names starting with '$'</li>
|
|
<li>Fixed bugs and incomplete handling of annotations in
|
|
VersionInsensitiveBugComparator</li>
|
|
</ul>
|
|
<li>Patches:</li>
|
|
<ul>
|
|
<li>[ 1955106 ] Javadoc fixes</li>
|
|
<li>[ 1951930 ] Superfluous import statements (thanks to Jerry James)</li>
|
|
<li>[ 1951907 ] Missing @Deprecated annotations (thanks to Jerry James)</li>
|
|
<li>[ 1951876 ] Infonode Docking Windows compile fix (thanks to Jerry James)</li>
|
|
<li>[ 1936055 ] bugfix for findbugs.de.comment not working (thanks to Peter Fokkinga)
|
|
</ul>
|
|
</ul>
|
|
<li>FindBugs BlueJ plugin</li>
|
|
<ul>
|
|
<li>Updated to use FindBugs 1.3.4 (first new release since 1.1.3)</li>
|
|
</ul>
|
|
</ul>
|
|
|
|
<p> Changes since version 1.3.2</p>
|
|
|
|
<ul>
|
|
<li>FindBugs base</li>
|
|
<ul>
|
|
<li>New Detectors:</li>
|
|
<ul>
|
|
<li>FieldItemSummary: Produces summary information
|
|
for what is stored into fields </li>
|
|
<li>SynchronizeOnClassLiteralNotGetClass: Look for
|
|
code that synchronizes on the results of getClass
|
|
rather than on class literals</li>
|
|
<li>SynchronizingOnContentsOfFieldToProtectField: This
|
|
detector looks for code that seems to be
|
|
synchronizing on a field in order to guard updates
|
|
of that field </li>
|
|
</ul>
|
|
<li>New BugCode:</li>
|
|
<ul>
|
|
<li> HRS: HTTP Response splitting vulnerability </li>
|
|
<li> WL: Possible locking on wrong object </li>
|
|
</ul>
|
|
<li>New Reports:</li>
|
|
<ul>
|
|
<li>DMI_CONSTANT_DB_PASSWORD:
|
|
This code creates a database connect using a hard coded, constant password </li>
|
|
<li>HRS_REQUEST_PARAMETER_TO_COOKIE:
|
|
HTTP cookie formed from untrusted input </li>
|
|
<li>HRS_REQUEST_PARAMETER_TO_HTTP_HEADER:
|
|
HTTP parameter directly written to HTTP header output </li>
|
|
<li>CN_IMPLEMENTS_CLONE_BUT_NOT_CLONEABLE:
|
|
Class defines clone() but doesn't implement Cloneable </li>
|
|
<li>DL_SYNCHRONIZATION_ON_BOXED_PRIMITIVE:
|
|
Synchronization on boxed primitive could lead to deadlock </li>
|
|
<li> DL_SYNCHRONIZATION_ON_BOOLEAN:
|
|
Synchronization on Boolean could lead to deadlock </li>
|
|
<li> ML_SYNC_ON_FIELD_TO_GUARD_CHANGING_THAT_FIELD:
|
|
Synchronization on field in futile attempt to guard that field </li>
|
|
<li> DLS_DEAD_LOCAL_STORE_IN_RETURN:
|
|
Useless assignment in return statement </li>
|
|
<li> WL_USING_GETCLASS_RATHER_THAN_CLASS_LITERAL:
|
|
Synchronization on getClass rather than class literal </li>
|
|
</ul>
|
|
<li>Other:</li>
|
|
<ul>
|
|
<li>Many enhancements to cross-site scripting detector and its documentation</li>
|
|
<li> Enhanced switch fall through handling </li>
|
|
<li> Enhanced unread field handling (look for IF_ACMPEQ and IF_ACMPNE) </li>
|
|
<li> Clarified documentation for @Nullable in manual </li>
|
|
<li> Fewer DeadLocalStore false positives </li>
|
|
<li> Fewer UnreadField false positives </li>
|
|
<li> Fewer StaticCalendarDetector false positives </li>
|
|
<li> Performance fix for slow file system IO e.g. Clearcase repositories (thanks, Andrei!) </li>
|
|
<li> Other, general performance enhancements (thanks, Andrei!) </li>
|
|
<li> Enhancements for using FindBugs scripts with MKS on Windows (thanks, Kelly O'Hair!) </li>
|
|
<li> Noted in the manual that jsr305.jar must be present for annotations to compile </li>
|
|
<li> Added and fine-tuned default-nullness annotations </li>
|
|
<li> More CWE IDs added </li>
|
|
<li> Check and warning for unexpected BCEL version in classpath </li>
|
|
</ul>
|
|
<li>Fixes:</li>
|
|
<ul>
|
|
<li>Bug fix to handling of local variable tables in BCEL</li>
|
|
<li>Refined documentation for MTIA_SUSPECT_STRUTS_INSTANCE_FIELD</li>
|
|
<li>[ 1927295 ] NPE when called on project root</li>
|
|
<li>[ 1926405 ] Incorrect dead store warning</li>
|
|
<li>[ 1926409 ] Incorrect redundant nullcheck warning</li>
|
|
<li>[ 1926389 ] Wrong line number printed/highlighted in bug</li>
|
|
<li>[ 1927040 ] typo in bug description</li>
|
|
<li>[ 1926263 ] Minor glitch in HTML output</li>
|
|
<li>[ 1926240 ] Minor error in standard options in manual</li>
|
|
<li>[ 1926236 ] Minor bug in installation section of manual</li>
|
|
<li>[ 1925539 ] ZIP is default file system code base</li>
|
|
<li>[ 1894701 ] Livelock / memory leak in ObjectTypeFactory (thanks, Andrei!)</li>
|
|
<li>[ 1867491 ] Doesn't reload annotations after code changes in IDE (thanks, Andrei!)</li>
|
|
<li>[ 1921399 ] -project option not supported</li>
|
|
<li>[ 1913834 ] "Dead" store to variable with method call</li>
|
|
<li>[ 1917352 ] H B se:...field in serializable class</li>
|
|
<li>[ 1911617 ] CloneIdiom relies on getNameConstantOperand for INSTANCEOF</li>
|
|
<li>[ 1911620 ] False +: DLS predecrement before return</li>
|
|
<li>[ 1871376 ] False negative: non-serializable Map field</li>
|
|
<li>[ 1871051 ] non standard clone() method</li>
|
|
<li>[ 1908854 ] Error in TestASM</li>
|
|
<li>[ 1907539 ] 22 minor errors in bug checker documentation</li>
|
|
<li>[ 1897323 ] EJB implementation class false positives</li>
|
|
<li>[ 1899648 ] Crash on startup on Vista with Java 1.6.0_04</li>
|
|
</ul>
|
|
</ul>
|
|
<li>FindBugs Eclipse plugin (change log by Andrey Loskutov)</li>
|
|
<ul>
|
|
<li> new feature: export basic FindBugs numbers for projects via File->Export->Java->BugCounts (Andrey Loskutov) </li>
|
|
<li> new feature: jobs for different projects will be run in parallel per default if running on a
|
|
multi-core PC ("fb.allowParallelBuild" system property not used anymore) (Andrey Loskutov) </li>
|
|
<li> fixed performance slowdown in the multi-threaded build, caused by workspace operation locks during
|
|
assigning marker attributes (Andrey Loskutov)</li>
|
|
</ul>
|
|
</ul>
|
|
|
|
<p> Changes since version 1.3.1</p>
|
|
|
|
<ul>
|
|
<li>FindBugs base</li>
|
|
<ul>
|
|
<li>New Bug Category:</li>
|
|
<ul>
|
|
<li>SECURITY (Abbrev: S), A use of untrusted input in
|
|
a way that could create a remotely exploitable
|
|
security vulnerability</li>
|
|
</ul>
|
|
<li>New Detectors:</li>
|
|
<ul>
|
|
<li>CrossSiteScripting: This detector looks for
|
|
obvious/blatant cases of cross site scripting
|
|
vulnerabilities</li>
|
|
</ul>
|
|
<li>New BugCode:</li>
|
|
<ul>
|
|
<li>XSS: Cross site scripting</li>
|
|
</ul>
|
|
<li>New Reports:</li>
|
|
<ul>
|
|
<li>XSS_REQUEST_PARAMETER_TO_SERVLET_WRITER: HTTP
|
|
parameter directly written to Servlet output,
|
|
giving XSS vulnerability</li>
|
|
<li>XSS_REQUEST_PARAMETER_TO_JSP_WRITER: HTTP
|
|
parameter directly written to JSP output, giving
|
|
XSS vulnerability</li>
|
|
<li>EQ_OTHER_USE_OBJECT: equals() method defined that
|
|
doesn't override Object.equals(Object)</li>
|
|
<li>EQ_OTHER_NO_OBJECT: equals() method inherits
|
|
rather than overrides equals(Object)</li>
|
|
<li>NP_NULL_ON_SOME_PATH_MIGHT_BE_INFEASIBLE:
|
|
Possible null pointer dereference on path that
|
|
might be infeasible</li>
|
|
</ul>
|
|
<li>Other:</li>
|
|
<ul>
|
|
<li>Added -noClassOk command-line parameter to
|
|
command-line and ant interfaces; when -noClassOk
|
|
is specified and no classfiles are given, FindBugs
|
|
will print a warning message and output a well-
|
|
formed file with no warnings</li>
|
|
<li>Fewer false positives for null pointer bugs</li>
|
|
<li>Suppress dead-local-store false positives in .jsp
|
|
code</li>
|
|
<li>Type fixes in warning messages</li>
|
|
<li>Better warning message for
|
|
NP_NULL_ON_SOME_PATH</li>
|
|
<li>"WMI" bug code description renamed from "Wrong
|
|
Map Iterator" to "Inefficient Map Iterator"</li>
|
|
</ul>
|
|
<li>Fixes:</li>
|
|
<ul>
|
|
<li>[ 1893048 ] FindBugs confused by a findbugs.xml file</li>
|
|
<li>[ 1878528 ] XSL xforms don't support history features</li>
|
|
<li>[ 1876584 ] two default.xsl flaws</li>
|
|
<li>[ 1874856 ] Format string bug detector doesn't handle special operators</li>
|
|
<li>[ 1872645 ] computeBugHistory - java.lang.IllegalArgumentException</li>
|
|
<li>[ 1872237 ] Ant task fails when no .class files</li>
|
|
<li>[ 1868670 ] Filters: include AND exclude don't allowed</li>
|
|
<li>[ 1868666 ] check-for-oddness reported, but array length can never be negative</li>
|
|
<li>[ 1866108 ] SetBugDatabaseInfoTask strips dir from output filename</li>
|
|
<li>[ 1866021 ] MineBugHistoryTask strips dir of output filename</li>
|
|
<li>[ 1865265 ] code doesn't handle StringBuffer.append([CII) right</li>
|
|
<li>[ 1864793 ] Warning when casting a null reference compared to a String</li>
|
|
<li>[ 1863376 ] Typo in manual chap 8: Filter Files</li>
|
|
<li>[ 1862705 ] Transient fields that default to null</li>
|
|
<li>[ 1842545 ] DLS on catch variable (with priority tweaking)</li>
|
|
<li>[ 1816258 ] false positive BC_IMPOSSIBLE_CAST</li>
|
|
<li>[ 1551732 ] Get erroneous DLS with while loop</li>
|
|
</ul>
|
|
</ul>
|
|
<li>FindBugs Eclipse plugin (change log by Andrey Loskutov)</li>
|
|
<ul>
|
|
<li>new feature: added Bug explorer view (replacing Bug tree view), based on Common Navigator framework (Andrey Loskutov)</li>
|
|
<li>bug 1873860 fixed: empty projects are no longer shown in Bug tree view (Andrey Loskutov)</li>
|
|
<li>new feature: bug counts decorators for projects, folders and files (has to be activated
|
|
via Preferences -> general -> appearance -> label decorations)(Andrey Loskutov)</li>
|
|
<li>patch 1746499: better icons (Alessandro Nistico)</li>
|
|
<li>patch 1893685: Find bug actions on change sets bug (Alessandro Nistico)</li>
|
|
<li>fixed bug 1855384: Bug configuration is broken in Eclipse (Andrey Loskutov)</li>
|
|
<li>refactored FindBugs properties page (Andrey Loskutov)</li>
|
|
<li>refactored FindBugs worker/builder/run action (Andrey Loskutov)</li>
|
|
<li>FB detects now only bugs from classes on project's classpath (no double work on
|
|
duplicated class files) (Andrey Loskutov)</li>
|
|
<li>fixed bug introduced by the bad patch for 1867951: FB cannot be executed incrementally
|
|
on a folder of file (Andrey Loskutov)</li>
|
|
<li>fixed job rule: now jobs for different projects may run in parallel if running on a
|
|
multi-core PC and "fb.allowParallelBuild" system property is set to true (Andrey Loskutov)</li>
|
|
<li>fixed FB auto-build not started if .fbprefs or .classpath was changed (Andrey Loskutov)</li>
|
|
<li>fixed not reporting bugs on secondary types (classes defined in java files with
|
|
different name) (Andrey Loskutov) </li>
|
|
</ul>
|
|
</ul>
|
|
|
|
<p> Changes since version 1.3.0</p>
|
|
<ul>
|
|
<li>New Reports</li>
|
|
<ul>
|
|
<li>VA_FORMAT_STRING_ARG_MISMATCH:
|
|
A format-string method with a variable number of arguments is called,
|
|
but the number of arguments passed does not match with the number of
|
|
% placeholders in the format string. This is probably not what the
|
|
author intended.
|
|
<li>IO_APPENDING_TO_OBJECT_OUTPUT_STREAM:
|
|
This code opens a file in append mode and that wraps the result in an object output stream.
|
|
This won't allow you to append to an existing object output stream stored in a file. If you want to be
|
|
able to append to an object output stream, you need to keep the object output stream open.
|
|
The only situation in which opening a file in append mode and the writing an object output stream
|
|
could work is if on reading the file you plan to open it in random access mode and seek to the byte offset
|
|
where the append started.
|
|
<li>NP_BOOLEAN_RETURN_NULL:
|
|
A method that returns either Boolean.TRUE, Boolean.FALSE or null is an accident waiting to happen.
|
|
This method can be invoked as though it returned a value of type boolean, and
|
|
the compiler will insert automatic unboxing of the Boolean value. If a null value is returned,
|
|
this will result in a NullPointerException.
|
|
</ul>
|
|
<li>Changes to Existing Reports</li>
|
|
<ul>
|
|
<li>RV_DONT_JUST_NULL_CHECK_READLINE: CORRECTNESS -> STYLE</li>
|
|
<li>DMI_INVOKING_TOSTRING_ON_ARRAY: Long description mentions array name whenever possible</li>
|
|
</ul>
|
|
<li>Fixes:</li>
|
|
<ul>
|
|
<li>Updated manual to mention that Java 1.5 is now a requirement for running FindBugs
|
|
<li>Applied patch 1840206 fixing issue "Ant task does not work when presetdef is used" - thanks to phejl
|
|
<li>Applied patch 1778690 fixing issue "Ant task: tolerate but complain about invalid auxClasspath" - thanks to David Schmidt
|
|
<li>Applied patch 1852125 adding a Chinese-language GUI bundle props file - thanks to fifi
|
|
<li>Applied patch 1845903 adding ability to load XML results with the Eclipse plugin - thanks to Alex Mont
|
|
<li>Fixed issue 1844671 - "FP for "reversed" null check in catch for stream close"
|
|
<li>Fixed issue 1836050 - "-onlyAnalyze broken"
|
|
<li>Fixed issue 1853011 - "Typo: Field names should start with aN lower case letter"
|
|
<li>Fixed issue 1844181 - "JNLP file does not contain all necessary JARs"
|
|
<li>Fixed issue 1840245 - "xxxException class does not derive from Exception"
|
|
<li>Fixed issue 1840277 - "[M D EC] Typo in bug documentation"
|
|
<li>Fixed issue 1782447 - "OutOfMemoryError if i activate Findbugs on my project"
|
|
<li>Fixed issue 1830576 - "[regression] keySet/entrySet false positive"
|
|
</ul>
|
|
<li>Other:</li>
|
|
<ul>
|
|
<li>New bug code: "IO" (for IO_APPENDING_TO_OBJECT_OUTPUT_STREAM)</li>
|
|
<li>Added "-onlyMostRecent" option for computeBugHistory script/ant task
|
|
<li>More explicit language in RV_RETURN_VALUE_IGNORED_BAD_PRACTICE messages
|
|
<li>Modified ResourceValueAnalysis to correctly identify null == X or null != X as a null check (for issue 1844671)
|
|
<li>Modified DMI_HARDCODED_ABSOLUTE_FILENAME logic in DumbMethodInvocations to ignore files from /etc or /dev and increase priority of files from /home
|
|
<li>Better bug details for infinite loop warnings
|
|
<li>Modified unread-fields detector to reduce false positives from reflective fields
|
|
<li>build.xml "classes" target now builds all sources in one step
|
|
</ul>
|
|
</ul>
|
|
|
|
<p> Changes since version 1.2.1</p>
|
|
<ul>
|
|
<li>New Detectors and Reports</li>
|
|
<ul>
|
|
<li>SynchronizationOnSharedBuiltinConstant</li>
|
|
<ul>
|
|
<li>DL_SYNCHRONIZATION_ON_SHARED_CONSTANT:
|
|
The code synchronizes on a shared primitive
|
|
constant, such as an interned String. Such
|
|
constants are interned and shared across all other
|
|
classes loaded by the JVM. Thus, this could be
|
|
locking on something that other code might also be
|
|
locking. This could result in very strange and hard
|
|
to diagnose blocking and deadlock behavior. See
|
|
<a href="http://www.javalobby.org/java/forums/t96352.html">http://www.javalobby.org/java/forums/t96352.html</a>
|
|
and
|
|
<a href="http://jira.codehaus.org/browse/JETTY-352">http://jira.codehaus.org/browse/JETTY-352</a>.
|
|
</ul>
|
|
<li>OverridingEqualsNotSymmetrical</li>
|
|
<ul>
|
|
<li>EQ_OVERRIDING_EQUALS_NOT_SYMMETRIC:
|
|
Looks for equals methods that override equals
|
|
methods in a superclass where the equivalence
|
|
relationship might not be symmetrical.
|
|
</ul>
|
|
<li>CheckTypeQualifiers</li>
|
|
<ul>
|
|
<li>TQ_ALWAYS_VALUE_USED_WHERE_NEVER_REQUIRED:
|
|
A value specified as carrying a type qualifier
|
|
annotation is consumed in a location or locations
|
|
requiring that the value not carry that annotation.
|
|
More precisely, a value annotated with a type
|
|
qualifier specifying when=ALWAYS is guaranteed to reach
|
|
a use or uses where the same type qualifier specifies
|
|
when=NEVER.
|
|
</li>
|
|
<li>TQ_NEVER_VALUE_USED_WHERE_ALWAYS_REQUIRED:
|
|
A value specified as not carrying a type qualifier
|
|
annotation is guaranteed to be consumed in a location
|
|
or locations requiring that the value does carry that
|
|
annotation. More precisely, a value annotated with a
|
|
type qualifier specifying when=NEVER is guaranteed to
|
|
reach a use or uses where the same type qualifier
|
|
specifies when=ALWAYS.
|
|
</li>
|
|
<li>TQ_MAYBE_SOURCE_VALUE_REACHES_ALWAYS_SINK:
|
|
A value that might not carry a type qualifier
|
|
annotation reaches a use which requires that
|
|
annotation.
|
|
</li>
|
|
<li>TQ_MAYBE_SOURCE_VALUE_REACHES_NEVER_SINK:
|
|
A value which might carry a type qualifier annotation
|
|
reaches a use which forbids values carrying that
|
|
annotation.
|
|
</li>
|
|
</ul>
|
|
</ul>
|
|
<li>New Reports (existing detectors)</li>
|
|
<ul>
|
|
<li>FindHEmismatch</li>
|
|
<ul>
|
|
<li>EQ_DOESNT_OVERRIDE_EQUALS:
|
|
This class extends a class that defines an equals
|
|
method and adds fields, but doesn't define an equals
|
|
method itself. Thus, equality on instances of this
|
|
class will ignore the identity of the subclass and the
|
|
added fields. Be sure this is what is intended, and
|
|
that you don't need to override the equals method. Even
|
|
if you don't need to override the equals method,
|
|
consider overriding it anyway to document the fact that
|
|
the equals method for the subclass just return the
|
|
result of invoking super.equals(o).
|
|
</li>
|
|
</ul>
|
|
<li>Naming
|
|
<ul>
|
|
<li>NM_WRONG_PACKAGE, NM_WRONG_PACKAGE_INTENTIONAL:
|
|
The method in the subclass doesn't override a similar
|
|
method in a superclass because the type of a parameter
|
|
doesn't exactly match the type of the corresponding
|
|
parameter in the superclass.
|
|
</li>
|
|
<li>NM_SAME_SIMPLE_NAME_AS_SUPERCLASS:
|
|
This class has a simple name that is identical to that
|
|
of its superclass, except that its superclass is in a
|
|
different package (e.g., <code>alpha.Foo</code>
|
|
extends <code>beta.Foo</code>). This can be
|
|
exceptionally confusing, create lots of situations in
|
|
which you have to look at import statements to resolve
|
|
references and creates many opportunities to
|
|
accidently define methods that do not override methods
|
|
in their superclasses.
|
|
</li>
|
|
<li>NM_SAME_SIMPLE_NAME_AS_INTERFACE:
|
|
This class/interface has a simple name that is
|
|
identical to that of an implemented/extended
|
|
interface, except that the interface is in a different
|
|
package (e.g., <code>alpha.Foo</code> extends
|
|
<code>beta.Foo</code>). This can be exceptionally
|
|
confusing, create lots of situations in which you have
|
|
to look at import statements to resolve references and
|
|
creates many opportunities to accidently define methods
|
|
that do not override methods in their superclasses.
|
|
</li>
|
|
</ul>
|
|
<li>FindRefComparison</li>
|
|
<ul>
|
|
<li>EC_UNRELATED_TYPES_USING_POINTER_EQUALITY:
|
|
This method uses using pointer equality to compare two
|
|
references that seem to be of different types. The
|
|
result of this comparison will always be false at
|
|
runtime.
|
|
</li>
|
|
</ul>
|
|
<li>IncompatMask</li>
|
|
<ul>
|
|
<li>BIT_SIGNED_CHECK, BIT_SIGNED_CHECK_HIGH_BIT:
|
|
This method compares an expression such as
|
|
<tt>((event.detail & SWT.SELECTED) > 0)</tt>. Using
|
|
bit arithmetic and then comparing with the greater than
|
|
operator can lead to unexpected results (of course
|
|
depending on the value of SWT.SELECTED). If
|
|
SWT.SELECTED is a negative number, this is a candidate
|
|
for a bug. Even when SWT.SELECTED is not negative, it
|
|
seems good practice to use '!= 0' instead of '> 0'.
|
|
</li>
|
|
</ul>
|
|
<li>LazyInit</li>
|
|
<ul>
|
|
<li>LI_LAZY_INIT_UPDATE_STATIC:
|
|
This method contains an unsynchronized lazy
|
|
initialization of a static field. After the field is
|
|
set, the object stored into that location is further
|
|
accessed. The setting of the field is visible to other
|
|
threads as soon as it is set. If the further accesses in
|
|
the method that set the field serve to initialize the
|
|
object, then you have a <em>very serious</em>
|
|
multithreading bug, unless something else prevents any
|
|
other thread from accessing the stored object until it
|
|
is fully initialized.
|
|
</li>
|
|
</ul>
|
|
<li>FindDeadLocalStores</li>
|
|
<ul>
|
|
<li>DLS_DEAD_STORE_OF_CLASS_LITERAL:
|
|
This instruction assigns a class literal to a variable
|
|
and then never uses it.
|
|
<a href="//java.sun.com/j2se/1.5.0/compatibility.html#literal">The behavior of this differs in Java 1.4 and in Java 5.</a>
|
|
In Java 1.4 and earlier, a reference to
|
|
<code>Foo.class</code> would force the static
|
|
initializer for <code>Foo</code> to be executed, if it
|
|
has not been executed already. In Java 5 and later, it
|
|
does not. See Sun's
|
|
<a href="//java.sun.com/j2se/1.5.0/compatibility.html#literal">article on Java SE compatibility</a>
|
|
for more details and examples, and suggestions on how
|
|
to force class initialization in Java 5.
|
|
</li>
|
|
</ul>
|
|
<li>MethodReturnCheck</li>
|
|
<ul>
|
|
<li>RV_RETURN_VALUE_IGNORED_BAD_PRACTICE:
|
|
This method returns a value that is not checked. The
|
|
return value should be checked since it can indication
|
|
an unusual or unexpected function execution. For
|
|
example, the <code>File.delete()</code> method returns
|
|
false if the file could not be successfully deleted
|
|
(rather than throwing an Exception). If you don't
|
|
check the result, you won't notice if the method
|
|
invocation signals unexpected behavior by returning an
|
|
atypical return value.
|
|
</li>
|
|
<li>RV_EXCEPTION_NOT_THROWN:
|
|
This code creates an exception (or error) object, but
|
|
doesn't do anything with it.
|
|
</li>
|
|
</ul>
|
|
</ul>
|
|
<li>Changes to Existing Reports</li>
|
|
<ul>
|
|
<li>NS_NON_SHORT_CIRCUIT: BAD_PRACTICE -> STYLE</li>
|
|
<li>NS_DANGEROUS_NON_SHORT_CIRCUIT: CORRECTNESS -> STYLE</li>
|
|
<li>RC_REF_COMPARISON: CORRECTNESS -> BAD_PRACTICE</li>
|
|
</ul>
|
|
<li>GUI Changes</li>
|
|
<ul>
|
|
<li>Added importing and exporting of bug filters</li>
|
|
<li>Better handling of failed analysis runs</li>
|
|
<li>Added "-look" parameter for selecting look-and-feel</li>
|
|
<li>Fixed incorrect package filtering</li>
|
|
<li>Fixed issue where "synchronized" was not syntax-highlighted</li>
|
|
</ul>
|
|
<li>Ant-task Changes</li>
|
|
<ul>
|
|
<li>Refactored common ant-task code to AbstractFindBugsTask</li>
|
|
<li>Added tasks for computeBugHistory, convertXmlToText, filterBugs, mineBugHistory, setBugDatabaseInfo</li>
|
|
</ul>
|
|
<li>Manual</li>
|
|
<ul>
|
|
<li>Updates to GUI section, including new screenshots</li>
|
|
<li>Added description of rejarForAnalysis</li>
|
|
<li>Revamp of data-mining section</li>
|
|
</ul>
|
|
<li>Other Major</li>
|
|
<ul>
|
|
<li>Internal restructuring for lower memory overhead</li>
|
|
</ul>
|
|
<li>Other Minor</li>
|
|
<ul>
|
|
<li>Fixed typo: was STCAL_STATIC_SIMPLE_DATA_FORMAT_INSTANCE now STCAL_STATIC_SIMPLE_DATE_FORMAT_INSTANCE</li>
|
|
<li>-outputFile parameter became -output</li>
|
|
<li>More sensitivity and specificity inLazyInit detector</li>
|
|
<li>More sensitivity and specificity in Naming detector</li>
|
|
<li>More sensitivity and specificity in UnreadFields detector</li>
|
|
<li>More sensitivity in FindNullDeref detector</li>
|
|
<li>More sensitivity in FindBadCast2 detector</li>
|
|
<li>More specificity in FindReturnRef detector</li>
|
|
<li>Many other tweaks and bug fixes</li>
|
|
</ul>
|
|
</ul>
|
|
|
|
<p> Changes since version 1.2.0</p>
|
|
<ul>
|
|
<li>Bug fixes:
|
|
<ul>
|
|
<li><a href="http://fisheye2.cenqua.com/changelog/findbugs/?cs=8219">Fix</a> <a href="http://sourceforge.net/tracker/index.php?func=detail&aid=1726946&group_id=96405&atid=614693">bug</a> with detectors that were requested to be disabled but were enabled due to requirements of other detectors.</li>
|
|
<li>Fix bugs in incremental analysis within Eclipse plugin</li>
|
|
<li>Fix some analysis errors</li>
|
|
<li>Fix some threading bugs in GUI2</li>
|
|
<li>Report version as version when it was compiled, not when it was run</li>
|
|
<li>Copy analysis time stamp when filtering or transforming analysis files.</li>
|
|
</ul>
|
|
<li>Enabled StaticCalendarDetector
|
|
</li>
|
|
<li>Reworked GUI2 to use standard FindBugs filters
|
|
</li>
|
|
<ul>
|
|
<li>Allow a suppression filter to be stored in a project and persisted to the XML representation of a project.
|
|
</li>
|
|
</ul>
|
|
|
|
<li>Move away from old GUI2 save format (a directory containing an xml file and another file containing serialized filters).
|
|
</li>
|
|
<li>Support/recommend use of two new file extensions/formats:
|
|
<dl><dt>.fba - FindBugs Analysis File</dt>
|
|
<dd>Exactly the same as an existing bug collection file stored in XML format, but using a distinct file extension
|
|
to make it easier to figure out which xml files contain FindBugs results.</dd>
|
|
<dt>.fbp - FindBugs Project File</dt><dd>Contains just the information needed to run FindBugs and display the results (e.g., the files to be analyzed, the auxiliary class path and the location of source files)</dl></li>
|
|
</ul>
|
|
<p> Changes since version 1.1.3</p>
|
|
<ul>
|
|
<li>Added -xml:withAbridgedMessages option to generate xml containing shorter messages.
|
|
The messages will be shorted by doing things like eliding package names, and leaving off
|
|
the source line from the LongMessage.
|
|
These messages are appropriate if being used in a context where
|
|
the non-message components of the bug annotations will be used to provide more information
|
|
(e.g., clicking on the message for a MethodAnnotation will display the source for the method).
|
|
<ul><li>FindBugsDisplayFeatures.setAbridgedMessages(true) can be used to generate abridged messages
|
|
when FindBugs is being accessed directly (not via generated XML) from a GUI or IDE.
|
|
</li>
|
|
</ul>
|
|
<li>In null pointer analysis, try to be better about always showing two locations: where it is known null and
|
|
where it is dereferenced.
|
|
<li>Interprocedural analysis of which methods return nonnull values
|
|
<li>Use method calls to select order in which classes are analyzed, and order in which methods
|
|
are analyzed, to improve interprocedural analysis results.
|
|
<li>Significant improvements in memory footprint, memory allocation and CPU utilization
|
|
(20-30% reduction in all three)
|
|
<li>Added a project name, to provide better descriptions in the HTML output.
|
|
<li>Added new bug pattern: Casting to char, or bit masking with nonnegative value, and then checking to see
|
|
if the result is negative.
|
|
<li>Stopped reporting transient fields
|
|
of classes not marked as serializable. Transient is used by other persistence frameworks.
|
|
<li>Improvements to detector for SQL injection (Thanks to <a href="http://www.clock.org/~matt">Matt Hargett</a> for
|
|
his contributions
|
|
<li>Changed open/save options in GUI2 to not distinguish between FindBugs projects
|
|
and saved FindBugs analysis results.
|
|
<li>Improvements to detection of serious non-short-circuit evaluation.
|
|
<li>Updated Japanese localization (thanks to Ruimo Uno)
|
|
|
|
<li>Eclipse plugin changes:
|
|
<ul>
|
|
<li>Created Bug User Annotations and Bug Tree Views
|
|
<li>Use different icons for different bug priorities
|
|
<li>Provide more information in Bug Details view
|
|
</ul>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 1.1.2:
|
|
</p>
|
|
<ul>
|
|
<li>Fixed broken Ant task
|
|
<li>Added running ant task to smoke test
|
|
<li>Added validating xml and html output to smoke test
|
|
<li>Fixed some (but not all) issues with html output validation
|
|
<li>Added check for x.equals(x) and x.compareTo(x)
|
|
<li>Various bug fixes
|
|
</ul>
|
|
<p>
|
|
Changes since version 1.1.1:
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
Added check for infinite iterative loops
|
|
</li>
|
|
<li>
|
|
Added check for use of incompatible types in a collection (e.g.,
|
|
checking to see if a Set<String> contains a StringBuffer).
|
|
</li>
|
|
<li>
|
|
Added check for invocations of equals or hashCode on a URL,
|
|
which,
|
|
<a
|
|
href="http://michaelscharf.blogspot.com/2006/11/javaneturlequals-and-hashcode-make.html">surprising
|
|
many people</a>, requires DNS resolution.
|
|
</li>
|
|
<li>
|
|
Added check for classes that define compareTo but not equals;
|
|
such classes can exhibit some anomalous behavior (e.g., they are
|
|
treated differently by PriorityQueues in Java 5 and Java 6).
|
|
</li>
|
|
<li>
|
|
Added a check for useless self operations (e.g., x < x or x ^ x).
|
|
</li>
|
|
<li>
|
|
Fixed a data race that could cause the GUI to fail on startup
|
|
</li>
|
|
<li>
|
|
Partial internationalization of the new GUI
|
|
</li>
|
|
<li>
|
|
Fix bug in "Redo analysis" option of new GUI
|
|
</li>
|
|
<li>
|
|
Tuning to reduce false positives
|
|
</li>
|
|
<li>
|
|
Fixed a bug in null pointer analysis that was generating false
|
|
positive null pointer warnings on exception paths. Fixing this
|
|
bug eliminates about 1/4 of the warnings on null pointer
|
|
exceptions on exception paths.
|
|
</li>
|
|
<li>
|
|
Fixed a bug in the processing of phi nodes for fields in the null
|
|
pointer analysis
|
|
</li>
|
|
<li>
|
|
Applied contributed patch that provides more quick fixes in
|
|
Eclipse plugin.
|
|
</li>
|
|
<li>
|
|
Fixed a number of bugs in the Eclipse auto update sites, and in the way
|
|
date qualifiers were being used in the Eclipse plugin. You may need to manually
|
|
disable your existing version of the plugin and download the 1.1.2 from the update
|
|
site to get the automatic update function working correctly.
|
|
The Eclipse update sites are described at <a href="http://findbugs.cs.umd.edu/eclipse/">http://findbugs.cs.umd.edu/eclipse/</a>.
|
|
|
|
</li>
|
|
<li>
|
|
Fixed progress bar in Eclipse plugin
|
|
</li>
|
|
<li>
|
|
A number of other bug fixes.
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 1.1.0:
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
less scanning of classes not on the analysis path (This was
|
|
causing some performance problems.)
|
|
</li>
|
|
<li>
|
|
no unread field warnings for fields annotated with
|
|
javax.persistent or javax.ejb3
|
|
</li>
|
|
<li>
|
|
Eclipse plugin
|
|
<ul>
|
|
<li>
|
|
bug annotation info displayed in Bug Details tab
|
|
</li>
|
|
<li>
|
|
.fbwarnings data file now stored in .metadata (not in the
|
|
project itself)
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
new SE_BAD_FIELD_INNER_CLASS pattern
|
|
</li>
|
|
<li>
|
|
updates to Japanese translation (ruimo)
|
|
</li>
|
|
<li>
|
|
fix some internal slashed/dotted path confusion
|
|
</li>
|
|
<li>
|
|
other minor improvements
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 1.0.0:
|
|
</p>
|
|
|
|
<ul>
|
|
<li>
|
|
Overall, the change from FindBugs 1.0.0 to FindBugs 1.1.0 has
|
|
been a big change. We've done a lot of work in a lot of areas,
|
|
and aren't even going to try to enumerate all the changes.
|
|
</li>
|
|
<li>
|
|
We spent a lot of time reviewing the results generated by
|
|
FindBugs for open source and commercial code bases, and made a
|
|
number of changes, small and large, to minimize the number of
|
|
false positives. Our primary focus for this was warnings reported
|
|
as high and medium priority correctness warnings. Our internal
|
|
evaluation is that we produce very few high/medium priority
|
|
correctness warnings where the analysis is actually wrong, and
|
|
that more than 75% of the high/medium priority correctness
|
|
warnings correspond to real coding defects that need addressing
|
|
in the source code. The remaining 25% are largely cases such as a
|
|
branch or statement that if taken would lead to an error, but in
|
|
fact is a dead branch or statement that can never be taken. Such
|
|
coding is confusing and hard to maintain, so it should arguably
|
|
be fixed, but it is unlikely to actually result in an error
|
|
during execution. Thus, some might classify those warnings as
|
|
false positives.
|
|
|
|
</li>
|
|
<li>
|
|
We've substantially improved the analysis for errors that could
|
|
result in null pointer dereferences. Overall, our experience has
|
|
been that these changes have roughly doubled the number of null
|
|
pointer errors we detect, without increasing the number of false
|
|
positives (in fact, our false positive rate has gone down). The
|
|
improvements are due to four factors:
|
|
<ul>
|
|
<li>
|
|
By default, we now do some interprocedural analysis to
|
|
determine methods that unconditionally dereference their
|
|
parameters.
|
|
</li>
|
|
<li>
|
|
FindBugs also comes with a model of which JDK methods
|
|
unconditionally dereference their parameters.
|
|
</li>
|
|
<li>
|
|
We do limited tracking of fields, so that we can detect null
|
|
values stored in fields that lead to exceptions.
|
|
</li>
|
|
<li>
|
|
We implemented a new analysis technique to find guaranteed
|
|
dereferences. Consider the following example:
|
|
|
|
<code>
|
|
<pre>public int f(Object x, boolean b) {
|
|
int result = 0;
|
|
if (x == null) result++;
|
|
else result--;
|
|
// at this point, we know x is null on a simple path
|
|
if (b) {
|
|
// at this point, x is only null on a complex path
|
|
// we don't know if the path in which x is null and b is true is feasible
|
|
return result + x.hashCode();
|
|
}
|
|
else {
|
|
// at this point, x is only null on a complex path
|
|
// we don't know if the path in which x is null and b is false is feasible
|
|
return result - x.hashCode();
|
|
}
|
|
</pre>
|
|
</code>
|
|
|
|
<p>
|
|
FindBugs 1.0 used forward dataflow analysis to determine
|
|
whether each value is definitely null, null on a simple path,
|
|
possible null on a complex path, or definitely nonnull. Thus,
|
|
at the statement where
|
|
<code>
|
|
result
|
|
</code>
|
|
is decremented, we know that
|
|
<code>
|
|
x
|
|
</code>
|
|
is definitely null, and at the point before
|
|
<code>
|
|
if (b)
|
|
</code>
|
|
, we know that
|
|
<code>
|
|
x
|
|
</code>
|
|
is null on a simple path. If
|
|
<code>
|
|
x
|
|
</code>
|
|
were to be dereferenced here, we would generate a warning,
|
|
because if the else branch of the
|
|
<code>
|
|
if (x == null)
|
|
</code>
|
|
were ever taken, a null pointer exception would result.
|
|
</p>
|
|
|
|
<p>
|
|
However, in both the then and else branches of the
|
|
<code>
|
|
if (b)
|
|
</code>
|
|
statement,
|
|
<code>
|
|
x
|
|
</code>
|
|
is only null on a complex path that may be infeasible. It
|
|
might be that the program logic is such that if
|
|
<code>
|
|
x
|
|
</code>
|
|
is null, then
|
|
<code>
|
|
b
|
|
</code>
|
|
is never true, so generating a warning about the dereference
|
|
in the then clause might be a false positive. We could try to
|
|
analyze the program to determine whether it is possible for
|
|
<code>
|
|
x
|
|
</code>
|
|
to be null and
|
|
<code>
|
|
b
|
|
</code>
|
|
to be true, but that can be a hard analysis problem.
|
|
</p>
|
|
|
|
<p>
|
|
However,
|
|
<code>
|
|
x
|
|
</code>
|
|
is dereferenced in both the then
|
|
<em>and</em> else branches of the
|
|
<code>
|
|
if (b)
|
|
</code>
|
|
statement. So at the point immediately before
|
|
<code>
|
|
if (b)
|
|
</code>
|
|
, we know that
|
|
<code>
|
|
x
|
|
</code>
|
|
is null on a simple path
|
|
<em>and</em> that
|
|
<code>
|
|
x
|
|
</code>
|
|
is guaranteed to be dereferenced on all paths from this point
|
|
forward. FindBugs 1.1 performs a backwards data flow analysis
|
|
to determine the values that are guaranteed to be
|
|
dereferenced, and will generate a warning in this case.
|
|
</p>
|
|
</li>
|
|
</ul>
|
|
<p>
|
|
The following screen shot of our new GUI shows an example of
|
|
this analysis, as well as showing off our new GUI and points out
|
|
a limitation of our current plugins for Eclipse and NetBeans.
|
|
The screen shot shows a null pointer bug in HelpDisplay.java.
|
|
The test for
|
|
<code>
|
|
href!=null
|
|
</code>
|
|
on line 78 suggests that
|
|
<code>
|
|
href
|
|
</code>
|
|
could be null. If it is, then
|
|
<code>
|
|
href
|
|
</code>
|
|
will be dereferenced on either line 87 or on line 90, generating
|
|
a NPE. Note that our analysis here also understands that passing
|
|
<code>
|
|
href
|
|
</code>
|
|
to
|
|
<code>
|
|
URLEncoder.encode
|
|
</code>
|
|
will deference it, and thus treats line 87 as a dereference,
|
|
even though
|
|
<code>
|
|
href
|
|
</code>
|
|
is not actually dereferenced at that line. Within our new GUI,
|
|
all of these locations are highlighted and listed in the summary
|
|
panel. In the original GUI (and in HTML output) we list all of
|
|
the locations, but only the primary location is highlighted by
|
|
the original GUI. In the Eclipse and NetBeans plugins, only the
|
|
primary location is displayed; fixing this is on our todo list
|
|
(contributions welcome).
|
|
</p>
|
|
<p>
|
|
<img src="guaranteedDereference.png" alt="">
|
|
|
|
|
|
</p>
|
|
|
|
</li>
|
|
<li>
|
|
Preliminary support for detectors using the frameworks other than
|
|
BCEL, such as the
|
|
<a href="http://asm.objectweb.org/">ASM</a> bytecode framework.
|
|
You may experiment with writing ASM-based detectors, but beware
|
|
the API may still change (which could possibly also affect
|
|
BCEL-based detectors). In general, we've started trying to move
|
|
away from a deep dependence on BCEL, but that change is only
|
|
partially complete. Probably best to just avoid this until we
|
|
complete more work on this. This change is only visible to
|
|
FindBugs plugin developers, and shouldn't be visible to FindBugs
|
|
users.
|
|
</li>
|
|
<li>
|
|
<p>
|
|
Bug categories (CORRECTNESS, MT_CORRECTNESS, etc.) are no longer
|
|
hard-coded, but rather defined in xml files associated with
|
|
plugins, including the core plugin which defines the standard
|
|
categories. Third-party plugins can define their own categories.
|
|
</p>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
Several bug patterns have been moved from CORRECTNESS and STYLE
|
|
into a new category, BAD_PRACTICE. The English localization of
|
|
STYLE has changed from "Style" to "Dodgy."
|
|
</p>
|
|
<p>
|
|
In general, we've worked very hard to limit CORRECTNESS bugs to
|
|
be real programming errors and sins of commission. We have
|
|
reclassified as BAD_PRACTICE a number of bad design practices
|
|
that result in overly fragile code, such as defining an equals
|
|
method that doesn't accept null or defining class with a equals
|
|
method that inherits hashCode from class Object.
|
|
</p>
|
|
<p>
|
|
In general, our guidelines for deciding whether a bug should be
|
|
classified as CORRECTNESS, BAD_PRACTICE or STYLE are:
|
|
</p>
|
|
<dl>
|
|
<dt>
|
|
CORRECTNESS
|
|
</dt>
|
|
<dd>
|
|
A problem that we can recognize with high confidence and is an
|
|
issue that we believe almost all developers would want to
|
|
examine and address. We recommend that software teams review
|
|
all high and medium priority warnings in their entire code
|
|
base.
|
|
</dd>
|
|
<dt>
|
|
BAD_PRACTICE
|
|
</dt>
|
|
<dd>
|
|
A problem that we can recognize with high confidence and
|
|
represents a clear violation of recommended and standard coding
|
|
practice. We believe each software team should decide which bad
|
|
practices identified by FindBugs it wants to prohibit in the
|
|
team's coding standard, and take action to remedy violations of
|
|
those coding standards.
|
|
</dd>
|
|
<dt>
|
|
STYLE
|
|
</dt>
|
|
<dd>
|
|
These are places where something strange or dodgy is going on,
|
|
such as a dead store to a local variable. Typically, less than
|
|
half of these represent actionable programming defects.
|
|
Reviewing these warnings in any code under active development
|
|
is probably a good idea, but reviewing all such warnings in
|
|
your entire code base might be appropriate only in some
|
|
situations. Individual or team programming styles can
|
|
substantially influence the effectiveness of each of these
|
|
warnings (e.g., you might have a coding practice or style in
|
|
your group that confuses one of the detectors into generating a
|
|
lot of STYLE warnings); you will likely want to selectively
|
|
suppress or report the STYLE warnings that are effective for
|
|
your group.
|
|
</dd>
|
|
</dl>
|
|
</li>
|
|
<li>
|
|
Released a preliminary version of a new GUI (known internally as
|
|
GUI2 -- not very creative, huh?)
|
|
</li>
|
|
<li>
|
|
Provided standard ways to mark user designations of bug warnings
|
|
(e.g., as NOT_A_BUG or SHOULD_FIX). The internal logic now
|
|
records this, it is represented in the XML file, and GUI2 allows
|
|
the designations to be applied (along with free-form user
|
|
annotations about each warning). The user designations and
|
|
annotations are not yet supported by the Eclipse plugin, but we
|
|
clearly want to support it in Eclipse shortly.
|
|
</li>
|
|
<li>
|
|
Added a check for a bad comparison with a signed byte with a
|
|
value not in the range -128..127. For example:
|
|
<code>
|
|
<pre>boolean find200(byte b[]) {
|
|
for(int i = 0; i < b.length; i++) if (b[i] == 200) return i;
|
|
return -1;
|
|
}
|
|
</pre>
|
|
</code>
|
|
</li>
|
|
<li>
|
|
Added a checking for testing if a value is equal to Double.NaN
|
|
(no value is equal to NaN, not even NaN).
|
|
</li>
|
|
<li>
|
|
Added a check for using a class with an equals method but no
|
|
hashCode method in a hashed data structure.
|
|
</li>
|
|
<li>
|
|
Added check for uncallable method of an anonymous inner class.
|
|
For example, in the following code, it is impossible to invoke
|
|
the initalValue method (because the name is misspelled and as a
|
|
result is doesn't override a method in ThreadLocal).
|
|
<code>
|
|
<pre>private static ThreadLocal serialNum = new ThreadLocal() {
|
|
protected synchronized Object initalValue() {
|
|
return new Integer(nextSerialNum++);
|
|
}
|
|
};
|
|
</pre>
|
|
</code>
|
|
</li>
|
|
<li>
|
|
Added check for a dead local store caused by a switch statement
|
|
fall through
|
|
</li>
|
|
<li>
|
|
Added check for computing the absolute value of a random 32 bit
|
|
integer or of a hashcode. This is broken because
|
|
<code>
|
|
Math.abs(Integer.MIN_VALUE) == Integer.MIN_VALUE
|
|
</code>
|
|
, and thus result of calling Math.abs, which is expected to be
|
|
nonnegative, will in fact be negative one time out of 2
|
|
<sup>
|
|
32
|
|
</sup>
|
|
, which will invariably be the time your boss is demoing the
|
|
software to your customers.
|
|
|
|
</li>
|
|
<li>
|
|
More careful resolution of inherited methods and fields. Some of
|
|
the shortcuts we were taking in FindBugs 1.0.0 were leading to
|
|
inaccurate results, and it was fairly easy to address this by
|
|
making the analysis more accurate.
|
|
</li>
|
|
<li>
|
|
Overall, analysis times are about 1.6 times longer in FindBugs
|
|
1.1.0 than in FindBugs 1.0.0. This is because we have enabled
|
|
substantial additional analysis at the default effort level (the
|
|
actual analysis engine is significantly faster than in FindBugs
|
|
1.0). On a recent AMD Athlon processor, analyzing JDK1.6.0 (about
|
|
1 million lines of code) requires about 15 minutes of wall clock
|
|
time.
|
|
</li>
|
|
<li>
|
|
Provided class and script (printClass) to print classfile in the
|
|
human readable format produced by BCEL
|
|
</li>
|
|
<li>
|
|
Provided -findSource option to setBugDatabaseInfo
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
<p>
|
|
Changes since version 0.9.7:
|
|
</p>
|
|
|
|
<ul>
|
|
<li>
|
|
fix ObjectTypeFactory bug that was suppressing some bugs
|
|
</li>
|
|
<li>
|
|
opcode stack may determine definite zeros on some paths
|
|
</li>
|
|
<li>
|
|
opcode stack can track some constant string concatenations
|
|
(dbrosius)
|
|
</li>
|
|
<li>
|
|
default effort performs iterative opcode analysis (but min effort
|
|
does not)
|
|
</li>
|
|
<li>
|
|
default heap size upped to 384m
|
|
</li>
|
|
<li>
|
|
schema for XML output available: bugcollection.xsd
|
|
</li>
|
|
<li>
|
|
fixed some internal confusion between dotted and slashed class
|
|
names
|
|
</li>
|
|
<li>
|
|
New detectors
|
|
<ul>
|
|
<li>
|
|
CheckImmutableAnnotation.java: checks JCIP annotations
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
Updated detectors
|
|
<ul>
|
|
<li>
|
|
BadRegEx.java: understands Pattern.LITERAL, warns about "."
|
|
</li>
|
|
<li>
|
|
FindUnreleasedLock.java: fewer false positives
|
|
</li>
|
|
<li>
|
|
DumbMethods.java: check for vacuous comparisons to MAX_INTEGER
|
|
or MIN_INTEGER, fix bugs detecting DM_NEXTINT_VIA_NEXTDOUBLE
|
|
</li>
|
|
<li>
|
|
FindPuzzlers.java: detect
|
|
<tt>n%2==1</tt>, detect toString() on array types
|
|
</li>
|
|
<li>
|
|
FindInconsistentSync2.java: detects IS_FIELD_NOT_GUARDED
|
|
</li>
|
|
<li>
|
|
MethodReturnCheck.java: add check for discarded newly
|
|
constructed values, increase priority of some ignored
|
|
constructed exceptions, better handling of bytecode compiled by
|
|
Eclipse
|
|
</li>
|
|
<li>
|
|
FindEmptySynchronizedBlock.java: better handling of bytecode
|
|
compiled by Eclipse
|
|
</li>
|
|
<li>
|
|
DoInsideDoPrivileged.java: warn if call to setAccessible isn't
|
|
in doPriviledged, don't report private methods
|
|
</li>
|
|
<li>
|
|
LoadOfKnownNullValue.java: fix bug that was reporting false
|
|
positives on
|
|
<code>
|
|
finally
|
|
</code>
|
|
blocks
|
|
</li>
|
|
<li>
|
|
CheckReturnAnnotationDatabase.java: better checks for unstarted
|
|
threads
|
|
</li>
|
|
<li>
|
|
ConfusionBetweenInheritedAndOuterMethod.java: fewer false
|
|
positives, fixed a package-handling bug
|
|
</li>
|
|
<li>
|
|
BadResultSetAccess.java: separate bug pattern for
|
|
PreparedStatements,
|
|
<code>
|
|
BRZA
|
|
</code>
|
|
category folded into
|
|
<code>
|
|
SQL
|
|
</code>
|
|
category
|
|
</li>
|
|
<li>
|
|
FindDeadLocalStores.java, FindBadCast2.java, DumbMethods.java,
|
|
RuntimeExceptionCapture.java: coalesce similar bugs within a
|
|
method into a single bug instance with multiple source lines
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
Eclipse plugin
|
|
<ul>
|
|
<li>
|
|
plugin ID changed from
|
|
<tt>de.tobject.findbugs</tt> to
|
|
<tt>edu.umd.cs.findbugs.plugin.eclipse</tt>
|
|
</li>
|
|
<li>
|
|
support for findbugs eclipse auto-update site
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
Updated test case files
|
|
<ul>
|
|
<li>
|
|
BadRegEx.java
|
|
</li>
|
|
<li>
|
|
JSR166.java
|
|
</li>
|
|
<li>
|
|
ConcurrentModificationBug.java
|
|
</li>
|
|
<li>
|
|
DeadStore.java
|
|
</li>
|
|
<li>
|
|
InstanceOf.java
|
|
</li>
|
|
<li>
|
|
LoadKnownNull.java
|
|
</li>
|
|
<li>
|
|
NeedsToCheckReturnValue.java
|
|
</li>
|
|
<li>
|
|
BadResultSetAccessTest.java
|
|
</li>
|
|
<li>
|
|
DeadStore.java
|
|
</li>
|
|
<li>
|
|
TestNonNull2.java
|
|
</li>
|
|
<li>
|
|
TestImmutable.java
|
|
</li>
|
|
<li>
|
|
TestGuardedBy.java
|
|
</li>
|
|
<li>
|
|
BadRandomInt.java
|
|
</li>
|
|
<li>
|
|
six test cases added to new
|
|
<code>
|
|
TigerTraps
|
|
</code>
|
|
directory
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
fix bug that was generating duplicate uids
|
|
</li>
|
|
<li>
|
|
fix bug with
|
|
<code>
|
|
-onlyAnalyze some.package.*
|
|
</code>
|
|
on jdk1.4
|
|
</li>
|
|
<li>
|
|
fix regression bug in DismantleByteCode.getRefConstantOperand()
|
|
</li>
|
|
<li>
|
|
fix some minor bugs with the Swing GUI
|
|
</li>
|
|
<li>
|
|
reordered some bugInstances so that source line annotations come
|
|
last
|
|
</li>
|
|
<li>
|
|
removed references to unused java system properties
|
|
</li>
|
|
<li>
|
|
French translation updates (David Cotton)
|
|
</li>
|
|
<li>
|
|
Japanese translation updates (Hanai Shisei)
|
|
</li>
|
|
<li>
|
|
content cleanup for findbugs.xml and messages.xml
|
|
</li>
|
|
<li>
|
|
references to cvs hostname updated to
|
|
findbugs.cvs.sourceforge.net
|
|
</li>
|
|
<li>
|
|
documented xdoc output options, new
|
|
mineBugHistory/computeBugHistory options
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 0.9.6:
|
|
</p>
|
|
|
|
<ul>
|
|
<li>
|
|
performance improvements
|
|
</li>
|
|
<li>
|
|
ObjectType instances are cached to reduce memory footprint
|
|
</li>
|
|
<li>
|
|
for performance and memory reasons stateless detectors are no
|
|
longer cloned, must clear their own state between .class files
|
|
</li>
|
|
<li>
|
|
fixed bug in bytecode-set lookup for methods (was causing bad
|
|
results for IS2, perhaps others)
|
|
</li>
|
|
<li>
|
|
fix some OpcodeStack bugs with integer and long operations,
|
|
perform iterative analysis when effort is
|
|
<tt>max</tt>
|
|
</li>
|
|
<li>
|
|
HTML output includes LongMessage text again (regression in 0.95 -
|
|
0.96)
|
|
</li>
|
|
<li>
|
|
New detectors
|
|
<ul>
|
|
<li>
|
|
CalledMethods.java: builds a list of invoked methods for other
|
|
detectors to consult (non-reporting)
|
|
</li>
|
|
<li>
|
|
UncallableMethodOfAnonymousClass.java: detect anonymous inner
|
|
classes that define methods that are probably intended to but
|
|
do not override methods in a superclass.
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
Updated detectors
|
|
<ul>
|
|
<li>
|
|
FindFieldSelfAssignment.java: recognize separate fields with
|
|
the same name (one from superclass)
|
|
</li>
|
|
<li>
|
|
FindLocalSelfAssignment2.java: handles backward branches better
|
|
(Dave Brosius)
|
|
</li>
|
|
<li>
|
|
FindBadCast2.java: BC_NULL_INSTANCEOF changed to
|
|
NP_NULL_INSTANCEOF
|
|
</li>
|
|
<li>
|
|
FindPuzzlers.java: eliminate false positive on setDate() (Dave
|
|
Brosius)
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
Eclipse plugin
|
|
<ul>
|
|
<li>
|
|
fix serious threading bug
|
|
</li>
|
|
<li>
|
|
preferences for Filters and effort (Peter Hendriks)
|
|
</li>
|
|
<li>
|
|
French localization (David Cotton)
|
|
</li>
|
|
<li>
|
|
fix bug when reporting inner classes (Peter Friese)
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
Updated test case files
|
|
<ul>
|
|
<li>
|
|
Mwn.java (Carl Burke/Dave Brosius)
|
|
</li>
|
|
<li>
|
|
DumbMethodInvocations.java (Anto paul/Dave Brosius)
|
|
</li>
|
|
<!--sic-->
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
XML output includes garbage collection duration
|
|
</li>
|
|
<li>
|
|
French messages updated (David Cotton)
|
|
</li>
|
|
<li>
|
|
Swing GUI shows file name after Load Bugs command
|
|
</li>
|
|
<li>
|
|
Ant task to launch the findbugs frame (Mark McKay)
|
|
</li>
|
|
<li>
|
|
miscellaneous code cleanup
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 0.9.5:
|
|
</p>
|
|
|
|
<ul>
|
|
<li>
|
|
Updated detectors
|
|
<ul>
|
|
<li>
|
|
FindNullDeref.java: respect NonNull and CheckForNull field
|
|
annotations
|
|
</li>
|
|
<li>
|
|
SerializableIdiom.java: detect non-private readObject and
|
|
writeObject methods
|
|
</li>
|
|
<li>
|
|
FindRefComparison.java: smarter array comparison detection
|
|
</li>
|
|
<li>
|
|
IsNullValueAnalysis.java: detect
|
|
<tt>null instanceof</tt>
|
|
</li>
|
|
<li>
|
|
FindLocalSelfAssignment2.java: suppress some false positives
|
|
(Dave Brosius)
|
|
</li>
|
|
<li>
|
|
FindUnreleasedLock.java: don't waste time processing classes
|
|
that don't refer to java.util.concurrent.locks
|
|
</li>
|
|
<li>
|
|
MutableStaticFields.java: report the source line (Dave Brosius)
|
|
</li>
|
|
<li>
|
|
SwitchFallthrough.java: better handling of System.exit() (Dave
|
|
Brosius)
|
|
</li>
|
|
<li>
|
|
MultithreadedInstanceAccess.java: better handling of
|
|
Servlet.init() (Dave Brosius)
|
|
</li>
|
|
<li>
|
|
ConfusionBetweenInheritedAndOuterMethod.java: now enabled
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
Eclipse plugin
|
|
<ul>
|
|
<li>
|
|
background processing (Peter Friese)
|
|
</li>
|
|
<li>
|
|
internationalization, Japanese localization (Takashi Okamoto)
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
findbugs
|
|
<tt>-onlyAnalyze</tt> option now works on windows platforms
|
|
</li>
|
|
<li>
|
|
mineBugHistory
|
|
<tt>-noTabs</tt> option for better alignment of output columns
|
|
</li>
|
|
<li>
|
|
filterBugs
|
|
<tt>-fixed</tt> option (also: will now recognize the most recent
|
|
version string)
|
|
</li>
|
|
<li>
|
|
XML output includes running time and memory usage data
|
|
</li>
|
|
<li>
|
|
miscellaneous minor corrections to the manual
|
|
</li>
|
|
<li>
|
|
better bytecode analysis of the
|
|
<tt>iinc</tt> instruction
|
|
</li>
|
|
<li>
|
|
fix bug in null pointer analysis
|
|
</li>
|
|
<li>
|
|
improved catch block heuristics
|
|
</li>
|
|
<li>
|
|
some type analysis tweaks
|
|
</li>
|
|
<li>
|
|
Bug priority changes
|
|
<ul>
|
|
<li>
|
|
DumbMethodInvocations.java: decrease priority of hard-coded
|
|
<tt>/tmp</tt> filenames
|
|
</li>
|
|
<li>
|
|
ComparatorIdiom.java: decrease priority of non-serializable
|
|
anonymous comparators
|
|
</li>
|
|
<li>
|
|
FindSqlInjection.java: decrease priority of appending a
|
|
constant or a static
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
Updated bug explanations
|
|
<ul>
|
|
<li>
|
|
NM_VERY_CONFUSING (Dave Brosius)
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
Updated test case files
|
|
<ul>
|
|
<li>
|
|
BadStoreOfNonSerializableObject.java
|
|
</li>
|
|
<li>
|
|
BadRandomInt.java
|
|
</li>
|
|
<li>
|
|
TestFieldAnnotations.java
|
|
</li>
|
|
<li>
|
|
UseInitCause.java
|
|
</li>
|
|
<li>
|
|
SqlInjection.java
|
|
</li>
|
|
<li>
|
|
ArrayEquality.java
|
|
</li>
|
|
<li>
|
|
BadIntegerOperations.java
|
|
</li>
|
|
<li>
|
|
Pilhuhn.java
|
|
</li>
|
|
<li>
|
|
InstanceOf.java
|
|
</li>
|
|
<li>
|
|
SwitchFallthrough.java (Dave Brosius)
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
fix URL decoding bug when running under Java Web Start (Dave
|
|
Brosius)
|
|
</li>
|
|
<li>
|
|
distribution includes
|
|
<tt>project.xml</tt> file for NetBeans
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 0.9.4:
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
New detectors
|
|
<ul>
|
|
<li>
|
|
VarArgsProblems.java
|
|
</li>
|
|
<li>
|
|
FindSqlInjection.java: now enabled
|
|
</li>
|
|
<li>
|
|
ComparatorIdiom.java: comparators usually implement
|
|
serializable
|
|
</li>
|
|
<li>
|
|
Naming.java: detect methods not overridden due to eponymously
|
|
typed args from different packages
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
Updated detectors
|
|
<ul>
|
|
<li>
|
|
SwitchFallthrough.java: surpress some false positives
|
|
</li>
|
|
<li>
|
|
DuplicateBranches.java: surpress some false positives
|
|
</li>
|
|
<li>
|
|
IteratorIdioms.java: surpress some false positives
|
|
</li>
|
|
<li>
|
|
FindHEmismatch.java: surpress some false positives
|
|
</li>
|
|
<li>
|
|
QuestionableBooleanAssignment.java: finds more cases of
|
|
<tt>if (b=true)</tt> ilk
|
|
</li>
|
|
<li>
|
|
DumbMethods.java: detect int remainder by 1, delayed gc errors
|
|
</li>
|
|
<li>
|
|
SerializableIdiom.java: detect store of nonserializable object
|
|
into field of serializable class
|
|
</li>
|
|
<li>
|
|
FindNullDeref.java: fix potential exception
|
|
</li>
|
|
<li>
|
|
IsNullValue.java: fix potential exception
|
|
</li>
|
|
<li>
|
|
MultithreadedInstanceAccess.java: fix potential exception
|
|
</li>
|
|
<li>
|
|
PreferZeroLengthArrays.java: flag the method, not the line
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
Remove some inadvertent dependencies on JDK 1.5
|
|
</li>
|
|
<li>
|
|
Sort order should be more consistent
|
|
</li>
|
|
<li>
|
|
XML output changes
|
|
<ul>
|
|
<li>
|
|
Option to sort XML bug output
|
|
</li>
|
|
<li>
|
|
Now contains instance IDs
|
|
</li>
|
|
<li>
|
|
uid no longer missing (was causing problems with fancy HTML
|
|
output)
|
|
</li>
|
|
<li>
|
|
Typo fixed
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
Internal changes to track source files,
|
|
<tt>-sourceInfo</tt> option
|
|
</li>
|
|
<li>
|
|
Bug matching: first try exact bug pattern matching, option to
|
|
compare priorities, option to disable package moves
|
|
</li>
|
|
<li>
|
|
Architecture documentation in
|
|
<tt>design/architecture</tt>
|
|
</li>
|
|
<li>
|
|
Test cases move into their own CVS project
|
|
</li>
|
|
<li>
|
|
Don't report warnings that occur outside the analyzed classes
|
|
</li>
|
|
<li>
|
|
Fixes to the build.xml files
|
|
</li>
|
|
<li>
|
|
Better handling of @CheckReturnValue and @CheckForNull
|
|
annotations (also, some additional methods searched for check
|
|
return value and check for null)
|
|
</li>
|
|
<li>
|
|
Fixed some stream-closing bugs (one by
|
|
<tt>z-fb-user</tt>/Dave Brosius)
|
|
</li>
|
|
<li>
|
|
Bug priority changes
|
|
<ul>
|
|
<li>
|
|
increase priority of ignoring return value of
|
|
java.sql.Connection methods
|
|
</li>
|
|
<li>
|
|
increase priority of comparing classes like Integer using
|
|
<tt>==</tt>
|
|
</li>
|
|
<li>
|
|
decrease priority of IT_NO_SUCH_ELEMENT if we see any call to
|
|
<tt>next()</tt>
|
|
</li>
|
|
<li>
|
|
tweak priority of NM_METHOD_CONSTRUCTOR_CONFUSION
|
|
</li>
|
|
<li>
|
|
decrease priority of RV_RETURN_VALUE_IGNORED for an inherited
|
|
annotation that doesn't return same type as class
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
Updated bug explanations
|
|
<ul>
|
|
<li>
|
|
RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE
|
|
</li>
|
|
<li>
|
|
DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED
|
|
</li>
|
|
<li>
|
|
IMA_INEFFICIENT_MEMBER_ACCESS (Dave Brosius)
|
|
</li>
|
|
<li>
|
|
some Japanese improvements to messages_ja.xml (
|
|
<tt>ruimo</tt>)
|
|
</li>
|
|
<li>
|
|
some German improvements to findbugs_de.properties (Dave
|
|
Brosius,
|
|
<tt>dvholten</tt>)
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
Updated test case files
|
|
<ul>
|
|
<li>
|
|
BadIntegerOperations.java
|
|
</li>
|
|
<li>
|
|
SecondKaboom.java
|
|
</li>
|
|
<li>
|
|
OpenDatabase.java (Dave Brosius)
|
|
</li>
|
|
<li>
|
|
FindOpenStream.java (Dave Brosius)
|
|
</li>
|
|
<li>
|
|
BadRandomInt.java
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
Source-lines info maintained for methods (handy for abstract and
|
|
native methods)
|
|
</li>
|
|
<li>
|
|
Remove surrounding opcodes from source line annotations
|
|
</li>
|
|
<li>
|
|
Better error when can't read file
|
|
</li>
|
|
<li>
|
|
Swing GUI: removed console pane from FindBugsFrame, fix missing
|
|
classes bug
|
|
</li>
|
|
<li>
|
|
Fixes to OpcodeStack.java
|
|
</li>
|
|
<li>
|
|
Detectors may attach a custom value to an OpcodeStack.Item (Dave
|
|
Brosius)
|
|
</li>
|
|
<li>
|
|
Filter.java: ability to add text messages to XML output, fix bug
|
|
with
|
|
<tt>-withMessages</tt>
|
|
</li>
|
|
<li>
|
|
SourceInfoMap supports ranges of source lines
|
|
</li>
|
|
<li>
|
|
Ant task supports the
|
|
<tt>timestampNow</tt> attribute
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 0.9.3:
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
Substantial rework of datamining code
|
|
</li>
|
|
<li>
|
|
Removed bogus warnings about await on things other than Condition
|
|
not being in a loop
|
|
</li>
|
|
<li>
|
|
Fixed bug in OpcodeStack handling of dup2 of long/double values
|
|
</li>
|
|
<li>
|
|
Don't report array types as missing classes
|
|
</li>
|
|
<li>
|
|
Adjustment of some warnings on ignored return values
|
|
</li>
|
|
<li>
|
|
Added thread safety annotations from Java Concurrency in Practice
|
|
(no detectors written for these yet)
|
|
</li>
|
|
<li>
|
|
Added annotation for methods that, if overridden, should be
|
|
invoked by overriding methods via a call to super
|
|
</li>
|
|
<li>
|
|
Updated -html:fancy.xsl (Etienne Giraudy)
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Note: there was no version 0.9.2
|
|
</p>
|
|
|
|
<p>
|
|
Changes since version 0.9.1:
|
|
</p>
|
|
<ul>
|
|
<!-- New detectors -->
|
|
<li>
|
|
Embellish USM to find abstract methods that implement an
|
|
interface method (Dave Brosius)
|
|
</li>
|
|
<li>
|
|
New detector to find stores of literal booleans inside if or
|
|
while expressions (Dave Brosius)
|
|
</li>
|
|
<li>
|
|
New style detector to find final classes that declare protected
|
|
fields (Dave Brosius)
|
|
</li>
|
|
<li>
|
|
New detector to find subclass methods that simply forward,
|
|
verbatim, to the super class (Dave Brosius)
|
|
</li>
|
|
<li>
|
|
Detector to find instances where code is attempting to write an
|
|
object out via an implementation of DataOutput, but the object is
|
|
not guaranteed to be Serializable (Jon Christiansen, Bill Pugh)
|
|
</li>
|
|
|
|
<!-- Feature enhancements -->
|
|
<li>
|
|
Large (35%) analysis speedup (Bill Pugh)
|
|
</li>
|
|
<li>
|
|
Add line numbers to Swing GUI code panel (Dave Brosius)
|
|
</li>
|
|
<li>
|
|
Added effort options to Swing GUI (Dave Brosius)
|
|
</li>
|
|
<li>
|
|
Add ability to specify bugs file to open from command line for
|
|
GUI version, through -loadbugs (Phillip Martin)
|
|
</li>
|
|
<li>
|
|
New stylesheet for generating HTML: use option
|
|
<tt>-html:plain.xsl</tt> (Chris Nappin)
|
|
</li>
|
|
<li>
|
|
New stylesheet for generating HTML: use option
|
|
<tt>-html:fancy.xsl</tt> (Etienne Giraudy)
|
|
</li>
|
|
<li>
|
|
Updated Japanese bug message translations (Shisei Hanai)
|
|
</li>
|
|
|
|
<!-- Bug fixes -->
|
|
<li>
|
|
XHTML compliance fixes for bug details (Etienne Giraudy)
|
|
</li>
|
|
<li>
|
|
Various detector fixes (Shisei Hanai)
|
|
</li>
|
|
<li>
|
|
Fixed bugs in the project preferences dialog int the Eclipse
|
|
plugin (Takashi Okamoto, Thomas Einwaller)
|
|
</li>
|
|
<li>
|
|
Lowered priority of analysis thread in Swing GUI (David
|
|
Hovemeyer, suggested by Shisei Hanai and Jeffrey W. Badorek)
|
|
</li>
|
|
<li>
|
|
Fixed EclipsePlugin to correctly pick up auxclasspath entries
|
|
(Jon Christiansen)
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 0.9.0:
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
Fixed dependence on JRE 1.5: all features should work on JRE 1.4
|
|
again
|
|
</li>
|
|
<li>
|
|
Fixed -effort command line option handling for Swing GUI
|
|
</li>
|
|
<li>
|
|
Fixed conserveSpace and workHard attributes int Ant task
|
|
</li>
|
|
<li>
|
|
Added support for effort attribute in Ant task
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 0.8.8:
|
|
</p>
|
|
<ul>
|
|
<!-- New detectors and bug patterns -->
|
|
<li>
|
|
XMLFactoryBypass detector to find direct allocation of xml class
|
|
implementations (Dave Brosius)
|
|
</li>
|
|
<li>
|
|
InefficientMemberAccess detector to find accesses to owning class
|
|
private members (Dave Brosius)
|
|
</li>
|
|
<li>
|
|
DuplicateBranches detector checks switch statements too (Dave
|
|
Brosius)
|
|
</li>
|
|
|
|
<!-- Feature enhancements -->
|
|
<li>
|
|
FindBugs available from findbugs.sourceforge.net as Java Web
|
|
Start application (Dave Brosius)
|
|
</li>
|
|
<li>
|
|
Updated Japanese bug message translations (Shisei Hanai)
|
|
</li>
|
|
<li>
|
|
Improved bug detail message for covariant equals() (Shisei Hanai)
|
|
</li>
|
|
<li>
|
|
Modeling of instanceof checks is now enabled by default, making
|
|
the bad cast detector much more useful (Bill Pugh, David
|
|
Hovemeyer)
|
|
</li>
|
|
<li>
|
|
Support for detector ordering constraints in plugin descriptor
|
|
(David Hovemeyer)
|
|
</li>
|
|
<li>
|
|
Simpler option to control analysis effort: -effort:
|
|
<i>value</i>, where
|
|
<i>value</i> is one of
|
|
<code>
|
|
min
|
|
</code>
|
|
,
|
|
<code>
|
|
default
|
|
</code>
|
|
, or
|
|
<code>
|
|
max
|
|
</code>
|
|
(David Hovemeyer)
|
|
</li>
|
|
<li>
|
|
Using -effort:max, FindNullDeref checks for null arguments passed
|
|
to methods which dereference them unconditionally (David
|
|
Hovemeyer)
|
|
</li>
|
|
<li>
|
|
FindNullDeref checks @Null and @NonNull annotations for
|
|
parameters and return values (David Hovemeyer)
|
|
</li>
|
|
|
|
<!-- Bug fixes -->
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 0.8.7:
|
|
</p>
|
|
|
|
<ul>
|
|
<!-- New detectors and bug patterns -->
|
|
<li>
|
|
New detector to find duplicate code in if/else statements (Dave
|
|
Brosius)
|
|
</li>
|
|
<li>
|
|
Look for calls to wait() on Condition objects (David Hovemeyer)
|
|
</li>
|
|
<li>
|
|
Look for java.util.concurrent.Lock objects not released on every
|
|
path out of method (David Hovemeyer)
|
|
</li>
|
|
<li>
|
|
Look for calls to Thread.sleep() with a lock held (David
|
|
Hovemeyer)
|
|
</li>
|
|
<li>
|
|
More accurate detection of impossible casts (Bill Pugh, David
|
|
Hovemeyer)
|
|
</li>
|
|
|
|
<!-- Feature enhancements -->
|
|
<li>
|
|
Saved XML now contains project statistics (Jay Dunning)
|
|
</li>
|
|
<li>
|
|
Filter files can select by bug pattern type and warning priority
|
|
(David Hovemeyer)
|
|
</li>
|
|
|
|
<!-- Bug fixes -->
|
|
<li>
|
|
Restored some files inadvertently omitted from previous release
|
|
(Rohan Lloyd, David Hovemeyer)
|
|
</li>
|
|
<li>
|
|
Make sure detectors requiring JDK 1.5 runtime classes are only
|
|
executed if those classes are available (David Hovemeyer)
|
|
</li>
|
|
<li>
|
|
Don't display analysis error dialog unless there is really an
|
|
error (David Hovemeyer)
|
|
</li>
|
|
<li>
|
|
Updated and expanded French translations of bug patterns and
|
|
Swing GUI (Olivier Parent)
|
|
</li>
|
|
<li>
|
|
Fixed invalid character encoding in German Swing GUI translation
|
|
(Olivier Parent)
|
|
</li>
|
|
<li>
|
|
Fix locale used for date format in project stats (K. Hashimoto)
|
|
</li>
|
|
<li>
|
|
Fixed LongDescription elements in xml:withMessages output format
|
|
(K. Hashimoto)
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 0.8.6:
|
|
</p>
|
|
|
|
<ul>
|
|
<!-- new detectors -->
|
|
<li>
|
|
Extend Naming detector to look for classes that are named
|
|
XXXException but that are not Exceptions (Dave Brosius)
|
|
</li>
|
|
<li>
|
|
New detector to find classes that expose semaphores in the public
|
|
implementation through the 'this' reference. (Dave Brosius)
|
|
</li>
|
|
<li>
|
|
New Style detector to find Struts Action/Servlet derived classes
|
|
that reference instance member variable not in synchronized
|
|
blocks. (Dave Brosius)
|
|
</li>
|
|
<li>
|
|
New Style detector to find classes that declare implementation of
|
|
interfaces that are already implemented by super classes (Dave
|
|
Brosius)
|
|
</li>
|
|
<li>
|
|
New Style detector to find circular dependencies between classes
|
|
(Dave Brosius)
|
|
</li>
|
|
<li>
|
|
New Style detector to find unnecessary math on constants (Dave
|
|
Brosius)
|
|
</li>
|
|
<li>
|
|
New detector to find equality comparisons using floating point
|
|
math (Jay Dunning)
|
|
</li>
|
|
<li>
|
|
New faster detector to find local self assignments (Bill Pugh)
|
|
</li>
|
|
<li>
|
|
New detector to find infinite recursive loops (Bill Pugh)
|
|
</li>
|
|
<li>
|
|
New detector to find for loops with an incorrect increment (Bill
|
|
Pugh)
|
|
</li>
|
|
<li>
|
|
New detector to find suspicious uses of BufferedReader.readLine()
|
|
and String.indexOf() (Bill Pugh)
|
|
</li>
|
|
<li>
|
|
New detector to find suspicious integer to double casts (David
|
|
Hovemeyer, Bill Pugh)
|
|
</li>
|
|
<li>
|
|
New detector to find invalid regular expression patterns (Bill
|
|
Pugh)
|
|
</li>
|
|
<li>
|
|
New detector to find Bloch/Gafter Java puzzlers (Bill Pugh)
|
|
</li>
|
|
|
|
<!-- feature enhancements -->
|
|
<li>
|
|
New system property to suppress reporting of DLS based on local
|
|
variable name (Glenn Boysko)
|
|
</li>
|
|
<li>
|
|
Enhancements to configuration dialog in Eclipse plugin, allow for
|
|
saving enabled detectors in Eclipse projects (Phil Crosby)
|
|
</li>
|
|
<li>
|
|
Sortable columns in detector dialog (Dave Brosius)
|
|
</li>
|
|
<li>
|
|
New tab in gui for showing bugs grouped by category (Dave
|
|
Brosius)
|
|
</li>
|
|
<li>
|
|
Improved German translation of Swing GUI (Thomas Kuehne)
|
|
</li>
|
|
<li>
|
|
Improved source file reporting in Emacs output format (Len Trigg)
|
|
</li>
|
|
<li>
|
|
Improvements to redundant null comparison detector (Bill Pugh)
|
|
</li>
|
|
<li>
|
|
Localization of run analysis and analysis error dialogs in Swing
|
|
GUI (K. Hashimoto)
|
|
</li>
|
|
|
|
<!-- Bug fixes -->
|
|
<li>
|
|
Don't scan equals methods in FindHEMismatch if code is native
|
|
(Greg Bentz)
|
|
</li>
|
|
<li>
|
|
French translation fixes (David Cotton)
|
|
</li>
|
|
<li>
|
|
Internationalization report fixes (K. Hashimoto)
|
|
</li>
|
|
<li>
|
|
Japanese translations updates (SHISEI Hanai)
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 0.8.5:
|
|
|
|
</p>
|
|
<ul>
|
|
<!-- new detectors -->
|
|
<li>
|
|
New detector to find catch blocks that may inadvertently catch
|
|
runtime exceptions (Brian Goetz)
|
|
</li>
|
|
<li>
|
|
New detector to find objects that are instantiated based on
|
|
classes that only have static methods and fields, using the
|
|
synthesized constructor (Dave Brosius)
|
|
</li>
|
|
<li>
|
|
New detector to find calls to Thread.interrupted() in a non
|
|
static context, and especially with non currentThread() threads
|
|
(Dave Brosius)
|
|
</li>
|
|
<li>
|
|
New detector to find calls to equals() methods that use Object's
|
|
version. (Dave Brosius)
|
|
</li>
|
|
<li>
|
|
New detector to find Applets that call methods in the constructor
|
|
refering to the AppletStub (Dave Brosius)
|
|
</li>
|
|
<li>
|
|
New detector to find some cases of infinite recursion (Bill Pugh)
|
|
</li>
|
|
<li>
|
|
New detector to find dead stores to local variables (David
|
|
Hovemeyer, Bill Pugh)
|
|
</li>
|
|
<li>
|
|
Extend Dumb Method detector for toUpperCase(), toLowerCase()
|
|
without a locale, new Integer(1).toString(), new
|
|
XXX().getClass(), and new Thread() without a run implementation
|
|
(Dave Brosius)
|
|
<!-- feature enhancements -->
|
|
</li>
|
|
<li>
|
|
Ant task supports "errorProperty" attribute, which sets an Ant
|
|
property to "true" if an error occurs running FindBugs (Michael
|
|
Tamm)
|
|
</li>
|
|
<li>
|
|
Eclipse plugin allows filtering of warnings by bug category,
|
|
priority (David Hovemeyer)
|
|
</li>
|
|
<li>
|
|
Swing GUI allows filtering of warnings by bug category (David
|
|
Hovemeyer)
|
|
</li>
|
|
<li>
|
|
Ability to annotate methods using Java 1.5 annotations that
|
|
suppress FindBugs warnings (Bill Pugh)
|
|
</li>
|
|
<li>
|
|
New -adjustExperimental for lowering priority of BugPatterns that
|
|
are experimental (Dave Brosius)
|
|
</li>
|
|
<li>
|
|
Allow for command line options 'files' using the @ symbol (David
|
|
Hovemeyer)
|
|
</li>
|
|
<li>
|
|
New -adjustPriority command line option to for adjusting bug
|
|
priorites (David Hovemeyer)
|
|
</li>
|
|
<li>
|
|
Added an Edit menu (cut/copy/paste) to Swing GUI (Dave Brosius)
|
|
</li>
|
|
<li>
|
|
French translation supplied (David Cotton)
|
|
<!-- Bug fixes -->
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 0.8.4:
|
|
|
|
</p>
|
|
<ul>
|
|
<!-- new detectors -->
|
|
<li>
|
|
New detector for volatile references to arrays (Bill Pugh)
|
|
</li>
|
|
<li>
|
|
New detector to find instanceof usage where inheritance can be
|
|
determined statically (Dave Brosius)
|
|
</li>
|
|
<li>
|
|
New detector to find ResultSet.getXXX updateXXX calls using index
|
|
0 (Dave Brosius)
|
|
</li>
|
|
<li>
|
|
New detector to find empty zip or jar entries (Bill Pugh)
|
|
|
|
<!-- feature enhancements -->
|
|
</li>
|
|
<li>
|
|
HTML output generation using built-in XSLT stylesheet or
|
|
user-defined stylesheet (David Hovemeyer)
|
|
</li>
|
|
<li>
|
|
Allow URLs to be specified to analyze zip/jar files, local
|
|
directories, and single classfiles (David Hovemeyer)
|
|
</li>
|
|
<li>
|
|
New command line option -onlyAnalyze restricts analysis to
|
|
selected classes and packages without reducing accuracy (David
|
|
Hovemeyer)
|
|
</li>
|
|
<li>
|
|
Allow Swing GUI to show source code in jar files on Windows
|
|
systems (Dave Brosius)
|
|
|
|
<!-- Bug fixes -->
|
|
</li>
|
|
<li>
|
|
Fix the Switch Fall Thru detector (Dave Brosius, David Hovemeyer,
|
|
Bill Pugh)
|
|
</li>
|
|
<li>
|
|
MacOS GUI fixes (Rohan Lloyd)
|
|
</li>
|
|
<li>
|
|
Fix false positive in BOA in case where method is correctly and
|
|
'incorrectly' overridden (Dave Brosius)
|
|
</li>
|
|
<li>
|
|
Fixed memory blowup when analyzing methods which access a large
|
|
number of fields (David Hovemeyer)
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 0.8.3:
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
Initial and preliminary localization of the Swing GUI.
|
|
Translations by:
|
|
<ul>
|
|
<li>
|
|
German - Peter D. Stout, Holger Stenzhorn
|
|
</li>
|
|
<li>
|
|
Finnish - Juha Knuutila
|
|
</li>
|
|
<li>
|
|
Estonian - Tanel Lebedev
|
|
</li>
|
|
<li>
|
|
Japanese - Hanai Shisei
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
Eliminated debug print statements inadvertently left enabled
|
|
</li>
|
|
<li>
|
|
Reverted some changes in the open stream detector: this should
|
|
fix some false positives that were introduced in the previous
|
|
release
|
|
</li>
|
|
<li>
|
|
Fixed a couple missing class reports
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 0.8.2:
|
|
</p>
|
|
<ul>
|
|
|
|
<!-- New detectors -->
|
|
<li>
|
|
New detector to find improperly overridden GUI Adapter classes
|
|
(Dave Brosius)
|
|
</li>
|
|
<li>
|
|
New detector to find improperly setup JUnit TestCases (Dave
|
|
Brosius)
|
|
</li>
|
|
<li>
|
|
New detector to find variables that mask class level fields (Dave
|
|
Brosius)
|
|
</li>
|
|
<li>
|
|
New detector to find comparisons of values computed with bitwise
|
|
operators that always yield the same result (Tom Truscott)
|
|
</li>
|
|
<li>
|
|
New detector to find unsafe getClass().getResource() calls (Bill
|
|
Pugh)
|
|
</li>
|
|
<li>
|
|
New detector to find GUI changes not in GUI thread but in static
|
|
main (Bill Pugh)
|
|
</li>
|
|
<li>
|
|
New detector to find calls to Collection.toArray() with
|
|
zero-length array argument; it is more efficient to pass an array
|
|
the size of the collection, which can be populated and returned
|
|
as the result (Dave Brosius)
|
|
|
|
<!-- Analysis improvements -->
|
|
</li>
|
|
<li>
|
|
Better suppression of false warnings in various detectors (Bill
|
|
Pugh, David Hovemeyer)
|
|
</li>
|
|
<li>
|
|
Enhancement to ReadReturnShouldBeChecked detector for skip()
|
|
(Dave Brosius)
|
|
</li>
|
|
<li>
|
|
Enhancement to DumbMethods detector (Dave Brosius)
|
|
</li>
|
|
<li>
|
|
Open stream detector does not report wrappers of streams passed
|
|
as method parameters (David Hovemeyer)
|
|
|
|
<!-- Feature enhancements -->
|
|
</li>
|
|
<li>
|
|
Cancel confirmation dialog in Swing GUI (Pete Angstadt)
|
|
</li>
|
|
<li>
|
|
Better relative path saving in Project file (Dave Brosius)
|
|
</li>
|
|
<li>
|
|
Detector Priority in GUI is now saved in prefs file (Dave
|
|
Brosius)
|
|
</li>
|
|
<li>
|
|
Controls in GUI to reorder source and classpath entries, and
|
|
ability to flip between Project details and bugs pages (Dave
|
|
Brosius)
|
|
</li>
|
|
<li>
|
|
In Swing GUI, analysis error dialog supports "Select All" and
|
|
"Copy" operations for easy generation of error reports (Dave
|
|
Brosius)
|
|
</li>
|
|
<li>
|
|
Complete translation of bug descriptions and messages into
|
|
Japanese (Hanai Shisei)
|
|
|
|
<!-- Bug fixes -->
|
|
</li>
|
|
<li>
|
|
Fixed bug in DroppedException detector (Dave Brosius)
|
|
|
|
<!-- Development stuff -->
|
|
</li>
|
|
<li>
|
|
The source distribution defaults to using JDK 1.5 javac to
|
|
compile, but support for compiling with JSR-14 prototype is still
|
|
supported
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 0.8.1:
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
Fixed a critical ClassCastException bug (triggered if the
|
|
-workHard option was used, and an exception type was merged with
|
|
an array type during type inference)
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 0.8.0:
|
|
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
Disabled SwitchFallthrough detector to work around
|
|
NullPointerExceptions
|
|
</li>
|
|
<li>
|
|
Added some additional false positive suppression heuristics
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Also, two contributors to the 0.8.0 release were inadvertently
|
|
left out of the credits:
|
|
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
Pete Angstadt fixed several problems in the Swing GUI
|
|
</li>
|
|
<li>
|
|
Francis Lalonde provided a task resource file for the FindBugs
|
|
Ant task
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 0.7.4:
|
|
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
New detector to look for uses of "+" operator to concatenate
|
|
String objects in a loop (Dave Brosius)
|
|
</li>
|
|
<li>
|
|
Reference comparison detector looks for places where the argument
|
|
passed to the equals(Object) method isn't the same type as the
|
|
receiver object
|
|
</li>
|
|
<li>
|
|
Better suppression of false warnings in many detectors
|
|
</li>
|
|
<li>
|
|
Many improvements to Eclipse plugin (Andrey Loskutov, Peter
|
|
Friese)
|
|
</li>
|
|
<li>
|
|
Fixed problem with building Eclipse plugin on Windows (Thomas
|
|
Klaeger)
|
|
</li>
|
|
<li>
|
|
Open stream detector looks for unclosed PreparedStatement objects
|
|
(Thomas Klaeger, Rohan Lloyd)
|
|
</li>
|
|
<li>
|
|
Fix for open stream detector: it wasn't detecting close() methods
|
|
called through an invokeinterface instruction (Thomas Klaeger)
|
|
</li>
|
|
<li>
|
|
Refactoring of visitor classes to enforce use of accessors for
|
|
visited class features (Brian Goetz)
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 0.7.3:
|
|
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
Experimental modification of open stream detector to look for
|
|
non-escaping JDBC resources (connections and statements) that
|
|
aren't closed on all paths out of method
|
|
</li>
|
|
<li>
|
|
Eclipse plugin fixed so it compiles and runs on Eclipse 2.1.x
|
|
(Peter Friese)
|
|
</li>
|
|
<li>
|
|
Option to Swing GUI and command line to generate project file
|
|
using relative paths for archives, source directories, and aux
|
|
classpath entries (Dave Brosius)
|
|
</li>
|
|
<li>
|
|
Improvements to findbugs.bat script for launching FindBugs on
|
|
Windows (Dave Brosius)
|
|
</li>
|
|
<li>
|
|
Updated Japanese message translations (Hiroshi Okugawa)
|
|
</li>
|
|
<li>
|
|
Uncalled private methods are now reported as low priority, unless
|
|
they have the same name as another method in the class (which is
|
|
more likely to indicate an actual bug)
|
|
</li>
|
|
<li>
|
|
Added some missing data in the bug messages XML files
|
|
</li>
|
|
<li>
|
|
Fixed some problems building from source on Windows systems
|
|
</li>
|
|
<li>
|
|
Various minor bug fixes
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 0.7.2:
|
|
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
Enhanced Eclipse plugin, which displays the detailed bug
|
|
description in a view (Phil Crosby)
|
|
</li>
|
|
<li>
|
|
Various tweaks to existing detectors to reduce false warnings
|
|
</li>
|
|
<li>
|
|
New command line option
|
|
<code>
|
|
-workHard
|
|
</code>
|
|
enables pruning of infeasible or unlikely exception edges, which
|
|
results in better accuracy in the open stream detector, at the
|
|
expense of a 30%-100% slowdown
|
|
</li>
|
|
<li>
|
|
New website and HTML documentation design
|
|
</li>
|
|
<li>
|
|
Documentation includes an HTML document with descriptions of all
|
|
bug patterns reported by FindBugs
|
|
</li>
|
|
<li>
|
|
Web page has a link to a
|
|
<a href="http://www.simeji.com/findbugs/doc/manual_ja/index.html">Japanese
|
|
translation</a> of the FindBugs manual, contributed by Hiroshi
|
|
Okugawa
|
|
</li>
|
|
<li>
|
|
Changed the Inconsistent Synchronization detector so that fields
|
|
synchronized 50% of the time (or more) are reported as medium
|
|
priority bugs (previously they were reported as low)
|
|
</li>
|
|
<li>
|
|
New detector to find code that catches
|
|
IllegalMonitorStateException
|
|
</li>
|
|
<li>
|
|
New detector to find private methods that are never called
|
|
</li>
|
|
<li>
|
|
New detector to find suspicious uses of non-short-circuiting
|
|
boolean operators (
|
|
<code>
|
|
&
|
|
</code>
|
|
and
|
|
<code>
|
|
|
|
|
</code>
|
|
, rather than
|
|
<code>
|
|
&&
|
|
</code>
|
|
and
|
|
<code>
|
|
||
|
|
</code>
|
|
)
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 0.7.1:
|
|
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
Incorporated patched version of BCEL, which allows classes
|
|
compiled with JDK 1.5.0 beta to be analyzed
|
|
</li>
|
|
<li>
|
|
Fixed some bugs related to lookups of array classes
|
|
</li>
|
|
<li>
|
|
Fixed bug that prevented GUI from loading XML result files when
|
|
running under JDK 1.5.0 beta
|
|
</li>
|
|
<li>
|
|
Added new experimental bug detector, LazyInit, which looks for
|
|
potentially buggy lazy initializations of static fields
|
|
</li>
|
|
<li>
|
|
Because of long filenames, switched to distributing the source
|
|
archive as a zip file rather than a tar file
|
|
</li>
|
|
<li>
|
|
The 0.7.1 source tarfile was botched - 0.7.2 has a valid source
|
|
archive
|
|
</li>
|
|
<li>
|
|
Fixed some problems in the Ant build script
|
|
</li>
|
|
<li>
|
|
Fixed NullPointerException when checking Class-Path attribute for
|
|
Jar files without manifests
|
|
</li>
|
|
<li>
|
|
Generate version numbers for the core and UI Eclipse plugins
|
|
using the Version class; all version numbers are now in a common
|
|
location
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 0.7.0:
|
|
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
Eclipse plugin (contributed by Peter Friese)
|
|
</li>
|
|
<li>
|
|
Source package structure rearranged: all source (other than
|
|
Eclipse plugin UI) is in the edu.umd.cs.findbugs package, or a
|
|
subpackage
|
|
</li>
|
|
<li>
|
|
Class-Path attributes of manifests of analyzed jar files are used
|
|
to set the aux classpath automatically (Peter D. Stout)
|
|
</li>
|
|
<li>
|
|
GUI starts in directory specified by user.home property (Peter D.
|
|
Stout)
|
|
</li>
|
|
<li>
|
|
Added -project option to GUI (Mikko T.)
|
|
</li>
|
|
<li>
|
|
Added -look:{plastic,gtk,native} option to GUI, for setting look
|
|
and feel (Mikko T.)
|
|
</li>
|
|
<li>
|
|
Fixed DataflowAnalysisException in inconsistent synchronization
|
|
detector
|
|
</li>
|
|
<li>
|
|
Ant task supports failOnError parameter (Rohan Lloyd)
|
|
</li>
|
|
<li>
|
|
Serializable class warnings are downgraded to low priority for
|
|
GUI classes
|
|
</li>
|
|
<li>
|
|
MWN detector will only report calls to wait(), notify(), and
|
|
notifyAll() methods that have the correct signature
|
|
</li>
|
|
<li>
|
|
FindBugs works with latest CVS version of BCEL
|
|
</li>
|
|
<li>
|
|
Zip and Jar files may be added to the source path
|
|
</li>
|
|
<li>
|
|
The GUI will automatically find source files residing in analyzed
|
|
Zip or Jar files
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Note that the version number jumped from 0.6.6 to 0.6.9; there
|
|
were no 0.6.7 or 0.6.8 releases.
|
|
|
|
</p>
|
|
<p>
|
|
Changes since version 0.6.9:
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
Added -conserveSpace option to reduce memory use at the expense
|
|
of analysis precision
|
|
</li>
|
|
<li>
|
|
Bug fixes in findbugs.bat script: JAVA_HOME handling,
|
|
autodetection of FINDBUGS_HOME, missing output with -textui
|
|
</li>
|
|
<li>
|
|
Fixed NullPointerException when a missing class is encountered
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 0.6.6:
|
|
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
The null pointer dereference detector is more powerful
|
|
</li>
|
|
<li>
|
|
Significantly improved heuristics and bug fixes in inconsistent
|
|
synchronization detector
|
|
</li>
|
|
<li>
|
|
Improved heuristics in open stream and dropped exception
|
|
detectors; fewer false positives should be reported
|
|
</li>
|
|
<li>
|
|
Save HTML summary in XML results files, rather than recomputing;
|
|
this makes loading results in GUI much faster
|
|
</li>
|
|
<li>
|
|
Report at most one String comparison using == or != per method
|
|
</li>
|
|
<li>
|
|
The findbugs.bat script on Windows autodetects FINDBUGS_HOME, and
|
|
doesn't open a DOS window when launching the GUI (contributed by
|
|
TJSB)
|
|
</li>
|
|
<li>
|
|
Emacs reporting format (contributed by David Li)
|
|
</li>
|
|
<li>
|
|
Various bug fixes
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since 0.6.5:
|
|
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
Rewritten inconsistent synchronization detector; accuracy is
|
|
significantly improved, and bug reports are prioritized
|
|
</li>
|
|
<li>
|
|
New detector to find self assignment (x=x) of local variables
|
|
(suggested by Jeff Martin)
|
|
</li>
|
|
<li>
|
|
New detector to find calls to wait(), notify(), and notifyAll()
|
|
on an object which is not obviously locked
|
|
</li>
|
|
<li>
|
|
Open stream detector now reports Readers and Writers
|
|
</li>
|
|
<li>
|
|
Fixed bug in finalizer idioms detector which caused spurious
|
|
warnings about failure to call super.finalize() (reported by Jim
|
|
Menard)
|
|
</li>
|
|
<li>
|
|
Fixed bug where output stream was not closed using non-XML output
|
|
(reported by Sigiswald Madou)
|
|
</li>
|
|
<li>
|
|
Fixed corrupted HTML bug detail message (reported by Trevor
|
|
Harmon)
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 0.6.4:
|
|
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
For redundant comparison of reference values, fixed false
|
|
positives resulting from duplication of code in finally blocks
|
|
</li>
|
|
<li>
|
|
Fixed false positives resulting from wrapped byte array streams
|
|
left open
|
|
</li>
|
|
<li>
|
|
Fixed bug in Ant task preventing output file from working
|
|
properly if a relative path was used
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 0.6.3:
|
|
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
Fixed bug in Ant task where output would be corrupted, and added
|
|
a
|
|
<code>
|
|
timeout
|
|
</code>
|
|
attribute
|
|
</li>
|
|
<li>
|
|
Added -outputFile option to text UI, for explicitly specifying an
|
|
output file
|
|
</li>
|
|
<li>
|
|
GUI has a summary window, for statistics about overall bug
|
|
densities (contributed by Mike Fagan)
|
|
</li>
|
|
<li>
|
|
Find redundant comparisons of reference values
|
|
</li>
|
|
<li>
|
|
More accurate detection of Strings compared with == and !=
|
|
operators
|
|
</li>
|
|
<li>
|
|
Detection of other reference types which should generally not be
|
|
compared with == and != operators; Boolean, Integer, etc.
|
|
</li>
|
|
<li>
|
|
Find non-transient non-serializable instance fields in
|
|
Serializable classes
|
|
</li>
|
|
<li>
|
|
Source code may be compiled with latest early access
|
|
generics-enabled javac (version 2.2)
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 0.6.2:
|
|
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
GUI supports filtering bugs by priority
|
|
</li>
|
|
<li>
|
|
Ant task rewritten; supports all functionality offered by Text UI
|
|
(contributed by Mike Fagan)
|
|
</li>
|
|
<li>
|
|
Ant task is fully documented in the manual
|
|
</li>
|
|
<li>
|
|
Classes in nested archives are analyzed; this allows full support
|
|
for analyzing .ear and .war files (contributed by Mike Fagan)
|
|
</li>
|
|
<li>
|
|
DepthFirstSearch changed to use non-recursive implementation;
|
|
this should fix the StackOverflowErrors that several users
|
|
reported
|
|
</li>
|
|
<li>
|
|
Various minor bugfixes and improvements
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 0.6.1:
|
|
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
New detector to look for useless control flow (suggested by
|
|
Richard P. King and Mike Fagan)
|
|
</li>
|
|
<li>
|
|
Look for places where return value of
|
|
java.io.File.createNewFile() is ignored (suggested by Richard P.
|
|
King)
|
|
</li>
|
|
<li>
|
|
Fixed bug in resolution of source files (only the first source
|
|
directory was searched)
|
|
</li>
|
|
<li>
|
|
Fixed a NullPointerException in the bytecode pattern matching
|
|
code
|
|
</li>
|
|
<li>
|
|
Ant task supports project files (contributed by Mike Fagan)
|
|
</li>
|
|
<li>
|
|
Unix findbugs script honors the
|
|
<code>
|
|
JAVA_HOME
|
|
</code>
|
|
environment variable (contributed by Pedro Morais)
|
|
</li>
|
|
<li>
|
|
Allow .war and .ear files to be analyzed
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 0.6.0:
|
|
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
New bug pattern detector which looks for places where a null
|
|
pointer might be dereferenced
|
|
</li>
|
|
<li>
|
|
New bug pattern detector which looks for IO streams that are
|
|
opened, do not escape the method, and are not closed on all paths
|
|
out of the method
|
|
</li>
|
|
<li>
|
|
New bug pattern detector to find methods that can return null
|
|
instead of a zero-length array
|
|
</li>
|
|
<li>
|
|
New bug pattern detector to find places where the == or !=
|
|
operators are used to compare String objects
|
|
</li>
|
|
<li>
|
|
Command line interface can save bugs as XML
|
|
</li>
|
|
<li>
|
|
GUI can save bugs to and load bugs from XML
|
|
</li>
|
|
<li>
|
|
An "Annotations" window in the GUI allows the user to add textual
|
|
annotations to bug reports; these annotations are preserved when
|
|
bugs are saved as XML
|
|
</li>
|
|
<li>
|
|
In this release, the Japanese bug summary translations by Germano
|
|
Leichsenring are really included (they were inadvertently omitted
|
|
in the previous release)
|
|
</li>
|
|
<li>
|
|
Completely rewrote the control flow graph builder, hopefully for
|
|
the last time
|
|
</li>
|
|
<li>
|
|
Simplified implementation of control flow graphs, which should
|
|
reduce memory use and possibly improve performance
|
|
</li>
|
|
<li>
|
|
Improvements to command line interface (list bug priorities,
|
|
filter by priority, specify aux classpath, specify project to
|
|
analyze)
|
|
</li>
|
|
<li>
|
|
Various bug fixes and enhancements
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 0.5.4
|
|
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
Added an
|
|
<a href="http://ant.apache.org/">Ant</a> task for FindBugs,
|
|
contributed by Mike Fagan.
|
|
</li>
|
|
<li>
|
|
Added a GUI dialog which allows individual bug pattern detectors
|
|
to be enabled or disabled. Disabling certain slow detectors
|
|
can greatly speed up analysis of large programs, at the expense
|
|
of reducing the number of potential bugs found.
|
|
</li>
|
|
<li>
|
|
Added a new detector for finding improperly ignored return values
|
|
for methods such as
|
|
<code>
|
|
String.trim()
|
|
</code>
|
|
. Suggested by Andreas Mandel.
|
|
</li>
|
|
<li>
|
|
Japanese translations of the bug summaries, contributed by
|
|
Germano Leichsenring.
|
|
</li>
|
|
<li>
|
|
Filtering of results is supported in command line interface. See
|
|
the
|
|
<a href="manual/index.html">FindBugs manual</a> for details.
|
|
</li>
|
|
<li>
|
|
Added "byte code patterns", a general pattern matching
|
|
infrastructure for bytecode instructions. This feature
|
|
significantly reduces the complexity of implementing new bug
|
|
pattern detectors.
|
|
</li>
|
|
<li>
|
|
Enabled a new general dataflow analysis to track values in
|
|
methods.
|
|
</li>
|
|
<li>
|
|
Switched to new control-flow graph builder implementation.
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 0.5.3
|
|
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
Fixed a bug in the script used to launch FindBugs on Windows
|
|
platforms.
|
|
</li>
|
|
<li>
|
|
Fixed crashes when analyzing class files without source line
|
|
information.
|
|
</li>
|
|
<li>
|
|
All major errors are reported using an error dialog; file not
|
|
found errors are more informative.
|
|
</li>
|
|
<li>
|
|
Minor GUI improvements.
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 0.5.2
|
|
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
All of the source code and related files are in a single
|
|
directory tree.
|
|
</li>
|
|
<li>
|
|
Updated some of the detectors to produce source line information.
|
|
</li>
|
|
<li>
|
|
<a href="http://ant.apache.org/">Ant</a> build script and several
|
|
GUI enhancements and fixes contributed by Mike Fagan.
|
|
</li>
|
|
<li>
|
|
Converted to use a
|
|
<a href="AddingDetectors.txt">plugin architecture</a> for loading
|
|
bug detectors.
|
|
</li>
|
|
<li>
|
|
Eliminated generics-related compiler warnings.
|
|
</li>
|
|
<li>
|
|
More complete documentation has been added.
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 0.5.1:
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
Fixed a large number of bugs in the BCEL Repository and
|
|
FindBugs's use of the Repository. With these changes,
|
|
FindBugs should
|
|
<em>never</em> crash or otherwise misbehave because of Repository
|
|
lookup failures. Because of these changes, you must use a
|
|
modified version of
|
|
<code>
|
|
bcel.jar
|
|
</code>
|
|
with FindBugs. This jar file is included in the FindBugs
|
|
0.5.2 binary release. A complete patch containing the
|
|
<a
|
|
href="http://faculty.ycp.edu/~dhovemey/bcel-30-April-2003.patch">modifications
|
|
against the BCEL CVS main branch as of April 30, 2003</a> is also
|
|
available.
|
|
</li>
|
|
<li>
|
|
Implemented the "auxiliary classpath entry list". Aux
|
|
classpath entries can be added to a project to provide classes
|
|
that are referenced by the analyzed application, but should not
|
|
themselves be analyzed. Having all referenced classes
|
|
available allows FindBugs to produce more accurate results.
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
Changes since version 0.5.0:
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
Many user interface bugs have been fixed.
|
|
</li>
|
|
<li>
|
|
Upgraded to a recent CVS version of BCEL, with some bug
|
|
fixes. This should prevent FindBugs from crashing when
|
|
there is a failure to find a class on the classpath.
|
|
</li>
|
|
<li>
|
|
Added support for Plastic look and feel from
|
|
<a href="http://www.jgoodies.com/">jgoodies.com</a>.
|
|
</li>
|
|
<li>
|
|
Major overhaul of infrastructure for doing dataflow analysis.
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
<hr> <p>
|
|
<script language="JavaScript" type="text/javascript">
|
|
<!---//hide script from old browsers
|
|
document.write( "Last updated "+ document.lastModified + "." );
|
|
//end hiding contents --->
|
|
</script>
|
|
<p> Send comments to <a class="sidebar" href="mailto:findbugs@cs.umd.edu">findbugs@cs.umd.edu</a>
|
|
<p>
|
|
<A href="http://sourceforge.net"><IMG src="http://sourceforge.net/sflogo.php?group_id=96405&type=5" width="210" height="62" border="0" alt="SourceForge.net Logo" /></A>
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
</table>
|
|
|
|
</body>
|
|
|
|
</html>
|