Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(538)

Side by Side Diff: doc/allBugDescriptions.html

Issue 139673002: Updating Findbugs from 2.0.1 to 2.0.3 (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/findbugs.git@master
Patch Set: bulach's nits Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « doc/FAQ.html ('k') | doc/bugDescriptions.html » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.or g/TR/html4/loose.dtd">
1 <html><head><title>FindBugs Bug Descriptions (Unabridged)</title> 2 <html><head><title>FindBugs Bug Descriptions (Unabridged)</title>
2 <link rel="stylesheet" type="text/css" href="findbugs.css"/> 3 <link rel="stylesheet" type="text/css" href="findbugs.css"/>
3 <link rel="shortcut icon" href="favicon.ico" type="image/x-icon"/> 4 <link rel="shortcut icon" href="favicon.ico" type="image/x-icon"/>
4 </head><body> 5 </head><body>
5 6
6 <table width="100%"><tr> 7 <table width="100%"><tr>
7 8
8 <td bgcolor="#b9b9fe" valign="top" align="left" width="20%"> 9 <td bgcolor="#b9b9fe" valign="top" align="left" width="20%">
9 <table width="100%" cellspacing="0" border="0"> 10 <table width="100%" cellspacing="0" border="0">
10 <tr><td><a class="sidebar" href="index.html"><img src="umdFindbugs.png" alt="Fin dBugs"></a></td></tr> 11 <tr><td><a class="sidebar" href="index.html"><img src="umdFindbugs.png" alt="Fin dBugs"></a></td></tr>
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 <tr bgcolor="#ffffff"><td><a href="#SE_INNER_CLASS">Se: Serializable inner class </a></td><td>Bad practice</td></tr> 136 <tr bgcolor="#ffffff"><td><a href="#SE_INNER_CLASS">Se: Serializable inner class </a></td><td>Bad practice</td></tr>
136 <tr bgcolor="#eeeeee"><td><a href="#SE_NONFINAL_SERIALVERSIONID">Se: serialVersi onUID isn't final</a></td><td>Bad practice</td></tr> 137 <tr bgcolor="#eeeeee"><td><a href="#SE_NONFINAL_SERIALVERSIONID">Se: serialVersi onUID isn't final</a></td><td>Bad practice</td></tr>
137 <tr bgcolor="#ffffff"><td><a href="#SE_NONLONG_SERIALVERSIONID">Se: serialVersio nUID isn't long</a></td><td>Bad practice</td></tr> 138 <tr bgcolor="#ffffff"><td><a href="#SE_NONLONG_SERIALVERSIONID">Se: serialVersio nUID isn't long</a></td><td>Bad practice</td></tr>
138 <tr bgcolor="#eeeeee"><td><a href="#SE_NONSTATIC_SERIALVERSIONID">Se: serialVers ionUID isn't static</a></td><td>Bad practice</td></tr> 139 <tr bgcolor="#eeeeee"><td><a href="#SE_NONSTATIC_SERIALVERSIONID">Se: serialVers ionUID isn't static</a></td><td>Bad practice</td></tr>
139 <tr bgcolor="#ffffff"><td><a href="#SE_NO_SUITABLE_CONSTRUCTOR">Se: Class is Ser ializable but its superclass doesn't define a void constructor</a></td><td>Bad p ractice</td></tr> 140 <tr bgcolor="#ffffff"><td><a href="#SE_NO_SUITABLE_CONSTRUCTOR">Se: Class is Ser ializable but its superclass doesn't define a void constructor</a></td><td>Bad p ractice</td></tr>
140 <tr bgcolor="#eeeeee"><td><a href="#SE_NO_SUITABLE_CONSTRUCTOR_FOR_EXTERNALIZATI ON">Se: Class is Externalizable but doesn't define a void constructor</a></td><t d>Bad practice</td></tr> 141 <tr bgcolor="#eeeeee"><td><a href="#SE_NO_SUITABLE_CONSTRUCTOR_FOR_EXTERNALIZATI ON">Se: Class is Externalizable but doesn't define a void constructor</a></td><t d>Bad practice</td></tr>
141 <tr bgcolor="#ffffff"><td><a href="#SE_READ_RESOLVE_MUST_RETURN_OBJECT">Se: The readResolve method must be declared with a return type of Object. </a></td><td>B ad practice</td></tr> 142 <tr bgcolor="#ffffff"><td><a href="#SE_READ_RESOLVE_MUST_RETURN_OBJECT">Se: The readResolve method must be declared with a return type of Object. </a></td><td>B ad practice</td></tr>
142 <tr bgcolor="#eeeeee"><td><a href="#SE_TRANSIENT_FIELD_NOT_RESTORED">Se: Transie nt field that isn't set by deserialization. </a></td><td>Bad practice</td></tr> 143 <tr bgcolor="#eeeeee"><td><a href="#SE_TRANSIENT_FIELD_NOT_RESTORED">Se: Transie nt field that isn't set by deserialization. </a></td><td>Bad practice</td></tr>
143 <tr bgcolor="#ffffff"><td><a href="#SE_NO_SERIALVERSIONID">SnVI: Class is Serial izable, but doesn't define serialVersionUID</a></td><td>Bad practice</td></tr> 144 <tr bgcolor="#ffffff"><td><a href="#SE_NO_SERIALVERSIONID">SnVI: Class is Serial izable, but doesn't define serialVersionUID</a></td><td>Bad practice</td></tr>
144 <tr bgcolor="#eeeeee"><td><a href="#UI_INHERITANCE_UNSAFE_GETRESOURCE">UI: Usage of GetResource may be unsafe if class is extended</a></td><td>Bad practice</td> </tr> 145 <tr bgcolor="#eeeeee"><td><a href="#UI_INHERITANCE_UNSAFE_GETRESOURCE">UI: Usage of GetResource may be unsafe if class is extended</a></td><td>Bad practice</td> </tr>
145 <tr bgcolor="#ffffff"><td><a href="#BC_IMPOSSIBLE_CAST">BC: Impossible cast</a>< /td><td>Correctness</td></tr> 146 <tr bgcolor="#ffffff"><td><a href="#BAC_BAD_APPLET_CONSTRUCTOR">BAC: Bad Applet Constructor relies on uninitialized AppletStub</a></td><td>Correctness</td></tr>
146 <tr bgcolor="#eeeeee"><td><a href="#BC_IMPOSSIBLE_DOWNCAST">BC: Impossible downc ast</a></td><td>Correctness</td></tr> 147 <tr bgcolor="#eeeeee"><td><a href="#BC_IMPOSSIBLE_CAST">BC: Impossible cast</a>< /td><td>Correctness</td></tr>
147 <tr bgcolor="#ffffff"><td><a href="#BC_IMPOSSIBLE_DOWNCAST_OF_TOARRAY">BC: Impos sible downcast of toArray() result</a></td><td>Correctness</td></tr> 148 <tr bgcolor="#ffffff"><td><a href="#BC_IMPOSSIBLE_DOWNCAST">BC: Impossible downc ast</a></td><td>Correctness</td></tr>
148 <tr bgcolor="#eeeeee"><td><a href="#BC_IMPOSSIBLE_INSTANCEOF">BC: instanceof wil l always return false</a></td><td>Correctness</td></tr> 149 <tr bgcolor="#eeeeee"><td><a href="#BC_IMPOSSIBLE_DOWNCAST_OF_TOARRAY">BC: Impos sible downcast of toArray() result</a></td><td>Correctness</td></tr>
149 <tr bgcolor="#ffffff"><td><a href="#BIT_ADD_OF_SIGNED_BYTE">BIT: Bitwise add of signed byte value</a></td><td>Correctness</td></tr> 150 <tr bgcolor="#ffffff"><td><a href="#BC_IMPOSSIBLE_INSTANCEOF">BC: instanceof wil l always return false</a></td><td>Correctness</td></tr>
150 <tr bgcolor="#eeeeee"><td><a href="#BIT_AND">BIT: Incompatible bit masks</a></td ><td>Correctness</td></tr> 151 <tr bgcolor="#eeeeee"><td><a href="#BIT_ADD_OF_SIGNED_BYTE">BIT: Bitwise add of signed byte value</a></td><td>Correctness</td></tr>
151 <tr bgcolor="#ffffff"><td><a href="#BIT_AND_ZZ">BIT: Check to see if ((...) & 0) == 0</a></td><td>Correctness</td></tr> 152 <tr bgcolor="#ffffff"><td><a href="#BIT_AND">BIT: Incompatible bit masks</a></td ><td>Correctness</td></tr>
152 <tr bgcolor="#eeeeee"><td><a href="#BIT_IOR">BIT: Incompatible bit masks</a></td ><td>Correctness</td></tr> 153 <tr bgcolor="#eeeeee"><td><a href="#BIT_AND_ZZ">BIT: Check to see if ((...) & 0) == 0</a></td><td>Correctness</td></tr>
153 <tr bgcolor="#ffffff"><td><a href="#BIT_IOR_OF_SIGNED_BYTE">BIT: Bitwise OR of s igned byte value</a></td><td>Correctness</td></tr> 154 <tr bgcolor="#ffffff"><td><a href="#BIT_IOR">BIT: Incompatible bit masks</a></td ><td>Correctness</td></tr>
154 <tr bgcolor="#eeeeee"><td><a href="#BIT_SIGNED_CHECK_HIGH_BIT">BIT: Check for si gn of bitwise operation</a></td><td>Correctness</td></tr> 155 <tr bgcolor="#eeeeee"><td><a href="#BIT_IOR_OF_SIGNED_BYTE">BIT: Bitwise OR of s igned byte value</a></td><td>Correctness</td></tr>
155 <tr bgcolor="#ffffff"><td><a href="#BOA_BADLY_OVERRIDDEN_ADAPTER">BOA: Class ove rrides a method implemented in super class Adapter wrongly</a></td><td>Correctne ss</td></tr> 156 <tr bgcolor="#ffffff"><td><a href="#BIT_SIGNED_CHECK_HIGH_BIT">BIT: Check for si gn of bitwise operation</a></td><td>Correctness</td></tr>
156 <tr bgcolor="#eeeeee"><td><a href="#ICAST_BAD_SHIFT_AMOUNT">BSHIFT: 32 bit int s hifted by an amount not in the range 0..31</a></td><td>Correctness</td></tr> 157 <tr bgcolor="#eeeeee"><td><a href="#BOA_BADLY_OVERRIDDEN_ADAPTER">BOA: Class ove rrides a method implemented in super class Adapter wrongly</a></td><td>Correctne ss</td></tr>
157 <tr bgcolor="#ffffff"><td><a href="#BX_UNBOXED_AND_COERCED_FOR_TERNARY_OPERATOR" >Bx: Primitive value is unboxed and coerced for ternary operator</a></td><td>Cor rectness</td></tr> 158 <tr bgcolor="#ffffff"><td><a href="#ICAST_BAD_SHIFT_AMOUNT">BSHIFT: 32 bit int s hifted by an amount not in the range -31..31</a></td><td>Correctness</td></tr>
158 <tr bgcolor="#eeeeee"><td><a href="#CO_COMPARETO_RESULTS_MIN_VALUE">Co: compareT o()/compare() returns Integer.MIN_VALUE</a></td><td>Correctness</td></tr> 159 <tr bgcolor="#eeeeee"><td><a href="#BX_UNBOXED_AND_COERCED_FOR_TERNARY_OPERATOR" >Bx: Primitive value is unboxed and coerced for ternary operator</a></td><td>Cor rectness</td></tr>
160 <tr bgcolor="#ffffff"><td><a href="#CO_COMPARETO_RESULTS_MIN_VALUE">Co: compareT o()/compare() returns Integer.MIN_VALUE</a></td><td>Correctness</td></tr>
161 <tr bgcolor="#eeeeee"><td><a href="#DLS_DEAD_LOCAL_INCREMENT_IN_RETURN">DLS: Use less increment in return statement</a></td><td>Correctness</td></tr>
159 <tr bgcolor="#ffffff"><td><a href="#DLS_DEAD_STORE_OF_CLASS_LITERAL">DLS: Dead s tore of class literal</a></td><td>Correctness</td></tr> 162 <tr bgcolor="#ffffff"><td><a href="#DLS_DEAD_STORE_OF_CLASS_LITERAL">DLS: Dead s tore of class literal</a></td><td>Correctness</td></tr>
160 <tr bgcolor="#eeeeee"><td><a href="#DLS_OVERWRITTEN_INCREMENT">DLS: Overwritten increment</a></td><td>Correctness</td></tr> 163 <tr bgcolor="#eeeeee"><td><a href="#DLS_OVERWRITTEN_INCREMENT">DLS: Overwritten increment</a></td><td>Correctness</td></tr>
161 <tr bgcolor="#ffffff"><td><a href="#DMI_ARGUMENTS_WRONG_ORDER">DMI: Reversed met hod arguments</a></td><td>Correctness</td></tr> 164 <tr bgcolor="#ffffff"><td><a href="#DMI_ARGUMENTS_WRONG_ORDER">DMI: Reversed met hod arguments</a></td><td>Correctness</td></tr>
162 <tr bgcolor="#eeeeee"><td><a href="#DMI_BAD_MONTH">DMI: Bad constant value for m onth</a></td><td>Correctness</td></tr> 165 <tr bgcolor="#eeeeee"><td><a href="#DMI_BAD_MONTH">DMI: Bad constant value for m onth</a></td><td>Correctness</td></tr>
163 <tr bgcolor="#ffffff"><td><a href="#DMI_BIGDECIMAL_CONSTRUCTED_FROM_DOUBLE">DMI: BigDecimal constructed from double that isn't represented precisely</a></td><td >Correctness</td></tr> 166 <tr bgcolor="#ffffff"><td><a href="#DMI_BIGDECIMAL_CONSTRUCTED_FROM_DOUBLE">DMI: BigDecimal constructed from double that isn't represented precisely</a></td><td >Correctness</td></tr>
164 <tr bgcolor="#eeeeee"><td><a href="#DMI_CALLING_NEXT_FROM_HASNEXT">DMI: hasNext method invokes next</a></td><td>Correctness</td></tr> 167 <tr bgcolor="#eeeeee"><td><a href="#DMI_CALLING_NEXT_FROM_HASNEXT">DMI: hasNext method invokes next</a></td><td>Correctness</td></tr>
165 <tr bgcolor="#ffffff"><td><a href="#DMI_COLLECTIONS_SHOULD_NOT_CONTAIN_THEMSELVE S">DMI: Collections should not contain themselves</a></td><td>Correctness</td></ tr> 168 <tr bgcolor="#ffffff"><td><a href="#DMI_COLLECTIONS_SHOULD_NOT_CONTAIN_THEMSELVE S">DMI: Collections should not contain themselves</a></td><td>Correctness</td></ tr>
166 <tr bgcolor="#eeeeee"><td><a href="#DMI_DOH">DMI: D'oh! A nonsensical method inv ocation</a></td><td>Correctness</td></tr> 169 <tr bgcolor="#eeeeee"><td><a href="#DMI_DOH">DMI: D'oh! A nonsensical method inv ocation</a></td><td>Correctness</td></tr>
167 <tr bgcolor="#ffffff"><td><a href="#DMI_INVOKING_HASHCODE_ON_ARRAY">DMI: Invocat ion of hashCode on an array</a></td><td>Correctness</td></tr> 170 <tr bgcolor="#ffffff"><td><a href="#DMI_INVOKING_HASHCODE_ON_ARRAY">DMI: Invocat ion of hashCode on an array</a></td><td>Correctness</td></tr>
168 <tr bgcolor="#eeeeee"><td><a href="#DMI_LONG_BITS_TO_DOUBLE_INVOKED_ON_INT">DMI: Double.longBitsToDouble invoked on an int</a></td><td>Correctness</td></tr> 171 <tr bgcolor="#eeeeee"><td><a href="#DMI_LONG_BITS_TO_DOUBLE_INVOKED_ON_INT">DMI: Double.longBitsToDouble invoked on an int</a></td><td>Correctness</td></tr>
(...skipping 11 matching lines...) Expand all
180 <tr bgcolor="#eeeeee"><td><a href="#EC_UNRELATED_TYPES">EC: Call to equals() com paring different types</a></td><td>Correctness</td></tr> 183 <tr bgcolor="#eeeeee"><td><a href="#EC_UNRELATED_TYPES">EC: Call to equals() com paring different types</a></td><td>Correctness</td></tr>
181 <tr bgcolor="#ffffff"><td><a href="#EC_UNRELATED_TYPES_USING_POINTER_EQUALITY">E C: Using pointer equality to compare different types</a></td><td>Correctness</td ></tr> 184 <tr bgcolor="#ffffff"><td><a href="#EC_UNRELATED_TYPES_USING_POINTER_EQUALITY">E C: Using pointer equality to compare different types</a></td><td>Correctness</td ></tr>
182 <tr bgcolor="#eeeeee"><td><a href="#EQ_ALWAYS_FALSE">Eq: equals method always re turns false</a></td><td>Correctness</td></tr> 185 <tr bgcolor="#eeeeee"><td><a href="#EQ_ALWAYS_FALSE">Eq: equals method always re turns false</a></td><td>Correctness</td></tr>
183 <tr bgcolor="#ffffff"><td><a href="#EQ_ALWAYS_TRUE">Eq: equals method always ret urns true</a></td><td>Correctness</td></tr> 186 <tr bgcolor="#ffffff"><td><a href="#EQ_ALWAYS_TRUE">Eq: equals method always ret urns true</a></td><td>Correctness</td></tr>
184 <tr bgcolor="#eeeeee"><td><a href="#EQ_COMPARING_CLASS_NAMES">Eq: equals method compares class names rather than class objects</a></td><td>Correctness</td></tr> 187 <tr bgcolor="#eeeeee"><td><a href="#EQ_COMPARING_CLASS_NAMES">Eq: equals method compares class names rather than class objects</a></td><td>Correctness</td></tr>
185 <tr bgcolor="#ffffff"><td><a href="#EQ_DONT_DEFINE_EQUALS_FOR_ENUM">Eq: Covarian t equals() method defined for enum</a></td><td>Correctness</td></tr> 188 <tr bgcolor="#ffffff"><td><a href="#EQ_DONT_DEFINE_EQUALS_FOR_ENUM">Eq: Covarian t equals() method defined for enum</a></td><td>Correctness</td></tr>
186 <tr bgcolor="#eeeeee"><td><a href="#EQ_OTHER_NO_OBJECT">Eq: equals() method defi ned that doesn't override equals(Object)</a></td><td>Correctness</td></tr> 189 <tr bgcolor="#eeeeee"><td><a href="#EQ_OTHER_NO_OBJECT">Eq: equals() method defi ned that doesn't override equals(Object)</a></td><td>Correctness</td></tr>
187 <tr bgcolor="#ffffff"><td><a href="#EQ_OTHER_USE_OBJECT">Eq: equals() method def ined that doesn't override Object.equals(Object)</a></td><td>Correctness</td></t r> 190 <tr bgcolor="#ffffff"><td><a href="#EQ_OTHER_USE_OBJECT">Eq: equals() method def ined that doesn't override Object.equals(Object)</a></td><td>Correctness</td></t r>
188 <tr bgcolor="#eeeeee"><td><a href="#EQ_OVERRIDING_EQUALS_NOT_SYMMETRIC">Eq: equa ls method overrides equals in superclass and may not be symmetric</a></td><td>Co rrectness</td></tr> 191 <tr bgcolor="#eeeeee"><td><a href="#EQ_OVERRIDING_EQUALS_NOT_SYMMETRIC">Eq: equa ls method overrides equals in superclass and may not be symmetric</a></td><td>Co rrectness</td></tr>
189 <tr bgcolor="#ffffff"><td><a href="#EQ_SELF_USE_OBJECT">Eq: Covariant equals() m ethod defined, Object.equals(Object) inherited</a></td><td>Correctness</td></tr> 192 <tr bgcolor="#ffffff"><td><a href="#EQ_SELF_USE_OBJECT">Eq: Covariant equals() m ethod defined, Object.equals(Object) inherited</a></td><td>Correctness</td></tr>
193 <tr bgcolor="#eeeeee"><td><a href="#FB_MISSING_EXPECTED_WARNING">FB: Missing exp ected or desired warning from FindBugs</a></td><td>Correctness</td></tr>
194 <tr bgcolor="#ffffff"><td><a href="#FB_UNEXPECTED_WARNING">FB: Unexpected/undesi red warning from FindBugs</a></td><td>Correctness</td></tr>
190 <tr bgcolor="#eeeeee"><td><a href="#FE_TEST_IF_EQUAL_TO_NOT_A_NUMBER">FE: Doomed test for equality to NaN</a></td><td>Correctness</td></tr> 195 <tr bgcolor="#eeeeee"><td><a href="#FE_TEST_IF_EQUAL_TO_NOT_A_NUMBER">FE: Doomed test for equality to NaN</a></td><td>Correctness</td></tr>
191 <tr bgcolor="#ffffff"><td><a href="#VA_FORMAT_STRING_BAD_ARGUMENT">FS: Format st ring placeholder incompatible with passed argument</a></td><td>Correctness</td>< /tr> 196 <tr bgcolor="#ffffff"><td><a href="#FL_MATH_USING_FLOAT_PRECISION">FL: Method pe rforms math using floating point precision</a></td><td>Correctness</td></tr>
192 <tr bgcolor="#eeeeee"><td><a href="#VA_FORMAT_STRING_BAD_CONVERSION">FS: The typ e of a supplied argument doesn't match format specifier</a></td><td>Correctness< /td></tr> 197 <tr bgcolor="#eeeeee"><td><a href="#VA_FORMAT_STRING_BAD_ARGUMENT">FS: Format st ring placeholder incompatible with passed argument</a></td><td>Correctness</td>< /tr>
193 <tr bgcolor="#ffffff"><td><a href="#VA_FORMAT_STRING_EXPECTED_MESSAGE_FORMAT_SUP PLIED">FS: MessageFormat supplied where printf style format expected</a></td><td >Correctness</td></tr> 198 <tr bgcolor="#ffffff"><td><a href="#VA_FORMAT_STRING_BAD_CONVERSION">FS: The typ e of a supplied argument doesn't match format specifier</a></td><td>Correctness< /td></tr>
194 <tr bgcolor="#eeeeee"><td><a href="#VA_FORMAT_STRING_EXTRA_ARGUMENTS_PASSED">FS: More arguments are passed than are actually used in the format string</a></td>< td>Correctness</td></tr> 199 <tr bgcolor="#eeeeee"><td><a href="#VA_FORMAT_STRING_EXPECTED_MESSAGE_FORMAT_SUP PLIED">FS: MessageFormat supplied where printf style format expected</a></td><td >Correctness</td></tr>
195 <tr bgcolor="#ffffff"><td><a href="#VA_FORMAT_STRING_ILLEGAL">FS: Illegal format string</a></td><td>Correctness</td></tr> 200 <tr bgcolor="#ffffff"><td><a href="#VA_FORMAT_STRING_EXTRA_ARGUMENTS_PASSED">FS: More arguments are passed than are actually used in the format string</a></td>< td>Correctness</td></tr>
196 <tr bgcolor="#eeeeee"><td><a href="#VA_FORMAT_STRING_MISSING_ARGUMENT">FS: Forma t string references missing argument</a></td><td>Correctness</td></tr> 201 <tr bgcolor="#eeeeee"><td><a href="#VA_FORMAT_STRING_ILLEGAL">FS: Illegal format string</a></td><td>Correctness</td></tr>
197 <tr bgcolor="#ffffff"><td><a href="#VA_FORMAT_STRING_NO_PREVIOUS_ARGUMENT">FS: N o previous argument for format string</a></td><td>Correctness</td></tr> 202 <tr bgcolor="#ffffff"><td><a href="#VA_FORMAT_STRING_MISSING_ARGUMENT">FS: Forma t string references missing argument</a></td><td>Correctness</td></tr>
198 <tr bgcolor="#eeeeee"><td><a href="#GC_UNRELATED_TYPES">GC: No relationship betw een generic parameter and method argument</a></td><td>Correctness</td></tr> 203 <tr bgcolor="#eeeeee"><td><a href="#VA_FORMAT_STRING_NO_PREVIOUS_ARGUMENT">FS: N o previous argument for format string</a></td><td>Correctness</td></tr>
199 <tr bgcolor="#ffffff"><td><a href="#HE_SIGNATURE_DECLARES_HASHING_OF_UNHASHABLE_ CLASS">HE: Signature declares use of unhashable class in hashed construct</a></t d><td>Correctness</td></tr> 204 <tr bgcolor="#ffffff"><td><a href="#GC_UNRELATED_TYPES">GC: No relationship betw een generic parameter and method argument</a></td><td>Correctness</td></tr>
200 <tr bgcolor="#eeeeee"><td><a href="#HE_USE_OF_UNHASHABLE_CLASS">HE: Use of class without a hashCode() method in a hashed data structure</a></td><td>Correctness< /td></tr> 205 <tr bgcolor="#eeeeee"><td><a href="#HE_SIGNATURE_DECLARES_HASHING_OF_UNHASHABLE_ CLASS">HE: Signature declares use of unhashable class in hashed construct</a></t d><td>Correctness</td></tr>
201 <tr bgcolor="#ffffff"><td><a href="#ICAST_INT_2_LONG_AS_INSTANT">ICAST: int valu e converted to long and used as absolute time</a></td><td>Correctness</td></tr> 206 <tr bgcolor="#ffffff"><td><a href="#HE_USE_OF_UNHASHABLE_CLASS">HE: Use of class without a hashCode() method in a hashed data structure</a></td><td>Correctness< /td></tr>
202 <tr bgcolor="#eeeeee"><td><a href="#ICAST_INT_CAST_TO_DOUBLE_PASSED_TO_CEIL">ICA ST: integral value cast to double and then passed to Math.ceil</a></td><td>Corre ctness</td></tr> 207 <tr bgcolor="#eeeeee"><td><a href="#ICAST_INT_2_LONG_AS_INSTANT">ICAST: int valu e converted to long and used as absolute time</a></td><td>Correctness</td></tr>
203 <tr bgcolor="#ffffff"><td><a href="#ICAST_INT_CAST_TO_FLOAT_PASSED_TO_ROUND">ICA ST: int value cast to float and then passed to Math.round</a></td><td>Correctnes s</td></tr> 208 <tr bgcolor="#ffffff"><td><a href="#ICAST_INT_CAST_TO_DOUBLE_PASSED_TO_CEIL">ICA ST: Integral value cast to double and then passed to Math.ceil</a></td><td>Corre ctness</td></tr>
204 <tr bgcolor="#eeeeee"><td><a href="#IJU_ASSERT_METHOD_INVOKED_FROM_RUN_METHOD">I JU: JUnit assertion in run method will not be noticed by JUnit</a></td><td>Corre ctness</td></tr> 209 <tr bgcolor="#eeeeee"><td><a href="#ICAST_INT_CAST_TO_FLOAT_PASSED_TO_ROUND">ICA ST: int value cast to float and then passed to Math.round</a></td><td>Correctnes s</td></tr>
205 <tr bgcolor="#ffffff"><td><a href="#IJU_BAD_SUITE_METHOD">IJU: TestCase declares a bad suite method </a></td><td>Correctness</td></tr> 210 <tr bgcolor="#ffffff"><td><a href="#IJU_ASSERT_METHOD_INVOKED_FROM_RUN_METHOD">I JU: JUnit assertion in run method will not be noticed by JUnit</a></td><td>Corre ctness</td></tr>
206 <tr bgcolor="#eeeeee"><td><a href="#IJU_NO_TESTS">IJU: TestCase has no tests</a> </td><td>Correctness</td></tr> 211 <tr bgcolor="#eeeeee"><td><a href="#IJU_BAD_SUITE_METHOD">IJU: TestCase declares a bad suite method </a></td><td>Correctness</td></tr>
207 <tr bgcolor="#ffffff"><td><a href="#IJU_SETUP_NO_SUPER">IJU: TestCase defines se tUp that doesn't call super.setUp()</a></td><td>Correctness</td></tr> 212 <tr bgcolor="#ffffff"><td><a href="#IJU_NO_TESTS">IJU: TestCase has no tests</a> </td><td>Correctness</td></tr>
208 <tr bgcolor="#eeeeee"><td><a href="#IJU_SUITE_NOT_STATIC">IJU: TestCase implemen ts a non-static suite method </a></td><td>Correctness</td></tr> 213 <tr bgcolor="#eeeeee"><td><a href="#IJU_SETUP_NO_SUPER">IJU: TestCase defines se tUp that doesn't call super.setUp()</a></td><td>Correctness</td></tr>
209 <tr bgcolor="#ffffff"><td><a href="#IJU_TEARDOWN_NO_SUPER">IJU: TestCase defines tearDown that doesn't call super.tearDown()</a></td><td>Correctness</td></tr> 214 <tr bgcolor="#ffffff"><td><a href="#IJU_SUITE_NOT_STATIC">IJU: TestCase implemen ts a non-static suite method </a></td><td>Correctness</td></tr>
210 <tr bgcolor="#eeeeee"><td><a href="#IL_CONTAINER_ADDED_TO_ITSELF">IL: A collecti on is added to itself</a></td><td>Correctness</td></tr> 215 <tr bgcolor="#eeeeee"><td><a href="#IJU_TEARDOWN_NO_SUPER">IJU: TestCase defines tearDown that doesn't call super.tearDown()</a></td><td>Correctness</td></tr>
211 <tr bgcolor="#ffffff"><td><a href="#IL_INFINITE_LOOP">IL: An apparent infinite l oop</a></td><td>Correctness</td></tr> 216 <tr bgcolor="#ffffff"><td><a href="#IL_CONTAINER_ADDED_TO_ITSELF">IL: A collecti on is added to itself</a></td><td>Correctness</td></tr>
212 <tr bgcolor="#eeeeee"><td><a href="#IL_INFINITE_RECURSIVE_LOOP">IL: An apparent infinite recursive loop</a></td><td>Correctness</td></tr> 217 <tr bgcolor="#eeeeee"><td><a href="#IL_INFINITE_LOOP">IL: An apparent infinite l oop</a></td><td>Correctness</td></tr>
213 <tr bgcolor="#ffffff"><td><a href="#IM_MULTIPLYING_RESULT_OF_IREM">IM: Integer m ultiply of result of integer remainder</a></td><td>Correctness</td></tr> 218 <tr bgcolor="#ffffff"><td><a href="#IL_INFINITE_RECURSIVE_LOOP">IL: An apparent infinite recursive loop</a></td><td>Correctness</td></tr>
214 <tr bgcolor="#eeeeee"><td><a href="#INT_BAD_COMPARISON_WITH_INT_VALUE">INT: Bad comparison of int value with long constant</a></td><td>Correctness</td></tr> 219 <tr bgcolor="#eeeeee"><td><a href="#IM_MULTIPLYING_RESULT_OF_IREM">IM: Integer m ultiply of result of integer remainder</a></td><td>Correctness</td></tr>
215 <tr bgcolor="#ffffff"><td><a href="#INT_BAD_COMPARISON_WITH_NONNEGATIVE_VALUE">I NT: Bad comparison of nonnegative value with negative constant</a></td><td>Corre ctness</td></tr> 220 <tr bgcolor="#ffffff"><td><a href="#INT_BAD_COMPARISON_WITH_INT_VALUE">INT: Bad comparison of int value with long constant</a></td><td>Correctness</td></tr>
216 <tr bgcolor="#eeeeee"><td><a href="#INT_BAD_COMPARISON_WITH_SIGNED_BYTE">INT: Ba d comparison of signed byte</a></td><td>Correctness</td></tr> 221 <tr bgcolor="#eeeeee"><td><a href="#INT_BAD_COMPARISON_WITH_NONNEGATIVE_VALUE">I NT: Bad comparison of nonnegative value with negative constant</a></td><td>Corre ctness</td></tr>
217 <tr bgcolor="#ffffff"><td><a href="#IO_APPENDING_TO_OBJECT_OUTPUT_STREAM">IO: Do omed attempt to append to an object output stream</a></td><td>Correctness</td></ tr> 222 <tr bgcolor="#ffffff"><td><a href="#INT_BAD_COMPARISON_WITH_SIGNED_BYTE">INT: Ba d comparison of signed byte</a></td><td>Correctness</td></tr>
218 <tr bgcolor="#eeeeee"><td><a href="#IP_PARAMETER_IS_DEAD_BUT_OVERWRITTEN">IP: A parameter is dead upon entry to a method but overwritten</a></td><td>Correctness </td></tr> 223 <tr bgcolor="#eeeeee"><td><a href="#IO_APPENDING_TO_OBJECT_OUTPUT_STREAM">IO: Do omed attempt to append to an object output stream</a></td><td>Correctness</td></ tr>
219 <tr bgcolor="#ffffff"><td><a href="#MF_CLASS_MASKS_FIELD">MF: Class defines fiel d that masks a superclass field</a></td><td>Correctness</td></tr> 224 <tr bgcolor="#ffffff"><td><a href="#IP_PARAMETER_IS_DEAD_BUT_OVERWRITTEN">IP: A parameter is dead upon entry to a method but overwritten</a></td><td>Correctness </td></tr>
220 <tr bgcolor="#eeeeee"><td><a href="#MF_METHOD_MASKS_FIELD">MF: Method defines a variable that obscures a field</a></td><td>Correctness</td></tr> 225 <tr bgcolor="#eeeeee"><td><a href="#MF_CLASS_MASKS_FIELD">MF: Class defines fiel d that masks a superclass field</a></td><td>Correctness</td></tr>
221 <tr bgcolor="#ffffff"><td><a href="#NP_ALWAYS_NULL">NP: Null pointer dereference </a></td><td>Correctness</td></tr> 226 <tr bgcolor="#ffffff"><td><a href="#MF_METHOD_MASKS_FIELD">MF: Method defines a variable that obscures a field</a></td><td>Correctness</td></tr>
222 <tr bgcolor="#eeeeee"><td><a href="#NP_ALWAYS_NULL_EXCEPTION">NP: Null pointer d ereference in method on exception path</a></td><td>Correctness</td></tr> 227 <tr bgcolor="#eeeeee"><td><a href="#NP_ALWAYS_NULL">NP: Null pointer dereference </a></td><td>Correctness</td></tr>
223 <tr bgcolor="#ffffff"><td><a href="#NP_ARGUMENT_MIGHT_BE_NULL">NP: Method does n ot check for null argument</a></td><td>Correctness</td></tr> 228 <tr bgcolor="#ffffff"><td><a href="#NP_ALWAYS_NULL_EXCEPTION">NP: Null pointer d ereference in method on exception path</a></td><td>Correctness</td></tr>
224 <tr bgcolor="#eeeeee"><td><a href="#NP_CLOSING_NULL">NP: close() invoked on a va lue that is always null</a></td><td>Correctness</td></tr> 229 <tr bgcolor="#eeeeee"><td><a href="#NP_ARGUMENT_MIGHT_BE_NULL">NP: Method does n ot check for null argument</a></td><td>Correctness</td></tr>
225 <tr bgcolor="#ffffff"><td><a href="#NP_GUARANTEED_DEREF">NP: Null value is guara nteed to be dereferenced</a></td><td>Correctness</td></tr> 230 <tr bgcolor="#ffffff"><td><a href="#NP_CLOSING_NULL">NP: close() invoked on a va lue that is always null</a></td><td>Correctness</td></tr>
226 <tr bgcolor="#eeeeee"><td><a href="#NP_GUARANTEED_DEREF_ON_EXCEPTION_PATH">NP: V alue is null and guaranteed to be dereferenced on exception path</a></td><td>Cor rectness</td></tr> 231 <tr bgcolor="#eeeeee"><td><a href="#NP_GUARANTEED_DEREF">NP: Null value is guara nteed to be dereferenced</a></td><td>Correctness</td></tr>
227 <tr bgcolor="#ffffff"><td><a href="#NP_NONNULL_FIELD_NOT_INITIALIZED_IN_CONSTRUC TOR">NP: Nonnull field is not initialized</a></td><td>Correctness</td></tr> 232 <tr bgcolor="#ffffff"><td><a href="#NP_GUARANTEED_DEREF_ON_EXCEPTION_PATH">NP: V alue is null and guaranteed to be dereferenced on exception path</a></td><td>Cor rectness</td></tr>
228 <tr bgcolor="#eeeeee"><td><a href="#NP_NONNULL_PARAM_VIOLATION">NP: Method call passes null to a nonnull parameter </a></td><td>Correctness</td></tr> 233 <tr bgcolor="#eeeeee"><td><a href="#NP_NONNULL_FIELD_NOT_INITIALIZED_IN_CONSTRUC TOR">NP: Nonnull field is not initialized</a></td><td>Correctness</td></tr>
229 <tr bgcolor="#ffffff"><td><a href="#NP_NONNULL_RETURN_VIOLATION">NP: Method may return null, but is declared @NonNull</a></td><td>Correctness</td></tr> 234 <tr bgcolor="#ffffff"><td><a href="#NP_NONNULL_PARAM_VIOLATION">NP: Method call passes null to a nonnull parameter </a></td><td>Correctness</td></tr>
230 <tr bgcolor="#eeeeee"><td><a href="#NP_NULL_INSTANCEOF">NP: A known null value i s checked to see if it is an instance of a type</a></td><td>Correctness</td></tr > 235 <tr bgcolor="#eeeeee"><td><a href="#NP_NONNULL_RETURN_VIOLATION">NP: Method may return null, but is declared @NonNull</a></td><td>Correctness</td></tr>
231 <tr bgcolor="#ffffff"><td><a href="#NP_NULL_ON_SOME_PATH">NP: Possible null poin ter dereference</a></td><td>Correctness</td></tr> 236 <tr bgcolor="#ffffff"><td><a href="#NP_NULL_INSTANCEOF">NP: A known null value i s checked to see if it is an instance of a type</a></td><td>Correctness</td></tr >
232 <tr bgcolor="#eeeeee"><td><a href="#NP_NULL_ON_SOME_PATH_EXCEPTION">NP: Possible null pointer dereference in method on exception path</a></td><td>Correctness</t d></tr> 237 <tr bgcolor="#eeeeee"><td><a href="#NP_NULL_ON_SOME_PATH">NP: Possible null poin ter dereference</a></td><td>Correctness</td></tr>
233 <tr bgcolor="#ffffff"><td><a href="#NP_NULL_PARAM_DEREF">NP: Method call passes null for nonnull parameter</a></td><td>Correctness</td></tr> 238 <tr bgcolor="#ffffff"><td><a href="#NP_NULL_ON_SOME_PATH_EXCEPTION">NP: Possible null pointer dereference in method on exception path</a></td><td>Correctness</t d></tr>
234 <tr bgcolor="#eeeeee"><td><a href="#NP_NULL_PARAM_DEREF_ALL_TARGETS_DANGEROUS">N P: Method call passes null for nonnull parameter</a></td><td>Correctness</td></t r> 239 <tr bgcolor="#eeeeee"><td><a href="#NP_NULL_PARAM_DEREF">NP: Method call passes null for nonnull parameter</a></td><td>Correctness</td></tr>
235 <tr bgcolor="#ffffff"><td><a href="#NP_NULL_PARAM_DEREF_NONVIRTUAL">NP: Non-virt ual method call passes null for nonnull parameter</a></td><td>Correctness</td></ tr> 240 <tr bgcolor="#ffffff"><td><a href="#NP_NULL_PARAM_DEREF_ALL_TARGETS_DANGEROUS">N P: Method call passes null for nonnull parameter</a></td><td>Correctness</td></t r>
236 <tr bgcolor="#eeeeee"><td><a href="#NP_STORE_INTO_NONNULL_FIELD">NP: Store of nu ll value into field annotated NonNull</a></td><td>Correctness</td></tr> 241 <tr bgcolor="#eeeeee"><td><a href="#NP_NULL_PARAM_DEREF_NONVIRTUAL">NP: Non-virt ual method call passes null for nonnull parameter</a></td><td>Correctness</td></ tr>
237 <tr bgcolor="#ffffff"><td><a href="#NP_UNWRITTEN_FIELD">NP: Read of unwritten fi eld</a></td><td>Correctness</td></tr> 242 <tr bgcolor="#ffffff"><td><a href="#NP_STORE_INTO_NONNULL_FIELD">NP: Store of nu ll value into field annotated NonNull</a></td><td>Correctness</td></tr>
238 <tr bgcolor="#eeeeee"><td><a href="#NM_BAD_EQUAL">Nm: Class defines equal(Object ); should it be equals(Object)?</a></td><td>Correctness</td></tr> 243 <tr bgcolor="#eeeeee"><td><a href="#NP_UNWRITTEN_FIELD">NP: Read of unwritten fi eld</a></td><td>Correctness</td></tr>
239 <tr bgcolor="#ffffff"><td><a href="#NM_LCASE_HASHCODE">Nm: Class defines hashcod e(); should it be hashCode()?</a></td><td>Correctness</td></tr> 244 <tr bgcolor="#ffffff"><td><a href="#NM_BAD_EQUAL">Nm: Class defines equal(Object ); should it be equals(Object)?</a></td><td>Correctness</td></tr>
240 <tr bgcolor="#eeeeee"><td><a href="#NM_LCASE_TOSTRING">Nm: Class defines tostrin g(); should it be toString()?</a></td><td>Correctness</td></tr> 245 <tr bgcolor="#eeeeee"><td><a href="#NM_LCASE_HASHCODE">Nm: Class defines hashcod e(); should it be hashCode()?</a></td><td>Correctness</td></tr>
241 <tr bgcolor="#ffffff"><td><a href="#NM_METHOD_CONSTRUCTOR_CONFUSION">Nm: Apparen t method/constructor confusion</a></td><td>Correctness</td></tr> 246 <tr bgcolor="#ffffff"><td><a href="#NM_LCASE_TOSTRING">Nm: Class defines tostrin g(); should it be toString()?</a></td><td>Correctness</td></tr>
242 <tr bgcolor="#eeeeee"><td><a href="#NM_VERY_CONFUSING">Nm: Very confusing method names</a></td><td>Correctness</td></tr> 247 <tr bgcolor="#eeeeee"><td><a href="#NM_METHOD_CONSTRUCTOR_CONFUSION">Nm: Apparen t method/constructor confusion</a></td><td>Correctness</td></tr>
243 <tr bgcolor="#ffffff"><td><a href="#NM_WRONG_PACKAGE">Nm: Method doesn't overrid e method in superclass due to wrong package for parameter</a></td><td>Correctnes s</td></tr> 248 <tr bgcolor="#ffffff"><td><a href="#NM_VERY_CONFUSING">Nm: Very confusing method names</a></td><td>Correctness</td></tr>
244 <tr bgcolor="#eeeeee"><td><a href="#QBA_QUESTIONABLE_BOOLEAN_ASSIGNMENT">QBA: Me thod assigns boolean literal in boolean expression</a></td><td>Correctness</td>< /tr> 249 <tr bgcolor="#eeeeee"><td><a href="#NM_WRONG_PACKAGE">Nm: Method doesn't overrid e method in superclass due to wrong package for parameter</a></td><td>Correctnes s</td></tr>
245 <tr bgcolor="#ffffff"><td><a href="#RC_REF_COMPARISON">RC: Suspicious reference comparison</a></td><td>Correctness</td></tr> 250 <tr bgcolor="#ffffff"><td><a href="#QBA_QUESTIONABLE_BOOLEAN_ASSIGNMENT">QBA: Me thod assigns boolean literal in boolean expression</a></td><td>Correctness</td>< /tr>
246 <tr bgcolor="#eeeeee"><td><a href="#RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NP E">RCN: Nullcheck of value previously dereferenced</a></td><td>Correctness</td>< /tr> 251 <tr bgcolor="#eeeeee"><td><a href="#RC_REF_COMPARISON">RC: Suspicious reference comparison</a></td><td>Correctness</td></tr>
247 <tr bgcolor="#ffffff"><td><a href="#RE_BAD_SYNTAX_FOR_REGULAR_EXPRESSION">RE: In valid syntax for regular expression</a></td><td>Correctness</td></tr> 252 <tr bgcolor="#ffffff"><td><a href="#RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NP E">RCN: Nullcheck of value previously dereferenced</a></td><td>Correctness</td>< /tr>
248 <tr bgcolor="#eeeeee"><td><a href="#RE_CANT_USE_FILE_SEPARATOR_AS_REGULAR_EXPRES SION">RE: File.separator used for regular expression</a></td><td>Correctness</td ></tr> 253 <tr bgcolor="#eeeeee"><td><a href="#RE_BAD_SYNTAX_FOR_REGULAR_EXPRESSION">RE: In valid syntax for regular expression</a></td><td>Correctness</td></tr>
249 <tr bgcolor="#ffffff"><td><a href="#RE_POSSIBLE_UNINTENDED_PATTERN">RE: "." used for regular expression</a></td><td>Correctness</td></tr> 254 <tr bgcolor="#ffffff"><td><a href="#RE_CANT_USE_FILE_SEPARATOR_AS_REGULAR_EXPRES SION">RE: File.separator used for regular expression</a></td><td>Correctness</td ></tr>
250 <tr bgcolor="#eeeeee"><td><a href="#RV_01_TO_INT">RV: Random value from 0 to 1 i s coerced to the integer 0</a></td><td>Correctness</td></tr> 255 <tr bgcolor="#eeeeee"><td><a href="#RE_POSSIBLE_UNINTENDED_PATTERN">RE: "." or " |" used for regular expression</a></td><td>Correctness</td></tr>
251 <tr bgcolor="#ffffff"><td><a href="#RV_ABSOLUTE_VALUE_OF_HASHCODE">RV: Bad attem pt to compute absolute value of signed 32-bit hashcode </a></td><td>Correctness< /td></tr> 256 <tr bgcolor="#ffffff"><td><a href="#RV_01_TO_INT">RV: Random value from 0 to 1 i s coerced to the integer 0</a></td><td>Correctness</td></tr>
252 <tr bgcolor="#eeeeee"><td><a href="#RV_ABSOLUTE_VALUE_OF_RANDOM_INT">RV: Bad att empt to compute absolute value of signed random integer</a></td><td>Correctness< /td></tr> 257 <tr bgcolor="#eeeeee"><td><a href="#RV_ABSOLUTE_VALUE_OF_HASHCODE">RV: Bad attem pt to compute absolute value of signed 32-bit hashcode </a></td><td>Correctness< /td></tr>
253 <tr bgcolor="#ffffff"><td><a href="#RV_CHECK_COMPARETO_FOR_SPECIFIC_RETURN_VALUE ">RV: Code checks for specific values returned by compareTo</a></td><td>Correctn ess</td></tr> 258 <tr bgcolor="#ffffff"><td><a href="#RV_ABSOLUTE_VALUE_OF_RANDOM_INT">RV: Bad att empt to compute absolute value of signed random integer</a></td><td>Correctness< /td></tr>
254 <tr bgcolor="#eeeeee"><td><a href="#RV_EXCEPTION_NOT_THROWN">RV: Exception creat ed and dropped rather than thrown</a></td><td>Correctness</td></tr> 259 <tr bgcolor="#eeeeee"><td><a href="#RV_CHECK_COMPARETO_FOR_SPECIFIC_RETURN_VALUE ">RV: Code checks for specific values returned by compareTo</a></td><td>Correctn ess</td></tr>
255 <tr bgcolor="#ffffff"><td><a href="#RV_RETURN_VALUE_IGNORED">RV: Method ignores return value</a></td><td>Correctness</td></tr> 260 <tr bgcolor="#ffffff"><td><a href="#RV_EXCEPTION_NOT_THROWN">RV: Exception creat ed and dropped rather than thrown</a></td><td>Correctness</td></tr>
256 <tr bgcolor="#eeeeee"><td><a href="#RpC_REPEATED_CONDITIONAL_TEST">RpC: Repeated conditional tests</a></td><td>Correctness</td></tr> 261 <tr bgcolor="#eeeeee"><td><a href="#RV_RETURN_VALUE_IGNORED">RV: Method ignores return value</a></td><td>Correctness</td></tr>
257 <tr bgcolor="#ffffff"><td><a href="#SA_FIELD_SELF_ASSIGNMENT">SA: Self assignmen t of field</a></td><td>Correctness</td></tr> 262 <tr bgcolor="#ffffff"><td><a href="#RpC_REPEATED_CONDITIONAL_TEST">RpC: Repeated conditional tests</a></td><td>Correctness</td></tr>
258 <tr bgcolor="#eeeeee"><td><a href="#SA_FIELD_SELF_COMPARISON">SA: Self compariso n of field with itself</a></td><td>Correctness</td></tr> 263 <tr bgcolor="#eeeeee"><td><a href="#SA_FIELD_SELF_ASSIGNMENT">SA: Self assignmen t of field</a></td><td>Correctness</td></tr>
259 <tr bgcolor="#ffffff"><td><a href="#SA_FIELD_SELF_COMPUTATION">SA: Nonsensical s elf computation involving a field (e.g., x & x)</a></td><td>Correctness</td></tr > 264 <tr bgcolor="#ffffff"><td><a href="#SA_FIELD_SELF_COMPARISON">SA: Self compariso n of field with itself</a></td><td>Correctness</td></tr>
260 <tr bgcolor="#eeeeee"><td><a href="#SA_LOCAL_SELF_ASSIGNMENT_INSTEAD_OF_FIELD">S A: Self assignment of local rather than assignment to field</a></td><td>Correctn ess</td></tr> 265 <tr bgcolor="#eeeeee"><td><a href="#SA_FIELD_SELF_COMPUTATION">SA: Nonsensical s elf computation involving a field (e.g., x & x)</a></td><td>Correctness</td></tr >
261 <tr bgcolor="#ffffff"><td><a href="#SA_LOCAL_SELF_COMPARISON">SA: Self compariso n of value with itself</a></td><td>Correctness</td></tr> 266 <tr bgcolor="#ffffff"><td><a href="#SA_LOCAL_SELF_ASSIGNMENT_INSTEAD_OF_FIELD">S A: Self assignment of local rather than assignment to field</a></td><td>Correctn ess</td></tr>
262 <tr bgcolor="#eeeeee"><td><a href="#SA_LOCAL_SELF_COMPUTATION">SA: Nonsensical s elf computation involving a variable (e.g., x & x)</a></td><td>Correctness</td>< /tr> 267 <tr bgcolor="#eeeeee"><td><a href="#SA_LOCAL_SELF_COMPARISON">SA: Self compariso n of value with itself</a></td><td>Correctness</td></tr>
263 <tr bgcolor="#ffffff"><td><a href="#SF_DEAD_STORE_DUE_TO_SWITCH_FALLTHROUGH">SF: Dead store due to switch statement fall through</a></td><td>Correctness</td></t r> 268 <tr bgcolor="#ffffff"><td><a href="#SA_LOCAL_SELF_COMPUTATION">SA: Nonsensical s elf computation involving a variable (e.g., x & x)</a></td><td>Correctness</td>< /tr>
264 <tr bgcolor="#eeeeee"><td><a href="#SF_DEAD_STORE_DUE_TO_SWITCH_FALLTHROUGH_TO_T HROW">SF: Dead store due to switch statement fall through to throw</a></td><td>C orrectness</td></tr> 269 <tr bgcolor="#eeeeee"><td><a href="#SF_DEAD_STORE_DUE_TO_SWITCH_FALLTHROUGH">SF: Dead store due to switch statement fall through</a></td><td>Correctness</td></t r>
265 <tr bgcolor="#ffffff"><td><a href="#SIC_THREADLOCAL_DEADLY_EMBRACE">SIC: Deadly embrace of non-static inner class and thread local</a></td><td>Correctness</td>< /tr> 270 <tr bgcolor="#ffffff"><td><a href="#SF_DEAD_STORE_DUE_TO_SWITCH_FALLTHROUGH_TO_T HROW">SF: Dead store due to switch statement fall through to throw</a></td><td>C orrectness</td></tr>
266 <tr bgcolor="#eeeeee"><td><a href="#SIO_SUPERFLUOUS_INSTANCEOF">SIO: Unnecessary type check done using instanceof operator</a></td><td>Correctness</td></tr> 271 <tr bgcolor="#eeeeee"><td><a href="#SIC_THREADLOCAL_DEADLY_EMBRACE">SIC: Deadly embrace of non-static inner class and thread local</a></td><td>Correctness</td>< /tr>
267 <tr bgcolor="#ffffff"><td><a href="#SQL_BAD_PREPARED_STATEMENT_ACCESS">SQL: Meth od attempts to access a prepared statement parameter with index 0</a></td><td>Co rrectness</td></tr> 272 <tr bgcolor="#ffffff"><td><a href="#SIO_SUPERFLUOUS_INSTANCEOF">SIO: Unnecessary type check done using instanceof operator</a></td><td>Correctness</td></tr>
268 <tr bgcolor="#eeeeee"><td><a href="#SQL_BAD_RESULTSET_ACCESS">SQL: Method attemp ts to access a result set field with index 0</a></td><td>Correctness</td></tr> 273 <tr bgcolor="#eeeeee"><td><a href="#SQL_BAD_PREPARED_STATEMENT_ACCESS">SQL: Meth od attempts to access a prepared statement parameter with index 0</a></td><td>Co rrectness</td></tr>
269 <tr bgcolor="#ffffff"><td><a href="#STI_INTERRUPTED_ON_CURRENTTHREAD">STI: Unnee ded use of currentThread() call, to call interrupted() </a></td><td>Correctness< /td></tr> 274 <tr bgcolor="#ffffff"><td><a href="#SQL_BAD_RESULTSET_ACCESS">SQL: Method attemp ts to access a result set field with index 0</a></td><td>Correctness</td></tr>
270 <tr bgcolor="#eeeeee"><td><a href="#STI_INTERRUPTED_ON_UNKNOWNTHREAD">STI: Stati c Thread.interrupted() method invoked on thread instance</a></td><td>Correctness </td></tr> 275 <tr bgcolor="#eeeeee"><td><a href="#STI_INTERRUPTED_ON_CURRENTTHREAD">STI: Unnee ded use of currentThread() call, to call interrupted() </a></td><td>Correctness< /td></tr>
271 <tr bgcolor="#ffffff"><td><a href="#SE_METHOD_MUST_BE_PRIVATE">Se: Method must b e private in order for serialization to work</a></td><td>Correctness</td></tr> 276 <tr bgcolor="#ffffff"><td><a href="#STI_INTERRUPTED_ON_UNKNOWNTHREAD">STI: Stati c Thread.interrupted() method invoked on thread instance</a></td><td>Correctness </td></tr>
272 <tr bgcolor="#eeeeee"><td><a href="#SE_READ_RESOLVE_IS_STATIC">Se: The readResol ve method must not be declared as a static method. </a></td><td>Correctness</td ></tr> 277 <tr bgcolor="#eeeeee"><td><a href="#SE_METHOD_MUST_BE_PRIVATE">Se: Method must b e private in order for serialization to work</a></td><td>Correctness</td></tr>
273 <tr bgcolor="#ffffff"><td><a href="#TQ_ALWAYS_VALUE_USED_WHERE_NEVER_REQUIRED">T Q: Value annotated as carrying a type qualifier used where a value that must not carry that qualifier is required</a></td><td>Correctness</td></tr> 278 <tr bgcolor="#ffffff"><td><a href="#SE_READ_RESOLVE_IS_STATIC">Se: The readResol ve method must not be declared as a static method. </a></td><td>Correctness</td ></tr>
274 <tr bgcolor="#eeeeee"><td><a href="#TQ_COMPARING_VALUES_WITH_INCOMPATIBLE_TYPE_Q UALIFIERS">TQ: Comparing values with incompatible type qualifiers</a></td><td>Co rrectness</td></tr> 279 <tr bgcolor="#eeeeee"><td><a href="#TQ_ALWAYS_VALUE_USED_WHERE_NEVER_REQUIRED">T Q: Value annotated as carrying a type qualifier used where a value that must not carry that qualifier is required</a></td><td>Correctness</td></tr>
275 <tr bgcolor="#ffffff"><td><a href="#TQ_MAYBE_SOURCE_VALUE_REACHES_ALWAYS_SINK">T Q: Value that might not carry a type qualifier is always used in a way requires that type qualifier</a></td><td>Correctness</td></tr> 280 <tr bgcolor="#ffffff"><td><a href="#TQ_COMPARING_VALUES_WITH_INCOMPATIBLE_TYPE_Q UALIFIERS">TQ: Comparing values with incompatible type qualifiers</a></td><td>Co rrectness</td></tr>
276 <tr bgcolor="#eeeeee"><td><a href="#TQ_MAYBE_SOURCE_VALUE_REACHES_NEVER_SINK">TQ : Value that might carry a type qualifier is always used in a way prohibits it f rom having that type qualifier</a></td><td>Correctness</td></tr> 281 <tr bgcolor="#eeeeee"><td><a href="#TQ_MAYBE_SOURCE_VALUE_REACHES_ALWAYS_SINK">T Q: Value that might not carry a type qualifier is always used in a way requires that type qualifier</a></td><td>Correctness</td></tr>
277 <tr bgcolor="#ffffff"><td><a href="#TQ_NEVER_VALUE_USED_WHERE_ALWAYS_REQUIRED">T Q: Value annotated as never carrying a type qualifier used where value carrying that qualifier is required</a></td><td>Correctness</td></tr> 282 <tr bgcolor="#ffffff"><td><a href="#TQ_MAYBE_SOURCE_VALUE_REACHES_NEVER_SINK">TQ : Value that might carry a type qualifier is always used in a way prohibits it f rom having that type qualifier</a></td><td>Correctness</td></tr>
283 <tr bgcolor="#eeeeee"><td><a href="#TQ_NEVER_VALUE_USED_WHERE_ALWAYS_REQUIRED">T Q: Value annotated as never carrying a type qualifier used where value carrying that qualifier is required</a></td><td>Correctness</td></tr>
284 <tr bgcolor="#ffffff"><td><a href="#TQ_UNKNOWN_VALUE_USED_WHERE_ALWAYS_STRICTLY_ REQUIRED">TQ: Value without a type qualifier used where a value is required to h ave that qualifier</a></td><td>Correctness</td></tr>
278 <tr bgcolor="#eeeeee"><td><a href="#UMAC_UNCALLABLE_METHOD_OF_ANONYMOUS_CLASS">U MAC: Uncallable method defined in anonymous class</a></td><td>Correctness</td></ tr> 285 <tr bgcolor="#eeeeee"><td><a href="#UMAC_UNCALLABLE_METHOD_OF_ANONYMOUS_CLASS">U MAC: Uncallable method defined in anonymous class</a></td><td>Correctness</td></ tr>
279 <tr bgcolor="#ffffff"><td><a href="#UR_UNINIT_READ">UR: Uninitialized read of fi eld in constructor</a></td><td>Correctness</td></tr> 286 <tr bgcolor="#ffffff"><td><a href="#UR_UNINIT_READ">UR: Uninitialized read of fi eld in constructor</a></td><td>Correctness</td></tr>
280 <tr bgcolor="#eeeeee"><td><a href="#UR_UNINIT_READ_CALLED_FROM_SUPER_CONSTRUCTOR ">UR: Uninitialized read of field method called from constructor of superclass</ a></td><td>Correctness</td></tr> 287 <tr bgcolor="#eeeeee"><td><a href="#UR_UNINIT_READ_CALLED_FROM_SUPER_CONSTRUCTOR ">UR: Uninitialized read of field method called from constructor of superclass</ a></td><td>Correctness</td></tr>
281 <tr bgcolor="#ffffff"><td><a href="#DMI_INVOKING_TOSTRING_ON_ANONYMOUS_ARRAY">US ELESS_STRING: Invocation of toString on an array</a></td><td>Correctness</td></t r> 288 <tr bgcolor="#ffffff"><td><a href="#DMI_INVOKING_TOSTRING_ON_ANONYMOUS_ARRAY">US ELESS_STRING: Invocation of toString on an unnamed array</a></td><td>Correctness </td></tr>
282 <tr bgcolor="#eeeeee"><td><a href="#DMI_INVOKING_TOSTRING_ON_ARRAY">USELESS_STRI NG: Invocation of toString on an array</a></td><td>Correctness</td></tr> 289 <tr bgcolor="#eeeeee"><td><a href="#DMI_INVOKING_TOSTRING_ON_ARRAY">USELESS_STRI NG: Invocation of toString on an array</a></td><td>Correctness</td></tr>
283 <tr bgcolor="#ffffff"><td><a href="#VA_FORMAT_STRING_BAD_CONVERSION_FROM_ARRAY"> USELESS_STRING: Array formatted in useless way using format string</a></td><td>C orrectness</td></tr> 290 <tr bgcolor="#ffffff"><td><a href="#VA_FORMAT_STRING_BAD_CONVERSION_FROM_ARRAY"> USELESS_STRING: Array formatted in useless way using format string</a></td><td>C orrectness</td></tr>
284 <tr bgcolor="#eeeeee"><td><a href="#UWF_NULL_FIELD">UwF: Field only ever set to null</a></td><td>Correctness</td></tr> 291 <tr bgcolor="#eeeeee"><td><a href="#UWF_NULL_FIELD">UwF: Field only ever set to null</a></td><td>Correctness</td></tr>
285 <tr bgcolor="#ffffff"><td><a href="#UWF_UNWRITTEN_FIELD">UwF: Unwritten field</a ></td><td>Correctness</td></tr> 292 <tr bgcolor="#ffffff"><td><a href="#UWF_UNWRITTEN_FIELD">UwF: Unwritten field</a ></td><td>Correctness</td></tr>
286 <tr bgcolor="#eeeeee"><td><a href="#VA_PRIMITIVE_ARRAY_PASSED_TO_OBJECT_VARARG"> VA: Primitive array passed to function expecting a variable number of object arg uments</a></td><td>Correctness</td></tr> 293 <tr bgcolor="#eeeeee"><td><a href="#VA_PRIMITIVE_ARRAY_PASSED_TO_OBJECT_VARARG"> VA: Primitive array passed to function expecting a variable number of object arg uments</a></td><td>Correctness</td></tr>
287 <tr bgcolor="#ffffff"><td><a href="#LG_LOST_LOGGER_DUE_TO_WEAK_REFERENCE">LG: Po tential lost logger changes due to weak reference in OpenJDK</a></td><td>Experim ental</td></tr> 294 <tr bgcolor="#ffffff"><td><a href="#VR_UNRESOLVABLE_REFERENCE">VR: Class makes r eference to unresolvable class or method</a></td><td>Correctness</td></tr>
288 <tr bgcolor="#eeeeee"><td><a href="#OBL_UNSATISFIED_OBLIGATION">OBL: Method may fail to clean up stream or resource</a></td><td>Experimental</td></tr> 295 <tr bgcolor="#eeeeee"><td><a href="#LG_LOST_LOGGER_DUE_TO_WEAK_REFERENCE">LG: Po tential lost logger changes due to weak reference in OpenJDK</a></td><td>Experim ental</td></tr>
289 <tr bgcolor="#ffffff"><td><a href="#OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE">O BL: Method may fail to clean up stream or resource on checked exception</a></td> <td>Experimental</td></tr> 296 <tr bgcolor="#ffffff"><td><a href="#OBL_UNSATISFIED_OBLIGATION">OBL: Method may fail to clean up stream or resource</a></td><td>Experimental</td></tr>
297 <tr bgcolor="#eeeeee"><td><a href="#OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE">O BL: Method may fail to clean up stream or resource on checked exception</a></td> <td>Experimental</td></tr>
298 <tr bgcolor="#ffffff"><td><a href="#TESTING">TEST: Testing</a></td><td>Experimen tal</td></tr>
290 <tr bgcolor="#eeeeee"><td><a href="#DM_CONVERT_CASE">Dm: Consider using Locale p arameterized version of invoked method</a></td><td>Internationalization</td></tr > 299 <tr bgcolor="#eeeeee"><td><a href="#DM_CONVERT_CASE">Dm: Consider using Locale p arameterized version of invoked method</a></td><td>Internationalization</td></tr >
291 <tr bgcolor="#ffffff"><td><a href="#DM_DEFAULT_ENCODING">Dm: Reliance on default encoding</a></td><td>Internationalization</td></tr> 300 <tr bgcolor="#ffffff"><td><a href="#DM_DEFAULT_ENCODING">Dm: Reliance on default encoding</a></td><td>Internationalization</td></tr>
292 <tr bgcolor="#eeeeee"><td><a href="#DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED"> DP: Classloaders should only be created inside doPrivileged block</a></td><td>Ma licious code vulnerability</td></tr> 301 <tr bgcolor="#eeeeee"><td><a href="#DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED"> DP: Classloaders should only be created inside doPrivileged block</a></td><td>Ma licious code vulnerability</td></tr>
293 <tr bgcolor="#ffffff"><td><a href="#DP_DO_INSIDE_DO_PRIVILEGED">DP: Method invok ed that should be only be invoked inside a doPrivileged block</a></td><td>Malici ous code vulnerability</td></tr> 302 <tr bgcolor="#ffffff"><td><a href="#DP_DO_INSIDE_DO_PRIVILEGED">DP: Method invok ed that should be only be invoked inside a doPrivileged block</a></td><td>Malici ous code vulnerability</td></tr>
294 <tr bgcolor="#eeeeee"><td><a href="#EI_EXPOSE_REP">EI: May expose internal repre sentation by returning reference to mutable object</a></td><td>Malicious code vu lnerability</td></tr> 303 <tr bgcolor="#eeeeee"><td><a href="#EI_EXPOSE_REP">EI: May expose internal repre sentation by returning reference to mutable object</a></td><td>Malicious code vu lnerability</td></tr>
295 <tr bgcolor="#ffffff"><td><a href="#EI_EXPOSE_REP2">EI2: May expose internal rep resentation by incorporating reference to mutable object</a></td><td>Malicious c ode vulnerability</td></tr> 304 <tr bgcolor="#ffffff"><td><a href="#EI_EXPOSE_REP2">EI2: May expose internal rep resentation by incorporating reference to mutable object</a></td><td>Malicious c ode vulnerability</td></tr>
296 <tr bgcolor="#eeeeee"><td><a href="#FI_PUBLIC_SHOULD_BE_PROTECTED">FI: Finalizer should be protected, not public</a></td><td>Malicious code vulnerability</td></ tr> 305 <tr bgcolor="#eeeeee"><td><a href="#FI_PUBLIC_SHOULD_BE_PROTECTED">FI: Finalizer should be protected, not public</a></td><td>Malicious code vulnerability</td></ tr>
297 <tr bgcolor="#ffffff"><td><a href="#EI_EXPOSE_STATIC_REP2">MS: May expose intern al static state by storing a mutable object into a static field</a></td><td>Mali cious code vulnerability</td></tr> 306 <tr bgcolor="#ffffff"><td><a href="#EI_EXPOSE_STATIC_REP2">MS: May expose intern al static state by storing a mutable object into a static field</a></td><td>Mali cious code vulnerability</td></tr>
298 <tr bgcolor="#eeeeee"><td><a href="#MS_CANNOT_BE_FINAL">MS: Field isn't final an d can't be protected from malicious code</a></td><td>Malicious code vulnerabilit y</td></tr> 307 <tr bgcolor="#eeeeee"><td><a href="#MS_CANNOT_BE_FINAL">MS: Field isn't final an d can't be protected from malicious code</a></td><td>Malicious code vulnerabilit y</td></tr>
299 <tr bgcolor="#ffffff"><td><a href="#MS_EXPOSE_REP">MS: Public static method may expose internal representation by returning array</a></td><td>Malicious code vul nerability</td></tr> 308 <tr bgcolor="#ffffff"><td><a href="#MS_EXPOSE_REP">MS: Public static method may expose internal representation by returning array</a></td><td>Malicious code vul nerability</td></tr>
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 <tr bgcolor="#eeeeee"><td><a href="#UG_SYNC_SET_UNSYNC_GET">UG: Unsynchronized g et method, synchronized set method</a></td><td>Multithreaded correctness</td></t r> 351 <tr bgcolor="#eeeeee"><td><a href="#UG_SYNC_SET_UNSYNC_GET">UG: Unsynchronized g et method, synchronized set method</a></td><td>Multithreaded correctness</td></t r>
343 <tr bgcolor="#ffffff"><td><a href="#UL_UNRELEASED_LOCK">UL: Method does not rele ase lock on all paths</a></td><td>Multithreaded correctness</td></tr> 352 <tr bgcolor="#ffffff"><td><a href="#UL_UNRELEASED_LOCK">UL: Method does not rele ase lock on all paths</a></td><td>Multithreaded correctness</td></tr>
344 <tr bgcolor="#eeeeee"><td><a href="#UL_UNRELEASED_LOCK_EXCEPTION_PATH">UL: Metho d does not release lock on all exception paths</a></td><td>Multithreaded correct ness</td></tr> 353 <tr bgcolor="#eeeeee"><td><a href="#UL_UNRELEASED_LOCK_EXCEPTION_PATH">UL: Metho d does not release lock on all exception paths</a></td><td>Multithreaded correct ness</td></tr>
345 <tr bgcolor="#ffffff"><td><a href="#UW_UNCOND_WAIT">UW: Unconditional wait</a></ td><td>Multithreaded correctness</td></tr> 354 <tr bgcolor="#ffffff"><td><a href="#UW_UNCOND_WAIT">UW: Unconditional wait</a></ td><td>Multithreaded correctness</td></tr>
346 <tr bgcolor="#eeeeee"><td><a href="#VO_VOLATILE_INCREMENT">VO: An increment to a volatile field isn't atomic</a></td><td>Multithreaded correctness</td></tr> 355 <tr bgcolor="#eeeeee"><td><a href="#VO_VOLATILE_INCREMENT">VO: An increment to a volatile field isn't atomic</a></td><td>Multithreaded correctness</td></tr>
347 <tr bgcolor="#ffffff"><td><a href="#VO_VOLATILE_REFERENCE_TO_ARRAY">VO: A volati le reference to an array doesn't treat the array elements as volatile</a></td><t d>Multithreaded correctness</td></tr> 356 <tr bgcolor="#ffffff"><td><a href="#VO_VOLATILE_REFERENCE_TO_ARRAY">VO: A volati le reference to an array doesn't treat the array elements as volatile</a></td><t d>Multithreaded correctness</td></tr>
348 <tr bgcolor="#eeeeee"><td><a href="#WL_USING_GETCLASS_RATHER_THAN_CLASS_LITERAL" >WL: Synchronization on getClass rather than class literal</a></td><td>Multithre aded correctness</td></tr> 357 <tr bgcolor="#eeeeee"><td><a href="#WL_USING_GETCLASS_RATHER_THAN_CLASS_LITERAL" >WL: Synchronization on getClass rather than class literal</a></td><td>Multithre aded correctness</td></tr>
349 <tr bgcolor="#ffffff"><td><a href="#WS_WRITEOBJECT_SYNC">WS: Class's writeObject () method is synchronized but nothing else is</a></td><td>Multithreaded correctn ess</td></tr> 358 <tr bgcolor="#ffffff"><td><a href="#WS_WRITEOBJECT_SYNC">WS: Class's writeObject () method is synchronized but nothing else is</a></td><td>Multithreaded correctn ess</td></tr>
350 <tr bgcolor="#eeeeee"><td><a href="#WA_AWAIT_NOT_IN_LOOP">Wa: Condition.await() not in loop </a></td><td>Multithreaded correctness</td></tr> 359 <tr bgcolor="#eeeeee"><td><a href="#WA_AWAIT_NOT_IN_LOOP">Wa: Condition.await() not in loop </a></td><td>Multithreaded correctness</td></tr>
351 <tr bgcolor="#ffffff"><td><a href="#WA_NOT_IN_LOOP">Wa: Wait not in loop </a></t d><td>Multithreaded correctness</td></tr> 360 <tr bgcolor="#ffffff"><td><a href="#WA_NOT_IN_LOOP">Wa: Wait not in loop </a></t d><td>Multithreaded correctness</td></tr>
361 <tr bgcolor="#eeeeee"><td><a href="#NOISE_FIELD_REFERENCE">NOISE: Bogus warning about a field reference</a></td><td>Bogus random noise</td></tr>
362 <tr bgcolor="#ffffff"><td><a href="#NOISE_METHOD_CALL">NOISE: Bogus warning abou t a method call</a></td><td>Bogus random noise</td></tr>
363 <tr bgcolor="#eeeeee"><td><a href="#NOISE_NULL_DEREFERENCE">NOISE: Bogus warning about a null pointer dereference</a></td><td>Bogus random noise</td></tr>
364 <tr bgcolor="#ffffff"><td><a href="#NOISE_OPERATION">NOISE: Bogus warning about an operation</a></td><td>Bogus random noise</td></tr>
352 <tr bgcolor="#eeeeee"><td><a href="#BX_BOXING_IMMEDIATELY_UNBOXED">Bx: Primitive value is boxed and then immediately unboxed</a></td><td>Performance</td></tr> 365 <tr bgcolor="#eeeeee"><td><a href="#BX_BOXING_IMMEDIATELY_UNBOXED">Bx: Primitive value is boxed and then immediately unboxed</a></td><td>Performance</td></tr>
353 <tr bgcolor="#ffffff"><td><a href="#BX_BOXING_IMMEDIATELY_UNBOXED_TO_PERFORM_COE RCION">Bx: Primitive value is boxed then unboxed to perform primitive coercion</ a></td><td>Performance</td></tr> 366 <tr bgcolor="#ffffff"><td><a href="#BX_BOXING_IMMEDIATELY_UNBOXED_TO_PERFORM_COE RCION">Bx: Primitive value is boxed then unboxed to perform primitive coercion</ a></td><td>Performance</td></tr>
354 <tr bgcolor="#eeeeee"><td><a href="#BX_UNBOXING_IMMEDIATELY_REBOXED">Bx: Boxed v alue is unboxed and then immediately reboxed</a></td><td>Performance</td></tr> 367 <tr bgcolor="#eeeeee"><td><a href="#BX_UNBOXING_IMMEDIATELY_REBOXED">Bx: Boxed v alue is unboxed and then immediately reboxed</a></td><td>Performance</td></tr>
355 <tr bgcolor="#ffffff"><td><a href="#DM_BOXED_PRIMITIVE_TOSTRING">Bx: Method allo cates a boxed primitive just to call toString</a></td><td>Performance</td></tr> 368 <tr bgcolor="#ffffff"><td><a href="#DM_BOXED_PRIMITIVE_FOR_PARSING">Bx: Boxing/u nboxing to parse a primitive</a></td><td>Performance</td></tr>
356 <tr bgcolor="#eeeeee"><td><a href="#DM_FP_NUMBER_CTOR">Bx: Method invokes ineffi cient floating-point Number constructor; use static valueOf instead</a></td><td> Performance</td></tr> 369 <tr bgcolor="#eeeeee"><td><a href="#DM_BOXED_PRIMITIVE_TOSTRING">Bx: Method allo cates a boxed primitive just to call toString</a></td><td>Performance</td></tr>
357 <tr bgcolor="#ffffff"><td><a href="#DM_NUMBER_CTOR">Bx: Method invokes inefficie nt Number constructor; use static valueOf instead</a></td><td>Performance</td></ tr> 370 <tr bgcolor="#ffffff"><td><a href="#DM_FP_NUMBER_CTOR">Bx: Method invokes ineffi cient floating-point Number constructor; use static valueOf instead</a></td><td> Performance</td></tr>
358 <tr bgcolor="#eeeeee"><td><a href="#DMI_BLOCKING_METHODS_ON_URL">Dm: The equals and hashCode methods of URL are blocking</a></td><td>Performance</td></tr> 371 <tr bgcolor="#eeeeee"><td><a href="#DM_NUMBER_CTOR">Bx: Method invokes inefficie nt Number constructor; use static valueOf instead</a></td><td>Performance</td></ tr>
359 <tr bgcolor="#ffffff"><td><a href="#DMI_COLLECTION_OF_URLS">Dm: Maps and sets of URLs can be performance hogs</a></td><td>Performance</td></tr> 372 <tr bgcolor="#ffffff"><td><a href="#DMI_BLOCKING_METHODS_ON_URL">Dm: The equals and hashCode methods of URL are blocking</a></td><td>Performance</td></tr>
360 <tr bgcolor="#eeeeee"><td><a href="#DM_BOOLEAN_CTOR">Dm: Method invokes ineffici ent Boolean constructor; use Boolean.valueOf(...) instead</a></td><td>Performanc e</td></tr> 373 <tr bgcolor="#eeeeee"><td><a href="#DMI_COLLECTION_OF_URLS">Dm: Maps and sets of URLs can be performance hogs</a></td><td>Performance</td></tr>
361 <tr bgcolor="#ffffff"><td><a href="#DM_GC">Dm: Explicit garbage collection; extr emely dubious except in benchmarking code</a></td><td>Performance</td></tr> 374 <tr bgcolor="#ffffff"><td><a href="#DM_BOOLEAN_CTOR">Dm: Method invokes ineffici ent Boolean constructor; use Boolean.valueOf(...) instead</a></td><td>Performanc e</td></tr>
362 <tr bgcolor="#eeeeee"><td><a href="#DM_NEW_FOR_GETCLASS">Dm: Method allocates an object, only to get the class object</a></td><td>Performance</td></tr> 375 <tr bgcolor="#eeeeee"><td><a href="#DM_GC">Dm: Explicit garbage collection; extr emely dubious except in benchmarking code</a></td><td>Performance</td></tr>
363 <tr bgcolor="#ffffff"><td><a href="#DM_NEXTINT_VIA_NEXTDOUBLE">Dm: Use the nextI nt method of Random rather than nextDouble to generate a random integer</a></td> <td>Performance</td></tr> 376 <tr bgcolor="#ffffff"><td><a href="#DM_NEW_FOR_GETCLASS">Dm: Method allocates an object, only to get the class object</a></td><td>Performance</td></tr>
364 <tr bgcolor="#eeeeee"><td><a href="#DM_STRING_CTOR">Dm: Method invokes inefficie nt new String(String) constructor</a></td><td>Performance</td></tr> 377 <tr bgcolor="#eeeeee"><td><a href="#DM_NEXTINT_VIA_NEXTDOUBLE">Dm: Use the nextI nt method of Random rather than nextDouble to generate a random integer</a></td> <td>Performance</td></tr>
365 <tr bgcolor="#ffffff"><td><a href="#DM_STRING_TOSTRING">Dm: Method invokes toStr ing() method on a String</a></td><td>Performance</td></tr> 378 <tr bgcolor="#ffffff"><td><a href="#DM_STRING_CTOR">Dm: Method invokes inefficie nt new String(String) constructor</a></td><td>Performance</td></tr>
366 <tr bgcolor="#eeeeee"><td><a href="#DM_STRING_VOID_CTOR">Dm: Method invokes inef ficient new String() constructor</a></td><td>Performance</td></tr> 379 <tr bgcolor="#eeeeee"><td><a href="#DM_STRING_TOSTRING">Dm: Method invokes toStr ing() method on a String</a></td><td>Performance</td></tr>
367 <tr bgcolor="#ffffff"><td><a href="#HSC_HUGE_SHARED_STRING_CONSTANT">HSC: Huge s tring constants is duplicated across multiple class files</a></td><td>Performanc e</td></tr> 380 <tr bgcolor="#ffffff"><td><a href="#DM_STRING_VOID_CTOR">Dm: Method invokes inef ficient new String() constructor</a></td><td>Performance</td></tr>
381 <tr bgcolor="#eeeeee"><td><a href="#HSC_HUGE_SHARED_STRING_CONSTANT">HSC: Huge s tring constants is duplicated across multiple class files</a></td><td>Performanc e</td></tr>
382 <tr bgcolor="#ffffff"><td><a href="#IMA_INEFFICIENT_MEMBER_ACCESS">IMA: Method a ccesses a private member variable of owning class</a></td><td>Performance</td></ tr>
368 <tr bgcolor="#eeeeee"><td><a href="#ITA_INEFFICIENT_TO_ARRAY">ITA: Method uses t oArray() with zero-length array argument</a></td><td>Performance</td></tr> 383 <tr bgcolor="#eeeeee"><td><a href="#ITA_INEFFICIENT_TO_ARRAY">ITA: Method uses t oArray() with zero-length array argument</a></td><td>Performance</td></tr>
369 <tr bgcolor="#ffffff"><td><a href="#SBSC_USE_STRINGBUFFER_CONCATENATION">SBSC: M ethod concatenates strings using + in a loop</a></td><td>Performance</td></tr> 384 <tr bgcolor="#ffffff"><td><a href="#SBSC_USE_STRINGBUFFER_CONCATENATION">SBSC: M ethod concatenates strings using + in a loop</a></td><td>Performance</td></tr>
370 <tr bgcolor="#eeeeee"><td><a href="#SIC_INNER_SHOULD_BE_STATIC">SIC: Should be a static inner class</a></td><td>Performance</td></tr> 385 <tr bgcolor="#eeeeee"><td><a href="#SIC_INNER_SHOULD_BE_STATIC">SIC: Should be a static inner class</a></td><td>Performance</td></tr>
371 <tr bgcolor="#ffffff"><td><a href="#SIC_INNER_SHOULD_BE_STATIC_ANON">SIC: Could be refactored into a named static inner class</a></td><td>Performance</td></tr> 386 <tr bgcolor="#ffffff"><td><a href="#SIC_INNER_SHOULD_BE_STATIC_ANON">SIC: Could be refactored into a named static inner class</a></td><td>Performance</td></tr>
372 <tr bgcolor="#eeeeee"><td><a href="#SIC_INNER_SHOULD_BE_STATIC_NEEDS_THIS">SIC: Could be refactored into a static inner class</a></td><td>Performance</td></tr> 387 <tr bgcolor="#eeeeee"><td><a href="#SIC_INNER_SHOULD_BE_STATIC_NEEDS_THIS">SIC: Could be refactored into a static inner class</a></td><td>Performance</td></tr>
373 <tr bgcolor="#ffffff"><td><a href="#SS_SHOULD_BE_STATIC">SS: Unread field: shoul d this field be static?</a></td><td>Performance</td></tr> 388 <tr bgcolor="#ffffff"><td><a href="#SS_SHOULD_BE_STATIC">SS: Unread field: shoul d this field be static?</a></td><td>Performance</td></tr>
374 <tr bgcolor="#eeeeee"><td><a href="#UM_UNNECESSARY_MATH">UM: Method calls static Math class method on a constant value</a></td><td>Performance</td></tr> 389 <tr bgcolor="#eeeeee"><td><a href="#UM_UNNECESSARY_MATH">UM: Method calls static Math class method on a constant value</a></td><td>Performance</td></tr>
375 <tr bgcolor="#ffffff"><td><a href="#UPM_UNCALLED_PRIVATE_METHOD">UPM: Private me thod is never called</a></td><td>Performance</td></tr> 390 <tr bgcolor="#ffffff"><td><a href="#UPM_UNCALLED_PRIVATE_METHOD">UPM: Private me thod is never called</a></td><td>Performance</td></tr>
376 <tr bgcolor="#eeeeee"><td><a href="#URF_UNREAD_FIELD">UrF: Unread field</a></td> <td>Performance</td></tr> 391 <tr bgcolor="#eeeeee"><td><a href="#URF_UNREAD_FIELD">UrF: Unread field</a></td> <td>Performance</td></tr>
377 <tr bgcolor="#ffffff"><td><a href="#UUF_UNUSED_FIELD">UuF: Unused field</a></td> <td>Performance</td></tr> 392 <tr bgcolor="#ffffff"><td><a href="#UUF_UNUSED_FIELD">UuF: Unused field</a></td> <td>Performance</td></tr>
378 <tr bgcolor="#eeeeee"><td><a href="#WMI_WRONG_MAP_ITERATOR">WMI: Inefficient use of keySet iterator instead of entrySet iterator</a></td><td>Performance</td></t r> 393 <tr bgcolor="#eeeeee"><td><a href="#WMI_WRONG_MAP_ITERATOR">WMI: Inefficient use of keySet iterator instead of entrySet iterator</a></td><td>Performance</td></t r>
379 <tr bgcolor="#ffffff"><td><a href="#DMI_CONSTANT_DB_PASSWORD">Dm: Hardcoded cons tant database password</a></td><td>Security</td></tr> 394 <tr bgcolor="#ffffff"><td><a href="#DMI_CONSTANT_DB_PASSWORD">Dm: Hardcoded cons tant database password</a></td><td>Security</td></tr>
380 <tr bgcolor="#eeeeee"><td><a href="#DMI_EMPTY_DB_PASSWORD">Dm: Empty database pa ssword</a></td><td>Security</td></tr> 395 <tr bgcolor="#eeeeee"><td><a href="#DMI_EMPTY_DB_PASSWORD">Dm: Empty database pa ssword</a></td><td>Security</td></tr>
381 <tr bgcolor="#ffffff"><td><a href="#HRS_REQUEST_PARAMETER_TO_COOKIE">HRS: HTTP c ookie formed from untrusted input</a></td><td>Security</td></tr> 396 <tr bgcolor="#ffffff"><td><a href="#HRS_REQUEST_PARAMETER_TO_COOKIE">HRS: HTTP c ookie formed from untrusted input</a></td><td>Security</td></tr>
382 <tr bgcolor="#eeeeee"><td><a href="#HRS_REQUEST_PARAMETER_TO_HTTP_HEADER">HRS: H TTP Response splitting vulnerability</a></td><td>Security</td></tr> 397 <tr bgcolor="#eeeeee"><td><a href="#HRS_REQUEST_PARAMETER_TO_HTTP_HEADER">HRS: H TTP Response splitting vulnerability</a></td><td>Security</td></tr>
383 <tr bgcolor="#ffffff"><td><a href="#PT_ABSOLUTE_PATH_TRAVERSAL">PT: Absolute pat h traversal in servlet</a></td><td>Security</td></tr> 398 <tr bgcolor="#ffffff"><td><a href="#PT_ABSOLUTE_PATH_TRAVERSAL">PT: Absolute pat h traversal in servlet</a></td><td>Security</td></tr>
384 <tr bgcolor="#eeeeee"><td><a href="#PT_RELATIVE_PATH_TRAVERSAL">PT: Relative pat h traversal in servlet</a></td><td>Security</td></tr> 399 <tr bgcolor="#eeeeee"><td><a href="#PT_RELATIVE_PATH_TRAVERSAL">PT: Relative pat h traversal in servlet</a></td><td>Security</td></tr>
385 <tr bgcolor="#ffffff"><td><a href="#SQL_NONCONSTANT_STRING_PASSED_TO_EXECUTE">SQ L: Nonconstant string passed to execute method on an SQL statement</a></td><td>S ecurity</td></tr> 400 <tr bgcolor="#ffffff"><td><a href="#SQL_NONCONSTANT_STRING_PASSED_TO_EXECUTE">SQ L: Nonconstant string passed to execute method on an SQL statement</a></td><td>S ecurity</td></tr>
386 <tr bgcolor="#eeeeee"><td><a href="#SQL_PREPARED_STATEMENT_GENERATED_FROM_NONCON STANT_STRING">SQL: A prepared statement is generated from a nonconstant String</ a></td><td>Security</td></tr> 401 <tr bgcolor="#eeeeee"><td><a href="#SQL_PREPARED_STATEMENT_GENERATED_FROM_NONCON STANT_STRING">SQL: A prepared statement is generated from a nonconstant String</ a></td><td>Security</td></tr>
387 <tr bgcolor="#ffffff"><td><a href="#XSS_REQUEST_PARAMETER_TO_JSP_WRITER">XSS: JS P reflected cross site scripting vulnerability</a></td><td>Security</td></tr> 402 <tr bgcolor="#ffffff"><td><a href="#XSS_REQUEST_PARAMETER_TO_JSP_WRITER">XSS: JS P reflected cross site scripting vulnerability</a></td><td>Security</td></tr>
388 <tr bgcolor="#eeeeee"><td><a href="#XSS_REQUEST_PARAMETER_TO_SEND_ERROR">XSS: Se rvlet reflected cross site scripting vulnerability in error page</a></td><td>Sec urity</td></tr> 403 <tr bgcolor="#eeeeee"><td><a href="#XSS_REQUEST_PARAMETER_TO_SEND_ERROR">XSS: Se rvlet reflected cross site scripting vulnerability in error page</a></td><td>Sec urity</td></tr>
389 <tr bgcolor="#ffffff"><td><a href="#XSS_REQUEST_PARAMETER_TO_SERVLET_WRITER">XSS : Servlet reflected cross site scripting vulnerability</a></td><td>Security</td> </tr> 404 <tr bgcolor="#ffffff"><td><a href="#XSS_REQUEST_PARAMETER_TO_SERVLET_WRITER">XSS : Servlet reflected cross site scripting vulnerability</a></td><td>Security</td> </tr>
390 <tr bgcolor="#eeeeee"><td><a href="#BC_BAD_CAST_TO_ABSTRACT_COLLECTION">BC: Ques tionable cast to abstract collection </a></td><td>Dodgy code</td></tr> 405 <tr bgcolor="#eeeeee"><td><a href="#BC_BAD_CAST_TO_ABSTRACT_COLLECTION">BC: Ques tionable cast to abstract collection </a></td><td>Dodgy code</td></tr>
391 <tr bgcolor="#ffffff"><td><a href="#BC_BAD_CAST_TO_CONCRETE_COLLECTION">BC: Ques tionable cast to concrete collection</a></td><td>Dodgy code</td></tr> 406 <tr bgcolor="#ffffff"><td><a href="#BC_BAD_CAST_TO_CONCRETE_COLLECTION">BC: Ques tionable cast to concrete collection</a></td><td>Dodgy code</td></tr>
392 <tr bgcolor="#eeeeee"><td><a href="#BC_UNCONFIRMED_CAST">BC: Unchecked/unconfirm ed cast</a></td><td>Dodgy code</td></tr> 407 <tr bgcolor="#eeeeee"><td><a href="#BC_UNCONFIRMED_CAST">BC: Unchecked/unconfirm ed cast</a></td><td>Dodgy code</td></tr>
393 <tr bgcolor="#ffffff"><td><a href="#BC_UNCONFIRMED_CAST_OF_RETURN_VALUE">BC: Unc hecked/unconfirmed cast of return value from method</a></td><td>Dodgy code</td>< /tr> 408 <tr bgcolor="#ffffff"><td><a href="#BC_UNCONFIRMED_CAST_OF_RETURN_VALUE">BC: Unc hecked/unconfirmed cast of return value from method</a></td><td>Dodgy code</td>< /tr>
394 <tr bgcolor="#eeeeee"><td><a href="#BC_VACUOUS_INSTANCEOF">BC: instanceof will a lways return true</a></td><td>Dodgy code</td></tr> 409 <tr bgcolor="#eeeeee"><td><a href="#BC_VACUOUS_INSTANCEOF">BC: instanceof will a lways return true</a></td><td>Dodgy code</td></tr>
395 <tr bgcolor="#ffffff"><td><a href="#ICAST_QUESTIONABLE_UNSIGNED_RIGHT_SHIFT">BSH IFT: Unsigned right shift cast to short/byte</a></td><td>Dodgy code</td></tr> 410 <tr bgcolor="#ffffff"><td><a href="#ICAST_QUESTIONABLE_UNSIGNED_RIGHT_SHIFT">BSH IFT: Unsigned right shift cast to short/byte</a></td><td>Dodgy code</td></tr>
396 <tr bgcolor="#eeeeee"><td><a href="#CI_CONFUSED_INHERITANCE">CI: Class is final but declares protected field</a></td><td>Dodgy code</td></tr> 411 <tr bgcolor="#eeeeee"><td><a href="#CD_CIRCULAR_DEPENDENCY">CD: Test for circula r dependencies among classes</a></td><td>Dodgy code</td></tr>
397 <tr bgcolor="#ffffff"><td><a href="#DB_DUPLICATE_BRANCHES">DB: Method uses the s ame code for two branches</a></td><td>Dodgy code</td></tr> 412 <tr bgcolor="#ffffff"><td><a href="#CI_CONFUSED_INHERITANCE">CI: Class is final but declares protected field</a></td><td>Dodgy code</td></tr>
398 <tr bgcolor="#eeeeee"><td><a href="#DB_DUPLICATE_SWITCH_CLAUSES">DB: Method uses the same code for two switch clauses</a></td><td>Dodgy code</td></tr> 413 <tr bgcolor="#eeeeee"><td><a href="#DB_DUPLICATE_BRANCHES">DB: Method uses the s ame code for two branches</a></td><td>Dodgy code</td></tr>
399 <tr bgcolor="#ffffff"><td><a href="#DLS_DEAD_LOCAL_STORE">DLS: Dead store to loc al variable</a></td><td>Dodgy code</td></tr> 414 <tr bgcolor="#ffffff"><td><a href="#DB_DUPLICATE_SWITCH_CLAUSES">DB: Method uses the same code for two switch clauses</a></td><td>Dodgy code</td></tr>
400 <tr bgcolor="#eeeeee"><td><a href="#DLS_DEAD_LOCAL_STORE_IN_RETURN">DLS: Useless assignment in return statement</a></td><td>Dodgy code</td></tr> 415 <tr bgcolor="#eeeeee"><td><a href="#DLS_DEAD_LOCAL_STORE">DLS: Dead store to loc al variable</a></td><td>Dodgy code</td></tr>
401 <tr bgcolor="#ffffff"><td><a href="#DLS_DEAD_LOCAL_STORE_OF_NULL">DLS: Dead stor e of null to local variable</a></td><td>Dodgy code</td></tr> 416 <tr bgcolor="#ffffff"><td><a href="#DLS_DEAD_LOCAL_STORE_IN_RETURN">DLS: Useless assignment in return statement</a></td><td>Dodgy code</td></tr>
402 <tr bgcolor="#eeeeee"><td><a href="#DLS_DEAD_LOCAL_STORE_SHADOWS_FIELD">DLS: Dea d store to local variable that shadows field</a></td><td>Dodgy code</td></tr> 417 <tr bgcolor="#eeeeee"><td><a href="#DLS_DEAD_LOCAL_STORE_OF_NULL">DLS: Dead stor e of null to local variable</a></td><td>Dodgy code</td></tr>
403 <tr bgcolor="#ffffff"><td><a href="#DMI_HARDCODED_ABSOLUTE_FILENAME">DMI: Code c ontains a hard coded reference to an absolute pathname</a></td><td>Dodgy code</t d></tr> 418 <tr bgcolor="#ffffff"><td><a href="#DLS_DEAD_LOCAL_STORE_SHADOWS_FIELD">DLS: Dea d store to local variable that shadows field</a></td><td>Dodgy code</td></tr>
404 <tr bgcolor="#eeeeee"><td><a href="#DMI_NONSERIALIZABLE_OBJECT_WRITTEN">DMI: Non serializable object written to ObjectOutput</a></td><td>Dodgy code</td></tr> 419 <tr bgcolor="#eeeeee"><td><a href="#DMI_HARDCODED_ABSOLUTE_FILENAME">DMI: Code c ontains a hard coded reference to an absolute pathname</a></td><td>Dodgy code</t d></tr>
405 <tr bgcolor="#ffffff"><td><a href="#DMI_USELESS_SUBSTRING">DMI: Invocation of su bstring(0), which returns the original value</a></td><td>Dodgy code</td></tr> 420 <tr bgcolor="#ffffff"><td><a href="#DMI_NONSERIALIZABLE_OBJECT_WRITTEN">DMI: Non serializable object written to ObjectOutput</a></td><td>Dodgy code</td></tr>
406 <tr bgcolor="#eeeeee"><td><a href="#DMI_THREAD_PASSED_WHERE_RUNNABLE_EXPECTED">D m: Thread passed where Runnable expected</a></td><td>Dodgy code</td></tr> 421 <tr bgcolor="#eeeeee"><td><a href="#DMI_USELESS_SUBSTRING">DMI: Invocation of su bstring(0), which returns the original value</a></td><td>Dodgy code</td></tr>
422 <tr bgcolor="#ffffff"><td><a href="#DMI_THREAD_PASSED_WHERE_RUNNABLE_EXPECTED">D m: Thread passed where Runnable expected</a></td><td>Dodgy code</td></tr>
423 <tr bgcolor="#eeeeee"><td><a href="#DMI_UNSUPPORTED_METHOD">Dm: Call to unsuppor ted method</a></td><td>Dodgy code</td></tr>
407 <tr bgcolor="#ffffff"><td><a href="#EQ_DOESNT_OVERRIDE_EQUALS">Eq: Class doesn't override equals in superclass</a></td><td>Dodgy code</td></tr> 424 <tr bgcolor="#ffffff"><td><a href="#EQ_DOESNT_OVERRIDE_EQUALS">Eq: Class doesn't override equals in superclass</a></td><td>Dodgy code</td></tr>
408 <tr bgcolor="#eeeeee"><td><a href="#EQ_UNUSUAL">Eq: Unusual equals method </a></ td><td>Dodgy code</td></tr> 425 <tr bgcolor="#eeeeee"><td><a href="#EQ_UNUSUAL">Eq: Unusual equals method </a></ td><td>Dodgy code</td></tr>
409 <tr bgcolor="#ffffff"><td><a href="#FE_FLOATING_POINT_EQUALITY">FE: Test for flo ating point equality</a></td><td>Dodgy code</td></tr> 426 <tr bgcolor="#ffffff"><td><a href="#FE_FLOATING_POINT_EQUALITY">FE: Test for flo ating point equality</a></td><td>Dodgy code</td></tr>
410 <tr bgcolor="#eeeeee"><td><a href="#VA_FORMAT_STRING_BAD_CONVERSION_TO_BOOLEAN"> FS: Non-Boolean argument formatted using %b format specifier</a></td><td>Dodgy c ode</td></tr> 427 <tr bgcolor="#eeeeee"><td><a href="#VA_FORMAT_STRING_BAD_CONVERSION_TO_BOOLEAN"> FS: Non-Boolean argument formatted using %b format specifier</a></td><td>Dodgy c ode</td></tr>
411 <tr bgcolor="#ffffff"><td><a href="#IA_AMBIGUOUS_INVOCATION_OF_INHERITED_OR_OUTE R_METHOD">IA: Ambiguous invocation of either an inherited or outer method</a></t d><td>Dodgy code</td></tr> 428 <tr bgcolor="#ffffff"><td><a href="#IA_AMBIGUOUS_INVOCATION_OF_INHERITED_OR_OUTE R_METHOD">IA: Potentially ambiguous invocation of either an inherited or outer m ethod</a></td><td>Dodgy code</td></tr>
412 <tr bgcolor="#eeeeee"><td><a href="#IC_INIT_CIRCULARITY">IC: Initialization circ ularity</a></td><td>Dodgy code</td></tr> 429 <tr bgcolor="#eeeeee"><td><a href="#IC_INIT_CIRCULARITY">IC: Initialization circ ularity</a></td><td>Dodgy code</td></tr>
413 <tr bgcolor="#ffffff"><td><a href="#ICAST_IDIV_CAST_TO_DOUBLE">ICAST: integral d ivision result cast to double or float</a></td><td>Dodgy code</td></tr> 430 <tr bgcolor="#ffffff"><td><a href="#ICAST_IDIV_CAST_TO_DOUBLE">ICAST: Integral d ivision result cast to double or float</a></td><td>Dodgy code</td></tr>
414 <tr bgcolor="#eeeeee"><td><a href="#ICAST_INTEGER_MULTIPLY_CAST_TO_LONG">ICAST: Result of integer multiplication cast to long</a></td><td>Dodgy code</td></tr> 431 <tr bgcolor="#eeeeee"><td><a href="#ICAST_INTEGER_MULTIPLY_CAST_TO_LONG">ICAST: Result of integer multiplication cast to long</a></td><td>Dodgy code</td></tr>
415 <tr bgcolor="#ffffff"><td><a href="#IM_AVERAGE_COMPUTATION_COULD_OVERFLOW">IM: C omputation of average could overflow</a></td><td>Dodgy code</td></tr> 432 <tr bgcolor="#ffffff"><td><a href="#IM_AVERAGE_COMPUTATION_COULD_OVERFLOW">IM: C omputation of average could overflow</a></td><td>Dodgy code</td></tr>
416 <tr bgcolor="#eeeeee"><td><a href="#IM_BAD_CHECK_FOR_ODD">IM: Check for oddness that won't work for negative numbers </a></td><td>Dodgy code</td></tr> 433 <tr bgcolor="#eeeeee"><td><a href="#IM_BAD_CHECK_FOR_ODD">IM: Check for oddness that won't work for negative numbers </a></td><td>Dodgy code</td></tr>
417 <tr bgcolor="#ffffff"><td><a href="#INT_BAD_REM_BY_1">INT: Integer remainder mod ulo 1</a></td><td>Dodgy code</td></tr> 434 <tr bgcolor="#ffffff"><td><a href="#INT_BAD_REM_BY_1">INT: Integer remainder mod ulo 1</a></td><td>Dodgy code</td></tr>
418 <tr bgcolor="#eeeeee"><td><a href="#INT_VACUOUS_BIT_OPERATION">INT: Vacuous bit mask operation on integer value</a></td><td>Dodgy code</td></tr> 435 <tr bgcolor="#eeeeee"><td><a href="#INT_VACUOUS_BIT_OPERATION">INT: Vacuous bit mask operation on integer value</a></td><td>Dodgy code</td></tr>
419 <tr bgcolor="#ffffff"><td><a href="#INT_VACUOUS_COMPARISON">INT: Vacuous compari son of integer value</a></td><td>Dodgy code</td></tr> 436 <tr bgcolor="#ffffff"><td><a href="#INT_VACUOUS_COMPARISON">INT: Vacuous compari son of integer value</a></td><td>Dodgy code</td></tr>
420 <tr bgcolor="#eeeeee"><td><a href="#MTIA_SUSPECT_SERVLET_INSTANCE_FIELD">MTIA: C lass extends Servlet class and uses instance variables</a></td><td>Dodgy code</t d></tr> 437 <tr bgcolor="#eeeeee"><td><a href="#MTIA_SUSPECT_SERVLET_INSTANCE_FIELD">MTIA: C lass extends Servlet class and uses instance variables</a></td><td>Dodgy code</t d></tr>
421 <tr bgcolor="#ffffff"><td><a href="#MTIA_SUSPECT_STRUTS_INSTANCE_FIELD">MTIA: Cl ass extends Struts Action class and uses instance variables</a></td><td>Dodgy co de</td></tr> 438 <tr bgcolor="#ffffff"><td><a href="#MTIA_SUSPECT_STRUTS_INSTANCE_FIELD">MTIA: Cl ass extends Struts Action class and uses instance variables</a></td><td>Dodgy co de</td></tr>
422 <tr bgcolor="#eeeeee"><td><a href="#NP_DEREFERENCE_OF_READLINE_VALUE">NP: Derefe rence of the result of readLine() without nullcheck</a></td><td>Dodgy code</td>< /tr> 439 <tr bgcolor="#eeeeee"><td><a href="#NP_DEREFERENCE_OF_READLINE_VALUE">NP: Derefe rence of the result of readLine() without nullcheck</a></td><td>Dodgy code</td>< /tr>
423 <tr bgcolor="#ffffff"><td><a href="#NP_IMMEDIATE_DEREFERENCE_OF_READLINE">NP: Im mediate dereference of the result of readLine()</a></td><td>Dodgy code</td></tr> 440 <tr bgcolor="#ffffff"><td><a href="#NP_IMMEDIATE_DEREFERENCE_OF_READLINE">NP: Im mediate dereference of the result of readLine()</a></td><td>Dodgy code</td></tr>
424 <tr bgcolor="#eeeeee"><td><a href="#NP_LOAD_OF_KNOWN_NULL_VALUE">NP: Load of kno wn null value</a></td><td>Dodgy code</td></tr> 441 <tr bgcolor="#eeeeee"><td><a href="#NP_LOAD_OF_KNOWN_NULL_VALUE">NP: Load of kno wn null value</a></td><td>Dodgy code</td></tr>
442 <tr bgcolor="#ffffff"><td><a href="#NP_METHOD_PARAMETER_TIGHTENS_ANNOTATION">NP: Method tightens nullness annotation on parameter</a></td><td>Dodgy code</td></t r>
443 <tr bgcolor="#eeeeee"><td><a href="#NP_METHOD_RETURN_RELAXING_ANNOTATION">NP: Me thod relaxes nullness annotation on return value</a></td><td>Dodgy code</td></tr >
425 <tr bgcolor="#ffffff"><td><a href="#NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE">NP: Possible null pointer dereference due to return value of called method</a></td>< td>Dodgy code</td></tr> 444 <tr bgcolor="#ffffff"><td><a href="#NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE">NP: Possible null pointer dereference due to return value of called method</a></td>< td>Dodgy code</td></tr>
426 <tr bgcolor="#eeeeee"><td><a href="#NP_NULL_ON_SOME_PATH_MIGHT_BE_INFEASIBLE">NP : Possible null pointer dereference on branch that might be infeasible</a></td>< td>Dodgy code</td></tr> 445 <tr bgcolor="#eeeeee"><td><a href="#NP_NULL_ON_SOME_PATH_MIGHT_BE_INFEASIBLE">NP : Possible null pointer dereference on branch that might be infeasible</a></td>< td>Dodgy code</td></tr>
427 <tr bgcolor="#ffffff"><td><a href="#NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_N ULLABLE">NP: Parameter must be nonnull but is marked as nullable</a></td><td>Dod gy code</td></tr> 446 <tr bgcolor="#ffffff"><td><a href="#NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_N ULLABLE">NP: Parameter must be nonnull but is marked as nullable</a></td><td>Dod gy code</td></tr>
428 <tr bgcolor="#eeeeee"><td><a href="#NP_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD">NP: Read of unwritten public or protected field</a></td><td>Dodgy code</td></tr> 447 <tr bgcolor="#eeeeee"><td><a href="#NP_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD">NP: Read of unwritten public or protected field</a></td><td>Dodgy code</td></tr>
429 <tr bgcolor="#ffffff"><td><a href="#NS_DANGEROUS_NON_SHORT_CIRCUIT">NS: Potentia lly dangerous use of non-short-circuit logic</a></td><td>Dodgy code</td></tr> 448 <tr bgcolor="#ffffff"><td><a href="#NS_DANGEROUS_NON_SHORT_CIRCUIT">NS: Potentia lly dangerous use of non-short-circuit logic</a></td><td>Dodgy code</td></tr>
430 <tr bgcolor="#eeeeee"><td><a href="#NS_NON_SHORT_CIRCUIT">NS: Questionable use o f non-short-circuit logic</a></td><td>Dodgy code</td></tr> 449 <tr bgcolor="#eeeeee"><td><a href="#NS_NON_SHORT_CIRCUIT">NS: Questionable use o f non-short-circuit logic</a></td><td>Dodgy code</td></tr>
431 <tr bgcolor="#ffffff"><td><a href="#PZLA_PREFER_ZERO_LENGTH_ARRAYS">PZLA: Consid er returning a zero length array rather than null</a></td><td>Dodgy code</td></t r> 450 <tr bgcolor="#ffffff"><td><a href="#PS_PUBLIC_SEMAPHORES">PS: Class exposes sync hronization and semaphores in its public interface</a></td><td>Dodgy code</td></ tr>
432 <tr bgcolor="#eeeeee"><td><a href="#QF_QUESTIONABLE_FOR_LOOP">QF: Complicated, s ubtle or wrong increment in for-loop </a></td><td>Dodgy code</td></tr> 451 <tr bgcolor="#eeeeee"><td><a href="#PZLA_PREFER_ZERO_LENGTH_ARRAYS">PZLA: Consid er returning a zero length array rather than null</a></td><td>Dodgy code</td></t r>
433 <tr bgcolor="#ffffff"><td><a href="#RCN_REDUNDANT_COMPARISON_OF_NULL_AND_NONNULL _VALUE">RCN: Redundant comparison of non-null value to null</a></td><td>Dodgy co de</td></tr> 452 <tr bgcolor="#ffffff"><td><a href="#QF_QUESTIONABLE_FOR_LOOP">QF: Complicated, s ubtle or wrong increment in for-loop </a></td><td>Dodgy code</td></tr>
434 <tr bgcolor="#eeeeee"><td><a href="#RCN_REDUNDANT_COMPARISON_TWO_NULL_VALUES">RC N: Redundant comparison of two null values</a></td><td>Dodgy code</td></tr> 453 <tr bgcolor="#eeeeee"><td><a href="#RCN_REDUNDANT_COMPARISON_OF_NULL_AND_NONNULL _VALUE">RCN: Redundant comparison of non-null value to null</a></td><td>Dodgy co de</td></tr>
435 <tr bgcolor="#ffffff"><td><a href="#RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE">RC N: Redundant nullcheck of value known to be non-null</a></td><td>Dodgy code</td> </tr> 454 <tr bgcolor="#ffffff"><td><a href="#RCN_REDUNDANT_COMPARISON_TWO_NULL_VALUES">RC N: Redundant comparison of two null values</a></td><td>Dodgy code</td></tr>
436 <tr bgcolor="#eeeeee"><td><a href="#RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE">RCN: Redundant nullcheck of value known to be null</a></td><td>Dodgy code</td></tr> 455 <tr bgcolor="#eeeeee"><td><a href="#RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE">RC N: Redundant nullcheck of value known to be non-null</a></td><td>Dodgy code</td> </tr>
437 <tr bgcolor="#ffffff"><td><a href="#REC_CATCH_EXCEPTION">REC: Exception is caugh t when Exception is not thrown</a></td><td>Dodgy code</td></tr> 456 <tr bgcolor="#ffffff"><td><a href="#RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE">RCN: Redundant nullcheck of value known to be null</a></td><td>Dodgy code</td></tr>
438 <tr bgcolor="#eeeeee"><td><a href="#RI_REDUNDANT_INTERFACES">RI: Class implement s same interface as superclass</a></td><td>Dodgy code</td></tr> 457 <tr bgcolor="#eeeeee"><td><a href="#REC_CATCH_EXCEPTION">REC: Exception is caugh t when Exception is not thrown</a></td><td>Dodgy code</td></tr>
439 <tr bgcolor="#ffffff"><td><a href="#RV_CHECK_FOR_POSITIVE_INDEXOF">RV: Method ch ecks to see if result of String.indexOf is positive</a></td><td>Dodgy code</td>< /tr> 458 <tr bgcolor="#ffffff"><td><a href="#RI_REDUNDANT_INTERFACES">RI: Class implement s same interface as superclass</a></td><td>Dodgy code</td></tr>
440 <tr bgcolor="#eeeeee"><td><a href="#RV_DONT_JUST_NULL_CHECK_READLINE">RV: Method discards result of readLine after checking if it is nonnull</a></td><td>Dodgy c ode</td></tr> 459 <tr bgcolor="#eeeeee"><td><a href="#RV_CHECK_FOR_POSITIVE_INDEXOF">RV: Method ch ecks to see if result of String.indexOf is positive</a></td><td>Dodgy code</td>< /tr>
441 <tr bgcolor="#ffffff"><td><a href="#RV_REM_OF_HASHCODE">RV: Remainder of hashCod e could be negative</a></td><td>Dodgy code</td></tr> 460 <tr bgcolor="#ffffff"><td><a href="#RV_DONT_JUST_NULL_CHECK_READLINE">RV: Method discards result of readLine after checking if it is nonnull</a></td><td>Dodgy c ode</td></tr>
442 <tr bgcolor="#eeeeee"><td><a href="#RV_REM_OF_RANDOM_INT">RV: Remainder of 32-bi t signed random integer</a></td><td>Dodgy code</td></tr> 461 <tr bgcolor="#eeeeee"><td><a href="#RV_REM_OF_HASHCODE">RV: Remainder of hashCod e could be negative</a></td><td>Dodgy code</td></tr>
443 <tr bgcolor="#ffffff"><td><a href="#RV_RETURN_VALUE_IGNORED_INFERRED">RV: Method ignores return value, is this OK?</a></td><td>Dodgy code</td></tr> 462 <tr bgcolor="#ffffff"><td><a href="#RV_REM_OF_RANDOM_INT">RV: Remainder of 32-bi t signed random integer</a></td><td>Dodgy code</td></tr>
444 <tr bgcolor="#eeeeee"><td><a href="#SA_FIELD_DOUBLE_ASSIGNMENT">SA: Double assig nment of field</a></td><td>Dodgy code</td></tr> 463 <tr bgcolor="#eeeeee"><td><a href="#RV_RETURN_VALUE_IGNORED_INFERRED">RV: Method ignores return value, is this OK?</a></td><td>Dodgy code</td></tr>
445 <tr bgcolor="#ffffff"><td><a href="#SA_LOCAL_DOUBLE_ASSIGNMENT">SA: Double assig nment of local variable </a></td><td>Dodgy code</td></tr> 464 <tr bgcolor="#ffffff"><td><a href="#SA_FIELD_DOUBLE_ASSIGNMENT">SA: Double assig nment of field</a></td><td>Dodgy code</td></tr>
446 <tr bgcolor="#eeeeee"><td><a href="#SA_LOCAL_SELF_ASSIGNMENT">SA: Self assignmen t of local variable</a></td><td>Dodgy code</td></tr> 465 <tr bgcolor="#eeeeee"><td><a href="#SA_LOCAL_DOUBLE_ASSIGNMENT">SA: Double assig nment of local variable </a></td><td>Dodgy code</td></tr>
447 <tr bgcolor="#ffffff"><td><a href="#SF_SWITCH_FALLTHROUGH">SF: Switch statement found where one case falls through to the next case</a></td><td>Dodgy code</td>< /tr> 466 <tr bgcolor="#ffffff"><td><a href="#SA_LOCAL_SELF_ASSIGNMENT">SA: Self assignmen t of local variable</a></td><td>Dodgy code</td></tr>
448 <tr bgcolor="#eeeeee"><td><a href="#SF_SWITCH_NO_DEFAULT">SF: Switch statement f ound where default case is missing</a></td><td>Dodgy code</td></tr> 467 <tr bgcolor="#eeeeee"><td><a href="#SF_SWITCH_FALLTHROUGH">SF: Switch statement found where one case falls through to the next case</a></td><td>Dodgy code</td>< /tr>
449 <tr bgcolor="#ffffff"><td><a href="#ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD">ST: Write to static field from instance method</a></td><td>Dodgy code</td></tr> 468 <tr bgcolor="#ffffff"><td><a href="#SF_SWITCH_NO_DEFAULT">SF: Switch statement f ound where default case is missing</a></td><td>Dodgy code</td></tr>
450 <tr bgcolor="#eeeeee"><td><a href="#SE_PRIVATE_READ_RESOLVE_NOT_INHERITED">Se: p rivate readResolve method not inherited by subclasses</a></td><td>Dodgy code</td ></tr> 469 <tr bgcolor="#eeeeee"><td><a href="#ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD">ST: Write to static field from instance method</a></td><td>Dodgy code</td></tr>
451 <tr bgcolor="#ffffff"><td><a href="#SE_TRANSIENT_FIELD_OF_NONSERIALIZABLE_CLASS" >Se: Transient field of class that isn't Serializable. </a></td><td>Dodgy code</ td></tr> 470 <tr bgcolor="#ffffff"><td><a href="#SE_PRIVATE_READ_RESOLVE_NOT_INHERITED">Se: P rivate readResolve method not inherited by subclasses</a></td><td>Dodgy code</td ></tr>
452 <tr bgcolor="#eeeeee"><td><a href="#TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_ALW AYS_SINK">TQ: Value required to have type qualifier, but marked as unknown</a></ td><td>Dodgy code</td></tr> 471 <tr bgcolor="#eeeeee"><td><a href="#SE_TRANSIENT_FIELD_OF_NONSERIALIZABLE_CLASS" >Se: Transient field of class that isn't Serializable. </a></td><td>Dodgy code</ td></tr>
453 <tr bgcolor="#ffffff"><td><a href="#TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_NEV ER_SINK">TQ: Value required to not have type qualifier, but marked as unknown</a ></td><td>Dodgy code</td></tr> 472 <tr bgcolor="#ffffff"><td><a href="#TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_ALW AYS_SINK">TQ: Value required to have type qualifier, but marked as unknown</a></ td><td>Dodgy code</td></tr>
454 <tr bgcolor="#eeeeee"><td><a href="#UCF_USELESS_CONTROL_FLOW">UCF: Useless contr ol flow</a></td><td>Dodgy code</td></tr> 473 <tr bgcolor="#eeeeee"><td><a href="#TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_NEV ER_SINK">TQ: Value required to not have type qualifier, but marked as unknown</a ></td><td>Dodgy code</td></tr>
455 <tr bgcolor="#ffffff"><td><a href="#UCF_USELESS_CONTROL_FLOW_NEXT_LINE">UCF: Use less control flow to next line</a></td><td>Dodgy code</td></tr> 474 <tr bgcolor="#ffffff"><td><a href="#UCF_USELESS_CONTROL_FLOW">UCF: Useless contr ol flow</a></td><td>Dodgy code</td></tr>
456 <tr bgcolor="#eeeeee"><td><a href="#URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD">UrF: U nread public/protected field</a></td><td>Dodgy code</td></tr> 475 <tr bgcolor="#eeeeee"><td><a href="#UCF_USELESS_CONTROL_FLOW_NEXT_LINE">UCF: Use less control flow to next line</a></td><td>Dodgy code</td></tr>
457 <tr bgcolor="#ffffff"><td><a href="#UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD">UuF: U nused public or protected field</a></td><td>Dodgy code</td></tr> 476 <tr bgcolor="#ffffff"><td><a href="#USM_USELESS_ABSTRACT_METHOD">USM: Abstract M ethod is already defined in implemented interface</a></td><td>Dodgy code</td></t r>
458 <tr bgcolor="#eeeeee"><td><a href="#UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR">Uw F: Field not initialized in constructor but dereferenced without null check</a>< /td><td>Dodgy code</td></tr> 477 <tr bgcolor="#eeeeee"><td><a href="#USM_USELESS_SUBCLASS_METHOD">USM: Method sup erfluously delegates to parent class method</a></td><td>Dodgy code</td></tr>
459 <tr bgcolor="#ffffff"><td><a href="#UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD">UwF : Unwritten public or protected field</a></td><td>Dodgy code</td></tr> 478 <tr bgcolor="#ffffff"><td><a href="#URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD">UrF: U nread public/protected field</a></td><td>Dodgy code</td></tr>
460 <tr bgcolor="#eeeeee"><td><a href="#XFB_XML_FACTORY_BYPASS">XFB: Method directly allocates a specific implementation of xml interfaces</a></td><td>Dodgy code</t d></tr> 479 <tr bgcolor="#eeeeee"><td><a href="#UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD">UuF: U nused public or protected field</a></td><td>Dodgy code</td></tr>
480 <tr bgcolor="#ffffff"><td><a href="#UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR">Uw F: Field not initialized in constructor but dereferenced without null check</a>< /td><td>Dodgy code</td></tr>
481 <tr bgcolor="#eeeeee"><td><a href="#UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD">UwF : Unwritten public or protected field</a></td><td>Dodgy code</td></tr>
482 <tr bgcolor="#ffffff"><td><a href="#XFB_XML_FACTORY_BYPASS">XFB: Method directly allocates a specific implementation of xml interfaces</a></td><td>Dodgy code</t d></tr>
461 </table> 483 </table>
462 <h2>Descriptions</h2> 484 <h2>Descriptions</h2>
463 <h3><a name="AM_CREATES_EMPTY_JAR_FILE_ENTRY">AM: Creates an empty jar file entr y (AM_CREATES_EMPTY_JAR_FILE_ENTRY)</a></h3> 485 <h3><a name="AM_CREATES_EMPTY_JAR_FILE_ENTRY">AM: Creates an empty jar file entr y (AM_CREATES_EMPTY_JAR_FILE_ENTRY)</a></h3>
464 486
465 487
466 <p>The code calls <code>putNextEntry()</code>, immediately 488 <p>The code calls <code>putNextEntry()</code>, immediately
467 followed by a call to <code>closeEntry()</code>. This results 489 followed by a call to <code>closeEntry()</code>. This results
468 in an empty JarFile entry. The contents of the entry 490 in an empty JarFile entry. The contents of the entry
469 should be written to the JarFile between the calls to 491 should be written to the JarFile between the calls to
470 <code>putNextEntry()</code> and 492 <code>putNextEntry()</code> and
(...skipping 17 matching lines...) Expand all
488 <p> 510 <p>
489 The <code>equals(Object o)</code> method shouldn't make any assumptions 511 The <code>equals(Object o)</code> method shouldn't make any assumptions
490 about the type of <code>o</code>. It should simply return 512 about the type of <code>o</code>. It should simply return
491 false if <code>o</code> is not the same type as <code>this</code>. 513 false if <code>o</code> is not the same type as <code>this</code>.
492 </p> 514 </p>
493 515
494 516
495 <h3><a name="BIT_SIGNED_CHECK">BIT: Check for sign of bitwise operation (BIT_SIG NED_CHECK)</a></h3> 517 <h3><a name="BIT_SIGNED_CHECK">BIT: Check for sign of bitwise operation (BIT_SIG NED_CHECK)</a></h3>
496 518
497 519
498 <p> This method compares an expression such as 520 <p> This method compares an expression such as</p>
499 <pre>((event.detail &amp; SWT.SELECTED) &gt; 0)</pre>. 521 <pre>((event.detail &amp; SWT.SELECTED) &gt; 0)</pre>.
500 Using bit arithmetic and then comparing with the greater than operator can 522 <p>Using bit arithmetic and then comparing with the greater than operator can
501 lead to unexpected results (of course depending on the value of 523 lead to unexpected results (of course depending on the value of
502 SWT.SELECTED). If SWT.SELECTED is a negative number, this is a candidate 524 SWT.SELECTED). If SWT.SELECTED is a negative number, this is a candidate
503 for a bug. Even when SWT.SELECTED is not negative, it seems good practice 525 for a bug. Even when SWT.SELECTED is not negative, it seems good practice
504 to use '!= 0' instead of '&gt; 0'. 526 to use '!= 0' instead of '&gt; 0'.
505 </p> 527 </p>
506 <p> 528 <p>
507 <em>Boris Bokowski</em> 529 <em>Boris Bokowski</em>
508 </p> 530 </p>
509 531
510 532
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
657 must have type <code>java.lang.Object</code>.</p> 679 must have type <code>java.lang.Object</code>.</p>
658 680
659 681
660 <h3><a name="EQ_CHECK_FOR_OPERAND_NOT_COMPATIBLE_WITH_THIS">Eq: Equals checks fo r incompatible operand (EQ_CHECK_FOR_OPERAND_NOT_COMPATIBLE_WITH_THIS)</a></h3> 682 <h3><a name="EQ_CHECK_FOR_OPERAND_NOT_COMPATIBLE_WITH_THIS">Eq: Equals checks fo r incompatible operand (EQ_CHECK_FOR_OPERAND_NOT_COMPATIBLE_WITH_THIS)</a></h3>
661 683
662 684
663 <p> This equals method is checking to see if the argument is some incompatible type 685 <p> This equals method is checking to see if the argument is some incompatible type
664 (i.e., a class that is neither a supertype nor subtype of the class that defines 686 (i.e., a class that is neither a supertype nor subtype of the class that defines
665 the equals method). For example, the Foo class might have an equals method 687 the equals method). For example, the Foo class might have an equals method
666 that looks like: 688 that looks like:
667 689 </p>
668 <p><code><pre> 690 <pre>
669 public boolean equals(Object o) { 691 public boolean equals(Object o) {
670 if (o instanceof Foo) 692 if (o instanceof Foo)
671 return name.equals(((Foo)o).name); 693 return name.equals(((Foo)o).name);
672 else if (o instanceof String) 694 else if (o instanceof String)
673 return name.equals(o); 695 return name.equals(o);
674 else return false; 696 else return false;
675 </pre></code></p> 697 </pre>
676 698
677 <p>This is considered bad practice, as it makes it very hard to implement an equ als method that 699 <p>This is considered bad practice, as it makes it very hard to implement an equ als method that
678 is symmetric and transitive. Without those properties, very unexpected behavoirs are possible. 700 is symmetric and transitive. Without those properties, very unexpected behavoirs are possible.
679 </p> 701 </p>
680 702
681 703
682 <h3><a name="EQ_COMPARETO_USE_OBJECT_EQUALS">Eq: Class defines compareTo(...) an d uses Object.equals() (EQ_COMPARETO_USE_OBJECT_EQUALS)</a></h3> 704 <h3><a name="EQ_COMPARETO_USE_OBJECT_EQUALS">Eq: Class defines compareTo(...) an d uses Object.equals() (EQ_COMPARETO_USE_OBJECT_EQUALS)</a></h3>
683 705
684 706
685 <p> This class defines a <code>compareTo(...)</code> method but inherits its 707 <p> This class defines a <code>compareTo(...)</code> method but inherits its
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
839 <p> This class defines a <code>hashCode()</code> method but inherits its 861 <p> This class defines a <code>hashCode()</code> method but inherits its
840 <code>equals()</code> method from <code>java.lang.Object</code> 862 <code>equals()</code> method from <code>java.lang.Object</code>
841 (which defines equality by comparing object references).&nbsp; Although 863 (which defines equality by comparing object references).&nbsp; Although
842 this will probably satisfy the contract that equal objects must have 864 this will probably satisfy the contract that equal objects must have
843 equal hashcodes, it is probably not what was intended by overriding 865 equal hashcodes, it is probably not what was intended by overriding
844 the <code>hashCode()</code> method.&nbsp; (Overriding <code>hashCode()</code> 866 the <code>hashCode()</code> method.&nbsp; (Overriding <code>hashCode()</code>
845 implies that the object's identity is based on criteria more complicated 867 implies that the object's identity is based on criteria more complicated
846 than simple reference equality.)</p> 868 than simple reference equality.)</p>
847 <p>If you don't think instances of this class will ever be inserted into a HashM ap/HashTable, 869 <p>If you don't think instances of this class will ever be inserted into a HashM ap/HashTable,
848 the recommended <code>hashCode</code> implementation to use is:</p> 870 the recommended <code>hashCode</code> implementation to use is:</p>
849 <p><pre>public int hashCode() { 871 <pre>public int hashCode() {
850 assert false : "hashCode not designed"; 872 assert false : "hashCode not designed";
851 return 42; // any arbitrary constant will do 873 return 42; // any arbitrary constant will do
852 }</pre></p> 874 }</pre>
853 875
854 876
855 <h3><a name="HE_INHERITS_EQUALS_USE_HASHCODE">HE: Class inherits equals() and us es Object.hashCode() (HE_INHERITS_EQUALS_USE_HASHCODE)</a></h3> 877 <h3><a name="HE_INHERITS_EQUALS_USE_HASHCODE">HE: Class inherits equals() and us es Object.hashCode() (HE_INHERITS_EQUALS_USE_HASHCODE)</a></h3>
856 878
857 879
858 <p> This class inherits <code>equals(Object)</code> from an abstract 880 <p> This class inherits <code>equals(Object)</code> from an abstract
859 superclass, and <code>hashCode()</code> from 881 superclass, and <code>hashCode()</code> from
860 <code>java.lang.Object</code> (which returns 882 <code>java.lang.Object</code> (which returns
861 the identity hash code, an arbitrary value assigned to the object 883 the identity hash code, an arbitrary value assigned to the object
862 by the VM).&nbsp; Therefore, the class is very likely to violate the 884 by the VM).&nbsp; Therefore, the class is very likely to violate the
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
917 939
918 <p> 940 <p>
919 This code seems to be storing a non-serializable object into an HttpSession. 941 This code seems to be storing a non-serializable object into an HttpSession.
920 If this session is passivated or migrated, an error will result. 942 If this session is passivated or migrated, an error will result.
921 </p> 943 </p>
922 944
923 945
924 <h3><a name="JCIP_FIELD_ISNT_FINAL_IN_IMMUTABLE_CLASS">JCIP: Fields of immutable classes should be final (JCIP_FIELD_ISNT_FINAL_IN_IMMUTABLE_CLASS)</a></h3> 946 <h3><a name="JCIP_FIELD_ISNT_FINAL_IN_IMMUTABLE_CLASS">JCIP: Fields of immutable classes should be final (JCIP_FIELD_ISNT_FINAL_IN_IMMUTABLE_CLASS)</a></h3>
925 947
926 948
927 <p> The class is annotated with net.jcip.annotations.Immutable, and the rules for that annotation require 949 <p> The class is annotated with net.jcip.annotations.Immutable or javax.annota tion.concurrent.Immutable,
928 that all fields are final. 950 and the rules for those annotations require that all fields are final.
929 .</p> 951 .</p>
930 952
931 953
932 <h3><a name="NP_BOOLEAN_RETURN_NULL">NP: Method with Boolean return type returns explicit null (NP_BOOLEAN_RETURN_NULL)</a></h3> 954 <h3><a name="NP_BOOLEAN_RETURN_NULL">NP: Method with Boolean return type returns explicit null (NP_BOOLEAN_RETURN_NULL)</a></h3>
933 955
934 956
935 <p> 957 <p>
936 A method that returns either Boolean.TRUE, Boolean.FALSE or null is an accid ent waiting to happen. 958 A method that returns either Boolean.TRUE, Boolean.FALSE or null is an accid ent waiting to happen.
937 This method can be invoked as though it returned a value of type boolean, an d 959 This method can be invoked as though it returned a value of type boolean, an d
938 the compiler will insert automatic unboxing of the Boolean value. If a null value is returned, 960 the compiler will insert automatic unboxing of the Boolean value. If a null value is returned,
(...skipping 445 matching lines...) Expand 10 before | Expand all | Expand 10 after
1384 1406
1385 1407
1386 <h3><a name="UI_INHERITANCE_UNSAFE_GETRESOURCE">UI: Usage of GetResource may be unsafe if class is extended (UI_INHERITANCE_UNSAFE_GETRESOURCE)</a></h3> 1408 <h3><a name="UI_INHERITANCE_UNSAFE_GETRESOURCE">UI: Usage of GetResource may be unsafe if class is extended (UI_INHERITANCE_UNSAFE_GETRESOURCE)</a></h3>
1387 1409
1388 1410
1389 <p>Calling <code>this.getClass().getResource(...)</code> could give 1411 <p>Calling <code>this.getClass().getResource(...)</code> could give
1390 results other than expected if this class is extended by a class in 1412 results other than expected if this class is extended by a class in
1391 another package.</p> 1413 another package.</p>
1392 1414
1393 1415
1416 <h3><a name="BAC_BAD_APPLET_CONSTRUCTOR">BAC: Bad Applet Constructor relies on u ninitialized AppletStub (BAC_BAD_APPLET_CONSTRUCTOR)</a></h3>
1417
1418
1419 <p>
1420 This constructor calls methods in the parent Applet that rely on the AppletStub. Since the AppletStub
1421 isn't initialized until the init() method of this applet is called, these method s will not perform
1422 correctly.
1423 </p>
1424
1425
1394 <h3><a name="BC_IMPOSSIBLE_CAST">BC: Impossible cast (BC_IMPOSSIBLE_CAST)</a></h 3> 1426 <h3><a name="BC_IMPOSSIBLE_CAST">BC: Impossible cast (BC_IMPOSSIBLE_CAST)</a></h 3>
1395 1427
1396 1428
1397 <p> 1429 <p>
1398 This cast will always throw a ClassCastException. 1430 This cast will always throw a ClassCastException.
1399 FindBugs tracks type information from instanceof checks, 1431 FindBugs tracks type information from instanceof checks,
1400 and also uses more precise information about the types 1432 and also uses more precise information about the types
1401 of values returned from methods and loaded from fields. 1433 of values returned from methods and loaded from fields.
1402 Thus, it may have more precise information that just 1434 Thus, it may have more precise information that just
1403 the declared type of a variable, and can use this to determine 1435 the declared type of a variable, and can use this to determine
(...skipping 11 matching lines...) Expand all
1415 the precise type of the value being cast, and the attempt to 1447 the precise type of the value being cast, and the attempt to
1416 downcast it to a subtype will always fail by throwing a ClassCastException. 1448 downcast it to a subtype will always fail by throwing a ClassCastException.
1417 </p> 1449 </p>
1418 1450
1419 1451
1420 <h3><a name="BC_IMPOSSIBLE_DOWNCAST_OF_TOARRAY">BC: Impossible downcast of toArr ay() result (BC_IMPOSSIBLE_DOWNCAST_OF_TOARRAY)</a></h3> 1452 <h3><a name="BC_IMPOSSIBLE_DOWNCAST_OF_TOARRAY">BC: Impossible downcast of toArr ay() result (BC_IMPOSSIBLE_DOWNCAST_OF_TOARRAY)</a></h3>
1421 1453
1422 1454
1423 <p> 1455 <p>
1424 This code is casting the result of calling <code>toArray()</code> on a collectio n 1456 This code is casting the result of calling <code>toArray()</code> on a collectio n
1425 to a type more specific than <code>Object[]</code>, as in: 1457 to a type more specific than <code>Object[]</code>, as in:</p>
1426 <pre> 1458 <pre>
1427 String[] getAsArray(Collection&lt;String&gt; c) { 1459 String[] getAsArray(Collection&lt;String&gt; c) {
1428 return (String[]) c.toArray(); 1460 return (String[]) c.toArray();
1429 } 1461 }
1430 </pre> 1462 </pre>
1431 <p>This will usually fail by throwing a ClassCastException. The <code>toArray()< /code> 1463 <p>This will usually fail by throwing a ClassCastException. The <code>toArray()< /code>
1432 of almost all collections return an <code>Object[]</code>. They can't really do anything else, 1464 of almost all collections return an <code>Object[]</code>. They can't really do anything else,
1433 since the Collection object has no reference to the declared generic type of the collection. 1465 since the Collection object has no reference to the declared generic type of the collection.
1434 <p>The correct way to do get an array of a specific type from a collection is to use 1466 <p>The correct way to do get an array of a specific type from a collection is to use
1435 <code>c.toArray(new String[]);</code> 1467 <code>c.toArray(new String[]);</code>
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
1536 int result = 0; 1568 int result = 0;
1537 for(int i = 0; i &lt; 4; i++) 1569 for(int i = 0; i &lt; 4; i++)
1538 result = ((result &lt;&lt; 8) | (b[i] &amp; 0xff)); 1570 result = ((result &lt;&lt; 8) | (b[i] &amp; 0xff));
1539 </pre> 1571 </pre>
1540 1572
1541 1573
1542 1574
1543 <h3><a name="BIT_SIGNED_CHECK_HIGH_BIT">BIT: Check for sign of bitwise operation (BIT_SIGNED_CHECK_HIGH_BIT)</a></h3> 1575 <h3><a name="BIT_SIGNED_CHECK_HIGH_BIT">BIT: Check for sign of bitwise operation (BIT_SIGNED_CHECK_HIGH_BIT)</a></h3>
1544 1576
1545 1577
1546 <p> This method compares an expression such as 1578 <p> This method compares an expression such as</p>
1547 <pre>((event.detail &amp; SWT.SELECTED) &gt; 0)</pre>. 1579 <pre>((event.detail &amp; SWT.SELECTED) &gt; 0)</pre>.
1548 Using bit arithmetic and then comparing with the greater than operator can 1580 <p>Using bit arithmetic and then comparing with the greater than operator can
1549 lead to unexpected results (of course depending on the value of 1581 lead to unexpected results (of course depending on the value of
1550 SWT.SELECTED). If SWT.SELECTED is a negative number, this is a candidate 1582 SWT.SELECTED). If SWT.SELECTED is a negative number, this is a candidate
1551 for a bug. Even when SWT.SELECTED is not negative, it seems good practice 1583 for a bug. Even when SWT.SELECTED is not negative, it seems good practice
1552 to use '!= 0' instead of '&gt; 0'. 1584 to use '!= 0' instead of '&gt; 0'.
1553 </p> 1585 </p>
1554 <p> 1586 <p>
1555 <em>Boris Bokowski</em> 1587 <em>Boris Bokowski</em>
1556 </p> 1588 </p>
1557 1589
1558 1590
1559 <h3><a name="BOA_BADLY_OVERRIDDEN_ADAPTER">BOA: Class overrides a method impleme nted in super class Adapter wrongly (BOA_BADLY_OVERRIDDEN_ADAPTER)</a></h3> 1591 <h3><a name="BOA_BADLY_OVERRIDDEN_ADAPTER">BOA: Class overrides a method impleme nted in super class Adapter wrongly (BOA_BADLY_OVERRIDDEN_ADAPTER)</a></h3>
1560 1592
1561 1593
1562 <p> This method overrides a method found in a parent class, where that class is an Adapter that implements 1594 <p> This method overrides a method found in a parent class, where that class is an Adapter that implements
1563 a listener defined in the java.awt.event or javax.swing.event package. As a resu lt, this method will not 1595 a listener defined in the java.awt.event or javax.swing.event package. As a resu lt, this method will not
1564 get called when the event occurs.</p> 1596 get called when the event occurs.</p>
1565 1597
1566 1598
1567 <h3><a name="ICAST_BAD_SHIFT_AMOUNT">BSHIFT: 32 bit int shifted by an amount not in the range 0..31 (ICAST_BAD_SHIFT_AMOUNT)</a></h3> 1599 <h3><a name="ICAST_BAD_SHIFT_AMOUNT">BSHIFT: 32 bit int shifted by an amount not in the range -31..31 (ICAST_BAD_SHIFT_AMOUNT)</a></h3>
1568 1600
1569 1601
1570 <p> 1602 <p>
1571 The code performs shift of a 32 bit int by a constant amount outside 1603 The code performs shift of a 32 bit int by a constant amount outside
1572 the range 0..31. 1604 the range -31..31.
1573 The effect of this is to use the lower 5 bits of the integer 1605 The effect of this is to use the lower 5 bits of the integer
1574 value to decide how much to shift by (e.g., shifting by 40 bits is the same as s hifting by 8 bits, 1606 value to decide how much to shift by (e.g., shifting by 40 bits is the same as s hifting by 8 bits,
1575 and shifting by 32 bits is the same as shifting by zero bits). This probably isn 't what was expected, 1607 and shifting by 32 bits is the same as shifting by zero bits). This probably isn 't what was expected,
1576 and it is at least confusing. 1608 and it is at least confusing.
1577 </p> 1609 </p>
1578 1610
1579 1611
1580 <h3><a name="BX_UNBOXED_AND_COERCED_FOR_TERNARY_OPERATOR">Bx: Primitive value is unboxed and coerced for ternary operator (BX_UNBOXED_AND_COERCED_FOR_TERNARY_OP ERATOR)</a></h3> 1612 <h3><a name="BX_UNBOXED_AND_COERCED_FOR_TERNARY_OPERATOR">Bx: Primitive value is unboxed and coerced for ternary operator (BX_UNBOXED_AND_COERCED_FOR_TERNARY_OP ERATOR)</a></h3>
1581 1613
1582 1614
(...skipping 11 matching lines...) Expand all
1594 1626
1595 1627
1596 <p> In some situation, this compareTo or compare method returns 1628 <p> In some situation, this compareTo or compare method returns
1597 the constant Integer.MIN_VALUE, which is an exceptionally bad practice. 1629 the constant Integer.MIN_VALUE, which is an exceptionally bad practice.
1598 The only thing that matters about the return value of compareTo is the sign of the result. 1630 The only thing that matters about the return value of compareTo is the sign of the result.
1599 But people will sometimes negate the return value of compareTo, expecting th at this will negate 1631 But people will sometimes negate the return value of compareTo, expecting th at this will negate
1600 the sign of the result. And it will, except in the case where the value retu rned is Integer.MIN_VALUE. 1632 the sign of the result. And it will, except in the case where the value retu rned is Integer.MIN_VALUE.
1601 So just return -1 rather than Integer.MIN_VALUE. 1633 So just return -1 rather than Integer.MIN_VALUE.
1602 1634
1603 1635
1636 <h3><a name="DLS_DEAD_LOCAL_INCREMENT_IN_RETURN">DLS: Useless increment in retur n statement (DLS_DEAD_LOCAL_INCREMENT_IN_RETURN)</a></h3>
1637
1638
1639 <p>This statement has a return such as <code>return x++;</code>.
1640 A postfix increment/decrement does not impact the value of the expression,
1641 so this increment/decrement has no effect.
1642 Please verify that this statement does the right thing.
1643 </p>
1644
1645
1604 <h3><a name="DLS_DEAD_STORE_OF_CLASS_LITERAL">DLS: Dead store of class literal ( DLS_DEAD_STORE_OF_CLASS_LITERAL)</a></h3> 1646 <h3><a name="DLS_DEAD_STORE_OF_CLASS_LITERAL">DLS: Dead store of class literal ( DLS_DEAD_STORE_OF_CLASS_LITERAL)</a></h3>
1605 1647
1606 1648
1607 <p> 1649 <p>
1608 This instruction assigns a class literal to a variable and then never uses it. 1650 This instruction assigns a class literal to a variable and then never uses it.
1609 <a href="//java.sun.com/j2se/1.5.0/compatibility.html#literal">The behavior of t his differs in Java 1.4 and in Java 5.</a> 1651 <a href="//java.sun.com/j2se/1.5.0/compatibility.html#literal">The behavior of t his differs in Java 1.4 and in Java 5.</a>
1610 In Java 1.4 and earlier, a reference to <code>Foo.class</code> would force the s tatic initializer 1652 In Java 1.4 and earlier, a reference to <code>Foo.class</code> would force the s tatic initializer
1611 for <code>Foo</code> to be executed, if it has not been executed already. 1653 for <code>Foo</code> to be executed, if it has not been executed already.
1612 In Java 5 and later, it does not. 1654 In Java 5 and later, it does not.
1613 </p> 1655 </p>
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
1855 different types. The result of this comparison will always be false at runtime. 1897 different types. The result of this comparison will always be false at runtime.
1856 </p> 1898 </p>
1857 1899
1858 1900
1859 <h3><a name="EQ_ALWAYS_FALSE">Eq: equals method always returns false (EQ_ALWAYS_ FALSE)</a></h3> 1901 <h3><a name="EQ_ALWAYS_FALSE">Eq: equals method always returns false (EQ_ALWAYS_ FALSE)</a></h3>
1860 1902
1861 1903
1862 <p> This class defines an equals method that always returns false. This means that an object is not equal to itself, and it is impossible to create useful Map s or Sets of this class. More fundamentally, it means 1904 <p> This class defines an equals method that always returns false. This means that an object is not equal to itself, and it is impossible to create useful Map s or Sets of this class. More fundamentally, it means
1863 that equals is not reflexive, one of the requirements of the equals method.</p> 1905 that equals is not reflexive, one of the requirements of the equals method.</p>
1864 <p>The likely intended semantics are object identity: that an object is equal to itself. This is the behavior inherited from class <code>Object</code>. If you n eed to override an equals inherited from a different 1906 <p>The likely intended semantics are object identity: that an object is equal to itself. This is the behavior inherited from class <code>Object</code>. If you n eed to override an equals inherited from a different
1865 superclass, you can use use: 1907 superclass, you can use use:</p>
1866 <pre> 1908 <pre>
1867 public boolean equals(Object o) { return this == o; } 1909 public boolean equals(Object o) { return this == o; }
1868 </pre> 1910 </pre>
1869 </p>
1870 1911
1871 1912
1872 <h3><a name="EQ_ALWAYS_TRUE">Eq: equals method always returns true (EQ_ALWAYS_TR UE)</a></h3> 1913 <h3><a name="EQ_ALWAYS_TRUE">Eq: equals method always returns true (EQ_ALWAYS_TR UE)</a></h3>
1873 1914
1874 1915
1875 <p> This class defines an equals method that always returns true. This is imag inative, but not very smart. 1916 <p> This class defines an equals method that always returns true. This is imag inative, but not very smart.
1876 Plus, it means that the equals method is not symmetric. 1917 Plus, it means that the equals method is not symmetric.
1877 </p> 1918 </p>
1878 1919
1879 1920
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1934 <h3><a name="EQ_SELF_USE_OBJECT">Eq: Covariant equals() method defined, Object.e quals(Object) inherited (EQ_SELF_USE_OBJECT)</a></h3> 1975 <h3><a name="EQ_SELF_USE_OBJECT">Eq: Covariant equals() method defined, Object.e quals(Object) inherited (EQ_SELF_USE_OBJECT)</a></h3>
1935 1976
1936 1977
1937 <p> This class defines a covariant version of the <code>equals()</code> 1978 <p> This class defines a covariant version of the <code>equals()</code>
1938 method, but inherits the normal <code>equals(Object)</code> method 1979 method, but inherits the normal <code>equals(Object)</code> method
1939 defined in the base <code>java.lang.Object</code> class.&nbsp; 1980 defined in the base <code>java.lang.Object</code> class.&nbsp;
1940 The class should probably define a <code>boolean equals(Object)</code> method. 1981 The class should probably define a <code>boolean equals(Object)</code> method.
1941 </p> 1982 </p>
1942 1983
1943 1984
1985 <h3><a name="FB_MISSING_EXPECTED_WARNING">FB: Missing expected or desired warnin g from FindBugs (FB_MISSING_EXPECTED_WARNING)</a></h3>
1986
1987
1988 <p>FindBugs didn't generate generated a warning that, according to a @ ExpectedWarning annotated,
1989 is expected or desired</p>
1990
1991
1992 <h3><a name="FB_UNEXPECTED_WARNING">FB: Unexpected/undesired warning from FindBu gs (FB_UNEXPECTED_WARNING)</a></h3>
1993
1994
1995 <p>FindBugs generated a warning that, according to a @NoWarning annota ted,
1996 is unexpected or undesired</p>
1997
1998
1944 <h3><a name="FE_TEST_IF_EQUAL_TO_NOT_A_NUMBER">FE: Doomed test for equality to N aN (FE_TEST_IF_EQUAL_TO_NOT_A_NUMBER)</a></h3> 1999 <h3><a name="FE_TEST_IF_EQUAL_TO_NOT_A_NUMBER">FE: Doomed test for equality to N aN (FE_TEST_IF_EQUAL_TO_NOT_A_NUMBER)</a></h3>
1945 2000
1946 2001
1947 <p> 2002 <p>
1948 This code checks to see if a floating point value is equal to the special 2003 This code checks to see if a floating point value is equal to the special
1949 Not A Number value (e.g., <code>if (x == Double.NaN)</code>). However, 2004 Not A Number value (e.g., <code>if (x == Double.NaN)</code>). However,
1950 because of the special semantics of <code>NaN</code>, no value 2005 because of the special semantics of <code>NaN</code>, no value
1951 is equal to <code>Nan</code>, including <code>NaN</code>. Thus, 2006 is equal to <code>Nan</code>, including <code>NaN</code>. Thus,
1952 <code>x == Double.NaN</code> always evaluates to false. 2007 <code>x == Double.NaN</code> always evaluates to false.
1953 2008
1954 To check to see if a value contained in <code>x</code> 2009 To check to see if a value contained in <code>x</code>
1955 is the special Not A Number value, use 2010 is the special Not A Number value, use
1956 <code>Double.isNaN(x)</code> (or <code>Float.isNaN(x)</code> if 2011 <code>Double.isNaN(x)</code> (or <code>Float.isNaN(x)</code> if
1957 <code>x</code> is floating point precision). 2012 <code>x</code> is floating point precision).
1958 </p> 2013 </p>
1959 2014
1960 2015
2016 <h3><a name="FL_MATH_USING_FLOAT_PRECISION">FL: Method performs math using float ing point precision (FL_MATH_USING_FLOAT_PRECISION)</a></h3>
2017
2018
2019 <p>
2020 The method performs math operations using floating point precision.
2021 Floating point precision is very imprecise. For example,
2022 16777216.0f + 1.0f = 16777216.0f. Consider using double math instead.</p>
2023
2024
1961 <h3><a name="VA_FORMAT_STRING_BAD_ARGUMENT">FS: Format string placeholder incomp atible with passed argument (VA_FORMAT_STRING_BAD_ARGUMENT)</a></h3> 2025 <h3><a name="VA_FORMAT_STRING_BAD_ARGUMENT">FS: Format string placeholder incomp atible with passed argument (VA_FORMAT_STRING_BAD_ARGUMENT)</a></h3>
1962 2026
1963 2027
1964 <p> 2028 <p>
1965 The format string placeholder is incompatible with the corresponding 2029 The format string placeholder is incompatible with the corresponding
1966 argument. For example, 2030 argument. For example,
1967 <code> 2031 <code>
1968 System.out.println("%d\n", "hello"); 2032 System.out.println("%d\n", "hello");
1969 </code> 2033 </code>
1970 <p>The %d placeholder requires a numeric argument, but a string value is 2034 <p>The %d placeholder requires a numeric argument, but a string value is
(...skipping 18 matching lines...) Expand all
1989 2053
1990 2054
1991 <p> 2055 <p>
1992 A method is called that expects a Java printf format string and a list of argume nts. 2056 A method is called that expects a Java printf format string and a list of argume nts.
1993 However, the format string doesn't contain any format specifiers (e.g., %s) but 2057 However, the format string doesn't contain any format specifiers (e.g., %s) but
1994 does contain message format elements (e.g., {0}). It is likely 2058 does contain message format elements (e.g., {0}). It is likely
1995 that the code is supplying a MessageFormat string when a printf-style format str ing 2059 that the code is supplying a MessageFormat string when a printf-style format str ing
1996 is required. At runtime, all of the arguments will be ignored 2060 is required. At runtime, all of the arguments will be ignored
1997 and the format string will be returned exactly as provided without any formattin g. 2061 and the format string will be returned exactly as provided without any formattin g.
1998 </p> 2062 </p>
1999 </p>
2000 2063
2001 2064
2002 <h3><a name="VA_FORMAT_STRING_EXTRA_ARGUMENTS_PASSED">FS: More arguments are pas sed than are actually used in the format string (VA_FORMAT_STRING_EXTRA_ARGUMENT S_PASSED)</a></h3> 2065 <h3><a name="VA_FORMAT_STRING_EXTRA_ARGUMENTS_PASSED">FS: More arguments are pas sed than are actually used in the format string (VA_FORMAT_STRING_EXTRA_ARGUMENT S_PASSED)</a></h3>
2003 2066
2004 2067
2005 <p> 2068 <p>
2006 A format-string method with a variable number of arguments is called, 2069 A format-string method with a variable number of arguments is called,
2007 but more arguments are passed than are actually used by the format string. 2070 but more arguments are passed than are actually used by the format string.
2008 This won't cause a runtime exception, but the code may be silently omitting 2071 This won't cause a runtime exception, but the code may be silently omitting
2009 information that was intended to be included in the formatted string. 2072 information that was intended to be included in the formatted string.
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
2113 2176
2114 <pre> 2177 <pre>
2115 // Fails for dates after 2037 2178 // Fails for dates after 2037
2116 Date getDate(int seconds) { return new Date(seconds * 1000L); } 2179 Date getDate(int seconds) { return new Date(seconds * 1000L); }
2117 2180
2118 // better, works for all dates 2181 // better, works for all dates
2119 Date getDate(long seconds) { return new Date(seconds * 1000); } 2182 Date getDate(long seconds) { return new Date(seconds * 1000); }
2120 </pre> 2183 </pre>
2121 2184
2122 2185
2123 <h3><a name="ICAST_INT_CAST_TO_DOUBLE_PASSED_TO_CEIL">ICAST: integral value cast to double and then passed to Math.ceil (ICAST_INT_CAST_TO_DOUBLE_PASSED_TO_CEIL )</a></h3> 2186 <h3><a name="ICAST_INT_CAST_TO_DOUBLE_PASSED_TO_CEIL">ICAST: Integral value cast to double and then passed to Math.ceil (ICAST_INT_CAST_TO_DOUBLE_PASSED_TO_CEIL )</a></h3>
2124 2187
2125 2188
2126 <p> 2189 <p>
2127 This code converts an integral value (e.g., int or long) 2190 This code converts an integral value (e.g., int or long)
2128 to a double precision 2191 to a double precision
2129 floating point number and then 2192 floating point number and then
2130 passing the result to the Math.ceil() function, which rounds a double to 2193 passing the result to the Math.ceil() function, which rounds a double to
2131 the next higher integer value. This operation should always be a no-op, 2194 the next higher integer value. This operation should always be a no-op,
2132 since the converting an integer to a double should give a number with no fractio nal part. 2195 since the converting an integer to a double should give a number with no fractio nal part.
2133 It is likely that the operation that generated the value to be passed 2196 It is likely that the operation that generated the value to be passed
(...skipping 27 matching lines...) Expand all
2161 Thus, if this exception occurs in a thread other than the thread that invokes 2224 Thus, if this exception occurs in a thread other than the thread that invokes
2162 the test method, the exception will terminate the thread but not result 2225 the test method, the exception will terminate the thread but not result
2163 in the test failing. 2226 in the test failing.
2164 </p> 2227 </p>
2165 2228
2166 2229
2167 <h3><a name="IJU_BAD_SUITE_METHOD">IJU: TestCase declares a bad suite method (I JU_BAD_SUITE_METHOD)</a></h3> 2230 <h3><a name="IJU_BAD_SUITE_METHOD">IJU: TestCase declares a bad suite method (I JU_BAD_SUITE_METHOD)</a></h3>
2168 2231
2169 2232
2170 <p> Class is a JUnit TestCase and defines a suite() method. 2233 <p> Class is a JUnit TestCase and defines a suite() method.
2171 However, the suite method needs to be declared as either 2234 However, the suite method needs to be declared as either</p>
2172 <pre>public static junit.framework.Test suite()</pre> 2235 <pre>public static junit.framework.Test suite()</pre>
2173 or 2236 or
2174 <pre>public static junit.framework.TestSuite suite()</pre> 2237 <pre>public static junit.framework.TestSuite suite()</pre>
2175 </p>
2176 2238
2177 2239
2178 <h3><a name="IJU_NO_TESTS">IJU: TestCase has no tests (IJU_NO_TESTS)</a></h3> 2240 <h3><a name="IJU_NO_TESTS">IJU: TestCase has no tests (IJU_NO_TESTS)</a></h3>
2179 2241
2180 2242
2181 <p> Class is a JUnit TestCase but has not implemented any test methods</p> 2243 <p> Class is a JUnit TestCase but has not implemented any test methods</p>
2182 2244
2183 2245
2184 <h3><a name="IJU_SETUP_NO_SUPER">IJU: TestCase defines setUp that doesn't call s uper.setUp() (IJU_SETUP_NO_SUPER)</a></h3> 2246 <h3><a name="IJU_SETUP_NO_SUPER">IJU: TestCase defines setUp that doesn't call s uper.setUp() (IJU_SETUP_NO_SUPER)</a></h3>
2185 2247
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
2347 <h3><a name="NP_GUARANTEED_DEREF">NP: Null value is guaranteed to be dereference d (NP_GUARANTEED_DEREF)</a></h3> 2409 <h3><a name="NP_GUARANTEED_DEREF">NP: Null value is guaranteed to be dereference d (NP_GUARANTEED_DEREF)</a></h3>
2348 2410
2349 2411
2350 <p> 2412 <p>
2351 There is a statement or branch that if executed guarantees that 2413 There is a statement or branch that if executed guarantees that
2352 a value is null at this point, and that 2414 a value is null at this point, and that
2353 value that is guaranteed to be dereferenced 2415 value that is guaranteed to be dereferenced
2354 (except on forward paths involving runtime exceptions). 2416 (except on forward paths involving runtime exceptions).
2355 </p> 2417 </p>
2356 <p>Note that a check such as 2418 <p>Note that a check such as
2357 <code>if (x == null) throw new NullPointerException();</code 2419 <code>if (x == null) throw new NullPointerException();</code>
2358 is treated as a dereference of <code>x</code>. 2420 is treated as a dereference of <code>x</code>.
2359 2421
2360 2422
2361 <h3><a name="NP_GUARANTEED_DEREF_ON_EXCEPTION_PATH">NP: Value is null and guaran teed to be dereferenced on exception path (NP_GUARANTEED_DEREF_ON_EXCEPTION_PATH )</a></h3> 2423 <h3><a name="NP_GUARANTEED_DEREF_ON_EXCEPTION_PATH">NP: Value is null and guaran teed to be dereferenced on exception path (NP_GUARANTEED_DEREF_ON_EXCEPTION_PATH )</a></h3>
2362 2424
2363 2425
2364 <p> 2426 <p>
2365 There is a statement or branch on an exception path 2427 There is a statement or branch on an exception path
2366 that if executed guarantees that 2428 that if executed guarantees that
2367 a value is null at this point, and that 2429 a value is null at this point, and that
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
2602 The code here uses <code>File.separator</code> 2664 The code here uses <code>File.separator</code>
2603 where a regular expression is required. This will fail on Windows 2665 where a regular expression is required. This will fail on Windows
2604 platforms, where the <code>File.separator</code> is a backslash, which is interp reted in a 2666 platforms, where the <code>File.separator</code> is a backslash, which is interp reted in a
2605 regular expression as an escape character. Amoung other options, you can just us e 2667 regular expression as an escape character. Amoung other options, you can just us e
2606 <code>File.separatorChar=='\\' ? "\\\\" : File.separator</code> instead of 2668 <code>File.separatorChar=='\\' ? "\\\\" : File.separator</code> instead of
2607 <code>File.separator</code> 2669 <code>File.separator</code>
2608 2670
2609 </p> 2671 </p>
2610 2672
2611 2673
2612 <h3><a name="RE_POSSIBLE_UNINTENDED_PATTERN">RE: "." used for regular expression (RE_POSSIBLE_UNINTENDED_PATTERN)</a></h3> 2674 <h3><a name="RE_POSSIBLE_UNINTENDED_PATTERN">RE: "." or "|" used for regular exp ression (RE_POSSIBLE_UNINTENDED_PATTERN)</a></h3>
2613 2675
2614 2676
2615 <p> 2677 <p>
2616 A String function is being invoked and "." is being passed 2678 A String function is being invoked and "." or "|" is being passed
2617 to a parameter that takes a regular expression as an argument. Is this what you intended? 2679 to a parameter that takes a regular expression as an argument. Is this what you intended?
2618 For example 2680 For example
2619 s.replaceAll(".", "/") will return a String in which <em>every</em> 2681 <li>s.replaceAll(".", "/") will return a String in which <em>every</em> characte r has been replaced by a '/' character
2620 character has been replaced by a / character, 2682 <li>s.split(".") <em>always</em> returns a zero length array of String
2621 and s.split(".") <em>always</em> returns a zero length array of String. 2683 <li>"ab|cd".replaceAll("|", "/") will return "/a/b/|/c/d/"
2684 <li>"ab|cd".split("|") will return array with six (!) elements: [, a, b, |, c, d ]
2622 </p> 2685 </p>
2623 2686
2624 2687
2625 <h3><a name="RV_01_TO_INT">RV: Random value from 0 to 1 is coerced to the intege r 0 (RV_01_TO_INT)</a></h3> 2688 <h3><a name="RV_01_TO_INT">RV: Random value from 0 to 1 is coerced to the intege r 0 (RV_01_TO_INT)</a></h3>
2626 2689
2627 2690
2628 <p>A random value from 0 to 1 is being coerced to the integer value 0. You pro bably 2691 <p>A random value from 0 to 1 is being coerced to the integer value 0. You pro bably
2629 want to multiple the random value by something else before coercing it to an int eger, or use the <code>Random.nextInt(n)</code> method. 2692 want to multiple the random value by something else before coercing it to an int eger, or use the <code>Random.nextInt(n)</code> method.
2630 </p> 2693 </p>
2631 2694
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after
2960 <p> 3023 <p>
2961 More precisely, a value annotated with a type qualifier specifying when= NEVER 3024 More precisely, a value annotated with a type qualifier specifying when= NEVER
2962 is guaranteed to reach a use or uses where the same type qualifier speci fies when=ALWAYS. 3025 is guaranteed to reach a use or uses where the same type qualifier speci fies when=ALWAYS.
2963 </p> 3026 </p>
2964 3027
2965 <p> 3028 <p>
2966 TODO: example 3029 TODO: example
2967 </p> 3030 </p>
2968 3031
2969 3032
3033 <h3><a name="TQ_UNKNOWN_VALUE_USED_WHERE_ALWAYS_STRICTLY_REQUIRED">TQ: Value wit hout a type qualifier used where a value is required to have that qualifier (TQ_ UNKNOWN_VALUE_USED_WHERE_ALWAYS_STRICTLY_REQUIRED)</a></h3>
3034
3035
3036 <p>
3037 A value is being used in a way that requires the value be annotation wit h a type qualifier.
3038 The type qualifier is strict, so the tool rejects any values that do not hav e
3039 the appropriate annotation.
3040 </p>
3041
3042 <p>
3043 To coerce a value to have a strict annotation, define an identity functi on where the return value is annotated
3044 with the strict annotation.
3045 This is the only way to turn a non-annotated value into a value with a stric t type qualifier annotation.
3046 </p>
3047
3048
3049
2970 <h3><a name="UMAC_UNCALLABLE_METHOD_OF_ANONYMOUS_CLASS">UMAC: Uncallable method defined in anonymous class (UMAC_UNCALLABLE_METHOD_OF_ANONYMOUS_CLASS)</a></h3> 3050 <h3><a name="UMAC_UNCALLABLE_METHOD_OF_ANONYMOUS_CLASS">UMAC: Uncallable method defined in anonymous class (UMAC_UNCALLABLE_METHOD_OF_ANONYMOUS_CLASS)</a></h3>
2971 3051
2972 3052
2973 <p> This anonymous class defined a method that is not directly invoked and does not override 3053 <p> This anonymous class defined a method that is not directly invoked and does not override
2974 a method in a superclass. Since methods in other classes cannot directly invoke methods 3054 a method in a superclass. Since methods in other classes cannot directly invoke methods
2975 declared in an anonymous class, it seems that this method is uncallable. The met hod 3055 declared in an anonymous class, it seems that this method is uncallable. The met hod
2976 might simply be dead code, but it is also possible that the method is intended t o 3056 might simply be dead code, but it is also possible that the method is intended t o
2977 override a method declared in a superclass, and due to an typo or other error th e method does not, 3057 override a method declared in a superclass, and due to an typo or other error th e method does not,
2978 in fact, override the method it is intended to. 3058 in fact, override the method it is intended to.
2979 </p> 3059 </p>
(...skipping 30 matching lines...) Expand all
3010 } 3090 }
3011 }</pre> 3091 }</pre>
3012 <p>When a <code>B</code> is constructed, 3092 <p>When a <code>B</code> is constructed,
3013 the constructor for the <code>A</code> class is invoked 3093 the constructor for the <code>A</code> class is invoked
3014 <em>before</em> the constructor for <code>B</code> sets <code>value</code>. 3094 <em>before</em> the constructor for <code>B</code> sets <code>value</code>.
3015 Thus, when the constructor for <code>A</code> invokes <code>getValue</code>, 3095 Thus, when the constructor for <code>A</code> invokes <code>getValue</code>,
3016 an uninitialized value is read for <code>value</code> 3096 an uninitialized value is read for <code>value</code>
3017 </p> 3097 </p>
3018 3098
3019 3099
3020 <h3><a name="DMI_INVOKING_TOSTRING_ON_ANONYMOUS_ARRAY">USELESS_STRING: Invocatio n of toString on an array (DMI_INVOKING_TOSTRING_ON_ANONYMOUS_ARRAY)</a></h3> 3100 <h3><a name="DMI_INVOKING_TOSTRING_ON_ANONYMOUS_ARRAY">USELESS_STRING: Invocatio n of toString on an unnamed array (DMI_INVOKING_TOSTRING_ON_ANONYMOUS_ARRAY)</a> </h3>
3021 3101
3022 3102
3023 <p> 3103 <p>
3024 The code invokes toString on an (anonymous) array. Calling toString on an array generates a fairly useless result 3104 The code invokes toString on an (anonymous) array. Calling toString on an array generates a fairly useless result
3025 such as [C@16f0472. Consider using Arrays.toString to convert the array into a r eadable 3105 such as [C@16f0472. Consider using Arrays.toString to convert the array into a r eadable
3026 String that gives the contents of the array. See Programming Puzzlers, chapter 3 , puzzle 12. 3106 String that gives the contents of the array. See Programming Puzzlers, chapter 3 , puzzle 12.
3027 </p> 3107 </p>
3028 3108
3029 3109
3030 <h3><a name="DMI_INVOKING_TOSTRING_ON_ARRAY">USELESS_STRING: Invocation of toStr ing on an array (DMI_INVOKING_TOSTRING_ON_ARRAY)</a></h3> 3110 <h3><a name="DMI_INVOKING_TOSTRING_ON_ARRAY">USELESS_STRING: Invocation of toStr ing on an array (DMI_INVOKING_TOSTRING_ON_ARRAY)</a></h3>
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
3065 3145
3066 <h3><a name="VA_PRIMITIVE_ARRAY_PASSED_TO_OBJECT_VARARG">VA: Primitive array pas sed to function expecting a variable number of object arguments (VA_PRIMITIVE_AR RAY_PASSED_TO_OBJECT_VARARG)</a></h3> 3146 <h3><a name="VA_PRIMITIVE_ARRAY_PASSED_TO_OBJECT_VARARG">VA: Primitive array pas sed to function expecting a variable number of object arguments (VA_PRIMITIVE_AR RAY_PASSED_TO_OBJECT_VARARG)</a></h3>
3067 3147
3068 3148
3069 <p> 3149 <p>
3070 This code passes a primitive array to a function that takes a variable number of object arguments. 3150 This code passes a primitive array to a function that takes a variable number of object arguments.
3071 This creates an array of length one to hold the primitive array and passes it to the function. 3151 This creates an array of length one to hold the primitive array and passes it to the function.
3072 </p> 3152 </p>
3073 3153
3074 3154
3155 <h3><a name="VR_UNRESOLVABLE_REFERENCE">VR: Class makes reference to unresolvabl e class or method (VR_UNRESOLVABLE_REFERENCE)</a></h3>
3156
3157
3158 <p>
3159 This class makes a reference to a class or method that can not be
3160 resolved using against the libraries it is being analyzed with.
3161 </p>
3162
3163
3075 <h3><a name="LG_LOST_LOGGER_DUE_TO_WEAK_REFERENCE">LG: Potential lost logger cha nges due to weak reference in OpenJDK (LG_LOST_LOGGER_DUE_TO_WEAK_REFERENCE)</a> </h3> 3164 <h3><a name="LG_LOST_LOGGER_DUE_TO_WEAK_REFERENCE">LG: Potential lost logger cha nges due to weak reference in OpenJDK (LG_LOST_LOGGER_DUE_TO_WEAK_REFERENCE)</a> </h3>
3076 3165
3077 3166
3078 <p>OpenJDK introduces a potential incompatibility. 3167 <p>OpenJDK introduces a potential incompatibility.
3079 In particular, the java.util.logging.Logger behavior has 3168 In particular, the java.util.logging.Logger behavior has
3080 changed. Instead of using strong references, it now uses weak references 3169 changed. Instead of using strong references, it now uses weak references
3081 internally. That's a reasonable change, but unfortunately some code relies on 3170 internally. That's a reasonable change, but unfortunately some code relies on
3082 the old behavior - when changing logger configuration, it simply drops the 3171 the old behavior - when changing logger configuration, it simply drops the
3083 logger reference. That means that the garbage collector is free to reclaim 3172 logger reference. That means that the garbage collector is free to reclaim
3084 that memory, which means that the logger configuration is lost. For example, 3173 that memory, which means that the logger configuration is lost. For example,
3085 consider: 3174 consider:
3086 </p> 3175 </p>
3087 3176
3088 <p><pre>public static void initLogging() throws Exception { 3177 <pre>public static void initLogging() throws Exception {
3089 Logger logger = Logger.getLogger("edu.umd.cs"); 3178 Logger logger = Logger.getLogger("edu.umd.cs");
3090 logger.addHandler(new FileHandler()); // call to change logger configuration 3179 logger.addHandler(new FileHandler()); // call to change logger configuration
3091 logger.setUseParentHandlers(false); // another call to change logger configurat ion 3180 logger.setUseParentHandlers(false); // another call to change logger configurat ion
3092 }</pre></p> 3181 }</pre>
3093 3182
3094 <p>The logger reference is lost at the end of the method (it doesn't 3183 <p>The logger reference is lost at the end of the method (it doesn't
3095 escape the method), so if you have a garbage collection cycle just 3184 escape the method), so if you have a garbage collection cycle just
3096 after the call to initLogging, the logger configuration is lost 3185 after the call to initLogging, the logger configuration is lost
3097 (because Logger only keeps weak references).</p> 3186 (because Logger only keeps weak references).</p>
3098 3187
3099 <p><pre>public static void main(String[] args) throws Exception { 3188 <pre>public static void main(String[] args) throws Exception {
3100 initLogging(); // adds a file handler to the logger 3189 initLogging(); // adds a file handler to the logger
3101 System.gc(); // logger configuration lost 3190 System.gc(); // logger configuration lost
3102 Logger.getLogger("edu.umd.cs").info("Some message"); // this isn't logged to th e file as expected 3191 Logger.getLogger("edu.umd.cs").info("Some message"); // this isn't logged to th e file as expected
3103 }</pre></p> 3192 }</pre>
3104 <p><em>Ulf Ochsenfahrt and Eric Fellheimer</em></p> 3193 <p><em>Ulf Ochsenfahrt and Eric Fellheimer</em></p>
3105 3194
3106 3195
3107 <h3><a name="OBL_UNSATISFIED_OBLIGATION">OBL: Method may fail to clean up stream or resource (OBL_UNSATISFIED_OBLIGATION)</a></h3> 3196 <h3><a name="OBL_UNSATISFIED_OBLIGATION">OBL: Method may fail to clean up stream or resource (OBL_UNSATISFIED_OBLIGATION)</a></h3>
3108 3197
3109 3198
3110 <p> 3199 <p>
3111 This method may fail to clean up (close, dispose of) a stream, 3200 This method may fail to clean up (close, dispose of) a stream,
3112 database object, or other 3201 database object, or other
3113 resource requiring an explicit cleanup operation. 3202 resource requiring an explicit cleanup operation.
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
3183 bug pattern have not been extensively tuned, so 3272 bug pattern have not been extensively tuned, so
3184 reports about false positives are helpful to us. 3273 reports about false positives are helpful to us.
3185 </p> 3274 </p>
3186 3275
3187 <p> 3276 <p>
3188 See Weimer and Necula, <i>Finding and Preventing Run-Time Error Handli ng Mistakes</i>, for 3277 See Weimer and Necula, <i>Finding and Preventing Run-Time Error Handli ng Mistakes</i>, for
3189 a description of the analysis technique. 3278 a description of the analysis technique.
3190 </p> 3279 </p>
3191 3280
3192 3281
3282 <h3><a name="TESTING">TEST: Testing (TESTING)</a></h3>
3283
3284
3285 <p>This bug pattern is only generated by new, incompletely implemented
3286 bug detectors.</p>
3287
3288
3193 <h3><a name="DM_CONVERT_CASE">Dm: Consider using Locale parameterized version of invoked method (DM_CONVERT_CASE)</a></h3> 3289 <h3><a name="DM_CONVERT_CASE">Dm: Consider using Locale parameterized version of invoked method (DM_CONVERT_CASE)</a></h3>
3194 3290
3195 3291
3196 <p> A String is being converted to upper or lowercase, using the platform's de fault encoding. This may 3292 <p> A String is being converted to upper or lowercase, using the platform's de fault encoding. This may
3197 result in improper conversions when used with international characters. Us e the </p> 3293 result in improper conversions when used with international characters. Us e the </p>
3198 <ul> 3294 <ul>
3199 <li>String.toUpperCase( Locale l )</li> 3295 <li>String.toUpperCase( Locale l )</li>
3200 <li>String.toLowerCase( Locale l )</li> 3296 <li>String.toLowerCase( Locale l )</li>
3201 </ul> 3297 </ul>
3202 <p>versions instead.</p> 3298 <p>versions instead.</p>
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
3378 <p> This method may contain an instance of double-checked locking.&nbsp; 3474 <p> This method may contain an instance of double-checked locking.&nbsp;
3379 This idiom is not correct according to the semantics of the Java memory 3475 This idiom is not correct according to the semantics of the Java memory
3380 model.&nbsp; For more information, see the web page 3476 model.&nbsp; For more information, see the web page
3381 <a href="http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.htm l" 3477 <a href="http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.htm l"
3382 >http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html</a>.</ p> 3478 >http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html</a>.</ p>
3383 3479
3384 3480
3385 <h3><a name="DL_SYNCHRONIZATION_ON_BOOLEAN">DL: Synchronization on Boolean (DL_S YNCHRONIZATION_ON_BOOLEAN)</a></h3> 3481 <h3><a name="DL_SYNCHRONIZATION_ON_BOOLEAN">DL: Synchronization on Boolean (DL_S YNCHRONIZATION_ON_BOOLEAN)</a></h3>
3386 3482
3387 3483
3388 <p> The code synchronizes on a boxed primitive constant, such as an Boolean. 3484 <p> The code synchronizes on a boxed primitive constant, such as an Boolean.</ p>
3389 <pre> 3485 <pre>
3390 private static Boolean inited = Boolean.FALSE; 3486 private static Boolean inited = Boolean.FALSE;
3391 ... 3487 ...
3392 synchronized(inited) { 3488 synchronized(inited) {
3393 if (!inited) { 3489 if (!inited) {
3394 init(); 3490 init();
3395 inited = Boolean.TRUE; 3491 inited = Boolean.TRUE;
3396 } 3492 }
3397 } 3493 }
3398 ... 3494 ...
3399 </pre> 3495 </pre>
3400 </p>
3401 <p>Since there normally exist only two Boolean objects, this code could be synch ronizing on the same object as other, unrelated code, leading to unresponsivenes s 3496 <p>Since there normally exist only two Boolean objects, this code could be synch ronizing on the same object as other, unrelated code, leading to unresponsivenes s
3402 and possible deadlock</p> 3497 and possible deadlock</p>
3403 <p>See CERT <a href="https://www.securecoding.cert.org/confluence/display/java/C ON08-J.+Do+not+synchronize+on+objects+that+may+be+reused">CON08-J. Do not synchr onize on objects that may be reused</a> for more information.</p> 3498 <p>See CERT <a href="https://www.securecoding.cert.org/confluence/display/java/C ON08-J.+Do+not+synchronize+on+objects+that+may+be+reused">CON08-J. Do not synchr onize on objects that may be reused</a> for more information.</p>
3404 3499
3405 3500
3406 <h3><a name="DL_SYNCHRONIZATION_ON_BOXED_PRIMITIVE">DL: Synchronization on boxed primitive (DL_SYNCHRONIZATION_ON_BOXED_PRIMITIVE)</a></h3> 3501 <h3><a name="DL_SYNCHRONIZATION_ON_BOXED_PRIMITIVE">DL: Synchronization on boxed primitive (DL_SYNCHRONIZATION_ON_BOXED_PRIMITIVE)</a></h3>
3407 3502
3408 3503
3409 <p> The code synchronizes on a boxed primitive constant, such as an Integer. 3504 <p> The code synchronizes on a boxed primitive constant, such as an Integer.</ p>
3410 <pre> 3505 <pre>
3411 private static Integer count = 0; 3506 private static Integer count = 0;
3412 ... 3507 ...
3413 synchronized(count) { 3508 synchronized(count) {
3414 count++; 3509 count++;
3415 } 3510 }
3416 ... 3511 ...
3417 </pre> 3512 </pre>
3418 </p>
3419 <p>Since Integer objects can be cached and shared, 3513 <p>Since Integer objects can be cached and shared,
3420 this code could be synchronizing on the same object as other, unrelated code, le ading to unresponsiveness 3514 this code could be synchronizing on the same object as other, unrelated code, le ading to unresponsiveness
3421 and possible deadlock</p> 3515 and possible deadlock</p>
3422 <p>See CERT <a href="https://www.securecoding.cert.org/confluence/display/java/C ON08-J.+Do+not+synchronize+on+objects+that+may+be+reused">CON08-J. Do not synchr onize on objects that may be reused</a> for more information.</p> 3516 <p>See CERT <a href="https://www.securecoding.cert.org/confluence/display/java/C ON08-J.+Do+not+synchronize+on+objects+that+may+be+reused">CON08-J. Do not synchr onize on objects that may be reused</a> for more information.</p>
3423 3517
3424 3518
3425 <h3><a name="DL_SYNCHRONIZATION_ON_SHARED_CONSTANT">DL: Synchronization on inter ned String (DL_SYNCHRONIZATION_ON_SHARED_CONSTANT)</a></h3> 3519 <h3><a name="DL_SYNCHRONIZATION_ON_SHARED_CONSTANT">DL: Synchronization on inter ned String (DL_SYNCHRONIZATION_ON_SHARED_CONSTANT)</a></h3>
3426 3520
3427 3521
3428 <p> The code synchronizes on interned String. 3522 <p> The code synchronizes on interned String.</p>
3429 <pre> 3523 <pre>
3430 private static String LOCK = "LOCK"; 3524 private static String LOCK = "LOCK";
3431 ... 3525 ...
3432 synchronized(LOCK) { ...} 3526 synchronized(LOCK) { ...}
3433 ... 3527 ...
3434 </pre> 3528 </pre>
3435 </p>
3436 <p>Constant Strings are interned and shared across all other classes loaded by t he JVM. Thus, this could 3529 <p>Constant Strings are interned and shared across all other classes loaded by t he JVM. Thus, this could
3437 is locking on something that other code might also be locking. This could result in very strange and hard to diagnose 3530 is locking on something that other code might also be locking. This could result in very strange and hard to diagnose
3438 blocking and deadlock behavior. See <a href="http://www.javalobby.org/java/forum s/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/JETT Y-352</a>. 3531 blocking and deadlock behavior. See <a href="http://www.javalobby.org/java/forum s/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/JETT Y-352</a>.
3532 </p>
3439 <p>See CERT <a href="https://www.securecoding.cert.org/confluence/display/java/C ON08-J.+Do+not+synchronize+on+objects+that+may+be+reused">CON08-J. Do not synchr onize on objects that may be reused</a> for more information.</p> 3533 <p>See CERT <a href="https://www.securecoding.cert.org/confluence/display/java/C ON08-J.+Do+not+synchronize+on+objects+that+may+be+reused">CON08-J. Do not synchr onize on objects that may be reused</a> for more information.</p>
3440 </p>
3441 3534
3442 3535
3443 <h3><a name="DL_SYNCHRONIZATION_ON_UNSHARED_BOXED_PRIMITIVE">DL: Synchronization on boxed primitive values (DL_SYNCHRONIZATION_ON_UNSHARED_BOXED_PRIMITIVE)</a>< /h3> 3536 <h3><a name="DL_SYNCHRONIZATION_ON_UNSHARED_BOXED_PRIMITIVE">DL: Synchronization on boxed primitive values (DL_SYNCHRONIZATION_ON_UNSHARED_BOXED_PRIMITIVE)</a>< /h3>
3444 3537
3445 3538
3446 <p> The code synchronizes on an apparently unshared boxed primitive, 3539 <p> The code synchronizes on an apparently unshared boxed primitive,
3447 such as an Integer. 3540 such as an Integer.</p>
3448 <pre> 3541 <pre>
3449 private static final Integer fileLock = new Integer(1); 3542 private static final Integer fileLock = new Integer(1);
3450 ... 3543 ...
3451 synchronized(fileLock) { 3544 synchronized(fileLock) {
3452 .. do something .. 3545 .. do something ..
3453 } 3546 }
3454 ... 3547 ...
3455 </pre> 3548 </pre>
3456 </p> 3549 <p>It would be much better, in this code, to redeclare fileLock as</p>
3457 <p>It would be much better, in this code, to redeclare fileLock as
3458 <pre> 3550 <pre>
3459 private static final Object fileLock = new Object(); 3551 private static final Object fileLock = new Object();
3460 </pre> 3552 </pre>
3553 <p>
3461 The existing code might be OK, but it is confusing and a 3554 The existing code might be OK, but it is confusing and a
3462 future refactoring, such as the "Remove Boxing" refactoring in IntelliJ, 3555 future refactoring, such as the "Remove Boxing" refactoring in IntelliJ,
3463 might replace this with the use of an interned Integer object shared 3556 might replace this with the use of an interned Integer object shared
3464 throughout the JVM, leading to very confusing behavior and potential deadlock. 3557 throughout the JVM, leading to very confusing behavior and potential deadlock.
3465 </p> 3558 </p>
3466 3559
3467 3560
3468 <h3><a name="DM_MONITOR_WAIT_ON_CONDITION">Dm: Monitor wait() called on Conditio n (DM_MONITOR_WAIT_ON_CONDITION)</a></h3> 3561 <h3><a name="DM_MONITOR_WAIT_ON_CONDITION">Dm: Monitor wait() called on Conditio n (DM_MONITOR_WAIT_ON_CONDITION)</a></h3>
3469 3562
3470 3563
(...skipping 29 matching lines...) Expand all
3500 3593
3501 <h3><a name="IS2_INCONSISTENT_SYNC">IS: Inconsistent synchronization (IS2_INCONS ISTENT_SYNC)</a></h3> 3594 <h3><a name="IS2_INCONSISTENT_SYNC">IS: Inconsistent synchronization (IS2_INCONS ISTENT_SYNC)</a></h3>
3502 3595
3503 3596
3504 <p> The fields of this class appear to be accessed inconsistently with respect 3597 <p> The fields of this class appear to be accessed inconsistently with respect
3505 to synchronization.&nbsp; This bug report indicates that the bug pattern detec tor 3598 to synchronization.&nbsp; This bug report indicates that the bug pattern detec tor
3506 judged that 3599 judged that
3507 </p> 3600 </p>
3508 <ul> 3601 <ul>
3509 <li> The class contains a mix of locked and unlocked accesses,</li> 3602 <li> The class contains a mix of locked and unlocked accesses,</li>
3603 <li> The class is <b>not</b> annotated as javax.annotation.concurrent.NotThrea dSafe,</li>
3510 <li> At least one locked access was performed by one of the class's own method s, and</li> 3604 <li> At least one locked access was performed by one of the class's own method s, and</li>
3511 <li> The number of unsynchronized field accesses (reads and writes) was no mor e than 3605 <li> The number of unsynchronized field accesses (reads and writes) was no mor e than
3512 one third of all accesses, with writes being weighed twice as high as rea ds</li> 3606 one third of all accesses, with writes being weighed twice as high as rea ds</li>
3513 </ul> 3607 </ul>
3514 3608
3515 <p> A typical bug matching this bug pattern is forgetting to synchronize 3609 <p> A typical bug matching this bug pattern is forgetting to synchronize
3516 one of the methods in a class that is intended to be thread-safe.</p> 3610 one of the methods in a class that is intended to be thread-safe.</p>
3517 3611
3518 <p> You can select the nodes labeled "Unsynchronized access" to show the 3612 <p> You can select the nodes labeled "Unsynchronized access" to show the
3519 code locations where the detector believed that a field was accessed 3613 code locations where the detector believed that a field was accessed
3520 without synchronization.</p> 3614 without synchronization.</p>
3521 3615
3522 <p> Note that there are various sources of inaccuracy in this detector; 3616 <p> Note that there are various sources of inaccuracy in this detector;
3523 for example, the detector cannot statically detect all situations in which 3617 for example, the detector cannot statically detect all situations in which
3524 a lock is held.&nbsp; Also, even when the detector is accurate in 3618 a lock is held.&nbsp; Also, even when the detector is accurate in
3525 distinguishing locked vs. unlocked accesses, the code in question may still 3619 distinguishing locked vs. unlocked accesses, the code in question may still
3526 be correct.</p> 3620 be correct.</p>
3527 3621
3528 3622
3529 3623
3530 <h3><a name="IS_FIELD_NOT_GUARDED">IS: Field not guarded against concurrent acce ss (IS_FIELD_NOT_GUARDED)</a></h3> 3624 <h3><a name="IS_FIELD_NOT_GUARDED">IS: Field not guarded against concurrent acce ss (IS_FIELD_NOT_GUARDED)</a></h3>
3531 3625
3532 3626
3533 <p> This field is annotated with net.jcip.annotations.GuardedBy, 3627 <p> This field is annotated with net.jcip.annotations.GuardedBy or javax.annot ation.concurrent.GuardedBy,
3534 but can be accessed in a way that seems to violate the annotation.</p> 3628 but can be accessed in a way that seems to violate those annotations.</p>
3535 3629
3536 3630
3537 <h3><a name="JLM_JSR166_LOCK_MONITORENTER">JLM: Synchronization performed on Loc k (JLM_JSR166_LOCK_MONITORENTER)</a></h3> 3631 <h3><a name="JLM_JSR166_LOCK_MONITORENTER">JLM: Synchronization performed on Loc k (JLM_JSR166_LOCK_MONITORENTER)</a></h3>
3538 3632
3539 3633
3540 <p> This method performs synchronization an object that implements 3634 <p> This method performs synchronization an object that implements
3541 java.util.concurrent.locks.Lock. Such an object is locked/unlocked 3635 java.util.concurrent.locks.Lock. Such an object is locked/unlocked
3542 using 3636 using
3543 <code>acquire()</code>/<code>release()</code> rather 3637 <code>acquire()</code>/<code>release()</code> rather
3544 than using the <code>synchronized (...)</code> construct. 3638 than using the <code>synchronized (...)</code> construct.
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
3604 3698
3605 3699
3606 <h3><a name="ML_SYNC_ON_FIELD_TO_GUARD_CHANGING_THAT_FIELD">ML: Synchronization on field in futile attempt to guard that field (ML_SYNC_ON_FIELD_TO_GUARD_CHANGI NG_THAT_FIELD)</a></h3> 3700 <h3><a name="ML_SYNC_ON_FIELD_TO_GUARD_CHANGING_THAT_FIELD">ML: Synchronization on field in futile attempt to guard that field (ML_SYNC_ON_FIELD_TO_GUARD_CHANGI NG_THAT_FIELD)</a></h3>
3607 3701
3608 3702
3609 <p> This method synchronizes on a field in what appears to be an attempt 3703 <p> This method synchronizes on a field in what appears to be an attempt
3610 to guard against simultaneous updates to that field. But guarding a field 3704 to guard against simultaneous updates to that field. But guarding a field
3611 gets a lock on the referenced object, not on the field. This may not 3705 gets a lock on the referenced object, not on the field. This may not
3612 provide the mutual exclusion you need, and other threads might 3706 provide the mutual exclusion you need, and other threads might
3613 be obtaining locks on the referenced objects (for other purposes). An example 3707 be obtaining locks on the referenced objects (for other purposes). An example
3614 of this pattern would be: 3708 of this pattern would be:</p>
3615 3709 <pre>
3616 <p><pre>
3617 private Long myNtfSeqNbrCounter = new Long(0); 3710 private Long myNtfSeqNbrCounter = new Long(0);
3618 private Long getNotificationSequenceNumber() { 3711 private Long getNotificationSequenceNumber() {
3619 Long result = null; 3712 Long result = null;
3620 synchronized(myNtfSeqNbrCounter) { 3713 synchronized(myNtfSeqNbrCounter) {
3621 result = new Long(myNtfSeqNbrCounter.longValue() + 1); 3714 result = new Long(myNtfSeqNbrCounter.longValue() + 1);
3622 myNtfSeqNbrCounter = new Long(result.longValue()); 3715 myNtfSeqNbrCounter = new Long(result.longValue());
3623 } 3716 }
3624 return result; 3717 return result;
3625 } 3718 }
3626 </pre> 3719 </pre>
3627 3720
3628
3629 </p>
3630
3631 3721
3632 <h3><a name="ML_SYNC_ON_UPDATED_FIELD">ML: Method synchronizes on an updated fie ld (ML_SYNC_ON_UPDATED_FIELD)</a></h3> 3722 <h3><a name="ML_SYNC_ON_UPDATED_FIELD">ML: Method synchronizes on an updated fie ld (ML_SYNC_ON_UPDATED_FIELD)</a></h3>
3633 3723
3634 3724
3635 <p> This method synchronizes on an object 3725 <p> This method synchronizes on an object
3636 referenced from a mutable field. 3726 referenced from a mutable field.
3637 This is unlikely to have useful semantics, since different 3727 This is unlikely to have useful semantics, since different
3638 threads may be synchronizing on different objects.</p> 3728 threads may be synchronizing on different objects.</p>
3639 3729
3640 3730
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
3893 one of the atomic array classes in java.util.concurrent (provided 3983 one of the atomic array classes in java.util.concurrent (provided
3894 in Java 5.0).</p> 3984 in Java 5.0).</p>
3895 3985
3896 3986
3897 <h3><a name="WL_USING_GETCLASS_RATHER_THAN_CLASS_LITERAL">WL: Synchronization on getClass rather than class literal (WL_USING_GETCLASS_RATHER_THAN_CLASS_LITERAL )</a></h3> 3987 <h3><a name="WL_USING_GETCLASS_RATHER_THAN_CLASS_LITERAL">WL: Synchronization on getClass rather than class literal (WL_USING_GETCLASS_RATHER_THAN_CLASS_LITERAL )</a></h3>
3898 3988
3899 3989
3900 <p> 3990 <p>
3901 This instance method synchronizes on <code>this.getClass()</code>. If this class is subclassed, 3991 This instance method synchronizes on <code>this.getClass()</code>. If this class is subclassed,
3902 subclasses will synchronize on the class object for the subclass, which isn 't likely what was intended. 3992 subclasses will synchronize on the class object for the subclass, which isn 't likely what was intended.
3903 For example, consider this code from java.awt.Label: 3993 For example, consider this code from java.awt.Label:</p>
3904 <pre> 3994 <pre>
3905 private static final String base = "label"; 3995 private static final String base = "label";
3906 private static int nameCounter = 0; 3996 private static int nameCounter = 0;
3907 String constructComponentName() { 3997 String constructComponentName() {
3908 synchronized (getClass()) { 3998 synchronized (getClass()) {
3909 return base + nameCounter++; 3999 return base + nameCounter++;
3910 } 4000 }
3911 } 4001 }
3912 </pre></p> 4002 </pre>
3913 <p>Subclasses of <code>Label</code> won't synchronize on the same subclass, giving rise to a datarace. 4003 <p>Subclasses of <code>Label</code> won't synchronize on the same subclass, giving rise to a datarace.
3914 Instead, this code should be synchronizing on <code>Label.class</code> 4004 Instead, this code should be synchronizing on <code>Label.class</code></p>
3915 <pre> 4005 <pre>
3916 private static final String base = "label"; 4006 private static final String base = "label";
3917 private static int nameCounter = 0; 4007 private static int nameCounter = 0;
3918 String constructComponentName() { 4008 String constructComponentName() {
3919 synchronized (Label.class) { 4009 synchronized (Label.class) {
3920 return base + nameCounter++; 4010 return base + nameCounter++;
3921 } 4011 }
3922 } 4012 }
3923 </pre></p> 4013 </pre>
3924 <p>Bug pattern contributed by Jason Mehrens</p> 4014 <p>Bug pattern contributed by Jason Mehrens</p>
3925 4015
3926 4016
3927 <h3><a name="WS_WRITEOBJECT_SYNC">WS: Class's writeObject() method is synchroniz ed but nothing else is (WS_WRITEOBJECT_SYNC)</a></h3> 4017 <h3><a name="WS_WRITEOBJECT_SYNC">WS: Class's writeObject() method is synchroniz ed but nothing else is (WS_WRITEOBJECT_SYNC)</a></h3>
3928 4018
3929 4019
3930 <p> This class has a <code>writeObject()</code> method which is synchronized; 4020 <p> This class has a <code>writeObject()</code> method which is synchronized;
3931 however, no other method of the class is synchronized.</p> 4021 however, no other method of the class is synchronized.</p>
3932 4022
3933 4023
3934 <h3><a name="WA_AWAIT_NOT_IN_LOOP">Wa: Condition.await() not in loop (WA_AWAIT_ NOT_IN_LOOP)</a></h3> 4024 <h3><a name="WA_AWAIT_NOT_IN_LOOP">Wa: Condition.await() not in loop (WA_AWAIT_ NOT_IN_LOOP)</a></h3>
3935 4025
3936 4026
3937 <p> This method contains a call to <code>java.util.concurrent.await()</code> 4027 <p> This method contains a call to <code>java.util.concurrent.await()</code>
3938 (or variants) 4028 (or variants)
3939 which is not in a loop.&nbsp; If the object is used for multiple conditions, 4029 which is not in a loop.&nbsp; If the object is used for multiple conditions,
3940 the condition the caller intended to wait for might not be the one 4030 the condition the caller intended to wait for might not be the one
3941 that actually occurred.</p> 4031 that actually occurred.</p>
3942 4032
3943 4033
3944 <h3><a name="WA_NOT_IN_LOOP">Wa: Wait not in loop (WA_NOT_IN_LOOP)</a></h3> 4034 <h3><a name="WA_NOT_IN_LOOP">Wa: Wait not in loop (WA_NOT_IN_LOOP)</a></h3>
3945 4035
3946 4036
3947 <p> This method contains a call to <code>java.lang.Object.wait()</code> 4037 <p> This method contains a call to <code>java.lang.Object.wait()</code>
3948 which is not in a loop.&nbsp; If the monitor is used for multiple conditions, 4038 which is not in a loop.&nbsp; If the monitor is used for multiple conditions,
3949 the condition the caller intended to wait for might not be the one 4039 the condition the caller intended to wait for might not be the one
3950 that actually occurred.</p> 4040 that actually occurred.</p>
3951 4041
3952 4042
4043 <h3><a name="NOISE_FIELD_REFERENCE">NOISE: Bogus warning about a field reference (NOISE_FIELD_REFERENCE)</a></h3>
4044
4045
4046 <p>Bogus warning.</p>
4047
4048
4049 <h3><a name="NOISE_METHOD_CALL">NOISE: Bogus warning about a method call (NOISE_ METHOD_CALL)</a></h3>
4050
4051
4052 <p>Bogus warning.</p>
4053
4054
4055 <h3><a name="NOISE_NULL_DEREFERENCE">NOISE: Bogus warning about a null pointer d ereference (NOISE_NULL_DEREFERENCE)</a></h3>
4056
4057
4058 <p>Bogus warning.</p>
4059
4060
4061 <h3><a name="NOISE_OPERATION">NOISE: Bogus warning about an operation (NOISE_OPE RATION)</a></h3>
4062
4063
4064 <p>Bogus warning.</p>
4065
4066
3953 <h3><a name="BX_BOXING_IMMEDIATELY_UNBOXED">Bx: Primitive value is boxed and the n immediately unboxed (BX_BOXING_IMMEDIATELY_UNBOXED)</a></h3> 4067 <h3><a name="BX_BOXING_IMMEDIATELY_UNBOXED">Bx: Primitive value is boxed and the n immediately unboxed (BX_BOXING_IMMEDIATELY_UNBOXED)</a></h3>
3954 4068
3955 4069
3956 <p>A primitive is boxed, and then immediately unboxed. This probably is due to a manual 4070 <p>A primitive is boxed, and then immediately unboxed. This probably is due to a manual
3957 boxing in a place where an unboxed value is required, thus forcing the compi ler 4071 boxing in a place where an unboxed value is required, thus forcing the compi ler
3958 to immediately undo the work of the boxing. 4072 to immediately undo the work of the boxing.
3959 </p> 4073 </p>
3960 4074
3961 4075
3962 <h3><a name="BX_BOXING_IMMEDIATELY_UNBOXED_TO_PERFORM_COERCION">Bx: Primitive va lue is boxed then unboxed to perform primitive coercion (BX_BOXING_IMMEDIATELY_U NBOXED_TO_PERFORM_COERCION)</a></h3> 4076 <h3><a name="BX_BOXING_IMMEDIATELY_UNBOXED_TO_PERFORM_COERCION">Bx: Primitive va lue is boxed then unboxed to perform primitive coercion (BX_BOXING_IMMEDIATELY_U NBOXED_TO_PERFORM_COERCION)</a></h3>
3963 4077
3964 4078
3965 <p>A primitive boxed value constructed and then immediately converted into a d ifferent primitive type 4079 <p>A primitive boxed value constructed and then immediately converted into a d ifferent primitive type
3966 (e.g., <code>new Double(d).intValue()</code>). Just perform direct primitive coe rcion (e.g., <code>(int) d</code>).</p> 4080 (e.g., <code>new Double(d).intValue()</code>). Just perform direct primitive coe rcion (e.g., <code>(int) d</code>).</p>
3967 4081
3968 4082
3969 <h3><a name="BX_UNBOXING_IMMEDIATELY_REBOXED">Bx: Boxed value is unboxed and the n immediately reboxed (BX_UNBOXING_IMMEDIATELY_REBOXED)</a></h3> 4083 <h3><a name="BX_UNBOXING_IMMEDIATELY_REBOXED">Bx: Boxed value is unboxed and the n immediately reboxed (BX_UNBOXING_IMMEDIATELY_REBOXED)</a></h3>
3970 4084
3971 4085
3972 <p>A boxed value is unboxed and then immediately reboxed. 4086 <p>A boxed value is unboxed and then immediately reboxed.
3973 </p> 4087 </p>
3974 4088
3975 4089
4090 <h3><a name="DM_BOXED_PRIMITIVE_FOR_PARSING">Bx: Boxing/unboxing to parse a prim itive (DM_BOXED_PRIMITIVE_FOR_PARSING)</a></h3>
4091
4092
4093 <p>A boxed primitive is created from a String, just to extract the unboxed pri mitive value.
4094 It is more efficient to just call the static parseXXX method.</p>
4095
4096
3976 <h3><a name="DM_BOXED_PRIMITIVE_TOSTRING">Bx: Method allocates a boxed primitive just to call toString (DM_BOXED_PRIMITIVE_TOSTRING)</a></h3> 4097 <h3><a name="DM_BOXED_PRIMITIVE_TOSTRING">Bx: Method allocates a boxed primitive just to call toString (DM_BOXED_PRIMITIVE_TOSTRING)</a></h3>
3977 4098
3978 4099
3979 <p>A boxed primitive is allocated just to call toString(). It is more effectiv e to just use the static 4100 <p>A boxed primitive is allocated just to call toString(). It is more effectiv e to just use the static
3980 form of toString which takes the primitive value. So,</p> 4101 form of toString which takes the primitive value. So,</p>
3981 <table> 4102 <table>
3982 <tr><th>Replace...</th><th>With this...</th></tr> 4103 <tr><th>Replace...</th><th>With this...</th></tr>
3983 <tr><td>new Integer(1).toString()</td><td>Integer.toString(1)</td></tr> 4104 <tr><td>new Integer(1).toString()</td><td>Integer.toString(1)</td></tr>
3984 <tr><td>new Long(1).toString()</td><td>Long.toString(1)</td></tr> 4105 <tr><td>new Long(1).toString()</td><td>Long.toString(1)</td></tr>
3985 <tr><td>new Float(1.0).toString()</td><td>Float.toString(1.0)</td></tr> 4106 <tr><td>new Float(1.0).toString()</td><td>Float.toString(1.0)</td></tr>
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
4116 <p> 4237 <p>
4117 A large String constant is duplicated across multiple class files. 4238 A large String constant is duplicated across multiple class files.
4118 This is likely because a final field is initialized to a String constant, an d the Java language 4239 This is likely because a final field is initialized to a String constant, an d the Java language
4119 mandates that all references to a final field from other classes be inlined into 4240 mandates that all references to a final field from other classes be inlined into
4120 that classfile. See <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id= 6447475">JDK bug 6447475</a> 4241 that classfile. See <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id= 6447475">JDK bug 6447475</a>
4121 for a description of an occurrence of this bug in the JDK and how resolving it reduced 4242 for a description of an occurrence of this bug in the JDK and how resolving it reduced
4122 the size of the JDK by 1 megabyte. 4243 the size of the JDK by 1 megabyte.
4123 </p> 4244 </p>
4124 4245
4125 4246
4247 <h3><a name="IMA_INEFFICIENT_MEMBER_ACCESS">IMA: Method accesses a private membe r variable of owning class (IMA_INEFFICIENT_MEMBER_ACCESS)</a></h3>
4248
4249
4250 <p>
4251 This method of an inner class reads from or writes to a private member var iable of the owning class,
4252 or calls a private method of the owning class. The compiler must generate a special method to access this
4253 private member, causing this to be less efficient. Relaxing the protection of the member variable or method
4254 will allow the compiler to treat this as a normal access.
4255 </p>
4256
4257
4126 <h3><a name="ITA_INEFFICIENT_TO_ARRAY">ITA: Method uses toArray() with zero-leng th array argument (ITA_INEFFICIENT_TO_ARRAY)</a></h3> 4258 <h3><a name="ITA_INEFFICIENT_TO_ARRAY">ITA: Method uses toArray() with zero-leng th array argument (ITA_INEFFICIENT_TO_ARRAY)</a></h3>
4127 4259
4128 4260
4129 <p> This method uses the toArray() method of a collection derived class, and pas ses 4261 <p> This method uses the toArray() method of a collection derived class, and pas ses
4130 in a zero-length prototype array argument. It is more efficient to use 4262 in a zero-length prototype array argument. It is more efficient to use
4131 <code>myCollection.toArray(new Foo[myCollection.size()])</code> 4263 <code>myCollection.toArray(new Foo[myCollection.size()])</code>
4132 If the array passed in is big enough to store all of the 4264 If the array passed in is big enough to store all of the
4133 elements of the collection, then it is populated and returned 4265 elements of the collection, then it is populated and returned
4134 directly. This avoids the need to create a second array 4266 directly. This avoids the need to create a second array
4135 (by reflection) to return as the result.</p> 4267 (by reflection) to return as the result.</p>
(...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after
4522 4654
4523 4655
4524 <p> 4656 <p>
4525 The code performs an unsigned right shift, whose result is then 4657 The code performs an unsigned right shift, whose result is then
4526 cast to a short or byte, which discards the upper bits of the result. 4658 cast to a short or byte, which discards the upper bits of the result.
4527 Since the upper bits are discarded, there may be no difference between 4659 Since the upper bits are discarded, there may be no difference between
4528 a signed and unsigned right shift (depending upon the size of the shift). 4660 a signed and unsigned right shift (depending upon the size of the shift).
4529 </p> 4661 </p>
4530 4662
4531 4663
4664 <h3><a name="CD_CIRCULAR_DEPENDENCY">CD: Test for circular dependencies among cl asses (CD_CIRCULAR_DEPENDENCY)</a></h3>
4665
4666
4667 <p>
4668 This class has a circular dependency with other classes. This makes building these classes
4669 difficult, as each is dependent on the other to build correctly. Consider us ing interfaces
4670 to break the hard dependency.
4671 </p>
4672
4673
4532 <h3><a name="CI_CONFUSED_INHERITANCE">CI: Class is final but declares protected field (CI_CONFUSED_INHERITANCE)</a></h3> 4674 <h3><a name="CI_CONFUSED_INHERITANCE">CI: Class is final but declares protected field (CI_CONFUSED_INHERITANCE)</a></h3>
4533 4675
4534 4676
4535 <p> 4677 <p>
4536 This class is declared to be final, but declares fields to be protected. S ince the class 4678 This class is declared to be final, but declares fields to be protected. S ince the class
4537 is final, it can not be derived from, and the use of protected is confusin g. The access 4679 is final, it can not be derived from, and the use of protected is confusin g. The access
4538 modifier for the field should be changed to private or public to represent the true 4680 modifier for the field should be changed to private or public to represent the true
4539 use for the field. 4681 use for the field.
4540 </p> 4682 </p>
4541 4683
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
4632 4774
4633 <h3><a name="DMI_THREAD_PASSED_WHERE_RUNNABLE_EXPECTED">Dm: Thread passed where Runnable expected (DMI_THREAD_PASSED_WHERE_RUNNABLE_EXPECTED)</a></h3> 4775 <h3><a name="DMI_THREAD_PASSED_WHERE_RUNNABLE_EXPECTED">Dm: Thread passed where Runnable expected (DMI_THREAD_PASSED_WHERE_RUNNABLE_EXPECTED)</a></h3>
4634 4776
4635 4777
4636 <p> A Thread object is passed as a parameter to a method where 4778 <p> A Thread object is passed as a parameter to a method where
4637 a Runnable is expected. This is rather unusual, and may indicate a logic error 4779 a Runnable is expected. This is rather unusual, and may indicate a logic error
4638 or cause unexpected behavior. 4780 or cause unexpected behavior.
4639 </p> 4781 </p>
4640 4782
4641 4783
4784 <h3><a name="DMI_UNSUPPORTED_METHOD">Dm: Call to unsupported method (DMI_UNSUPPO RTED_METHOD)</a></h3>
4785
4786
4787 <p>All targets of this method invocation throw an UnsupportedOperationExcept ion.
4788 </p>
4789
4790
4791
4642 <h3><a name="EQ_DOESNT_OVERRIDE_EQUALS">Eq: Class doesn't override equals in sup erclass (EQ_DOESNT_OVERRIDE_EQUALS)</a></h3> 4792 <h3><a name="EQ_DOESNT_OVERRIDE_EQUALS">Eq: Class doesn't override equals in sup erclass (EQ_DOESNT_OVERRIDE_EQUALS)</a></h3>
4643 4793
4644 4794
4645 <p> This class extends a class that defines an equals method and adds fields, but doesn't 4795 <p> This class extends a class that defines an equals method and adds fields, but doesn't
4646 define an equals method itself. Thus, equality on instances of this class will 4796 define an equals method itself. Thus, equality on instances of this class will
4647 ignore the identity of the subclass and the added fields. Be sure this is what i s intended, 4797 ignore the identity of the subclass and the added fields. Be sure this is what i s intended,
4648 and that you don't need to override the equals method. Even if you don't need to override 4798 and that you don't need to override the equals method. Even if you don't need to override
4649 the equals method, consider overriding it anyway to document the fact 4799 the equals method, consider overriding it anyway to document the fact
4650 that the equals method for the subclass just return the result of 4800 that the equals method for the subclass just return the result of
4651 invoking super.equals(o). 4801 invoking super.equals(o).
(...skipping 28 matching lines...) Expand all
4680 <h3><a name="VA_FORMAT_STRING_BAD_CONVERSION_TO_BOOLEAN">FS: Non-Boolean argumen t formatted using %b format specifier (VA_FORMAT_STRING_BAD_CONVERSION_TO_BOOLEA N)</a></h3> 4830 <h3><a name="VA_FORMAT_STRING_BAD_CONVERSION_TO_BOOLEAN">FS: Non-Boolean argumen t formatted using %b format specifier (VA_FORMAT_STRING_BAD_CONVERSION_TO_BOOLEA N)</a></h3>
4681 4831
4682 4832
4683 <p> 4833 <p>
4684 An argument not of type Boolean is being formatted with a %b format specifier. T his won't throw an 4834 An argument not of type Boolean is being formatted with a %b format specifier. T his won't throw an
4685 exception; instead, it will print true for any nonnull value, and false for null . 4835 exception; instead, it will print true for any nonnull value, and false for null .
4686 This feature of format strings is strange, and may not be what you intended. 4836 This feature of format strings is strange, and may not be what you intended.
4687 </p> 4837 </p>
4688 4838
4689 4839
4690 <h3><a name="IA_AMBIGUOUS_INVOCATION_OF_INHERITED_OR_OUTER_METHOD">IA: Ambiguous invocation of either an inherited or outer method (IA_AMBIGUOUS_INVOCATION_OF_I NHERITED_OR_OUTER_METHOD)</a></h3> 4840 <h3><a name="IA_AMBIGUOUS_INVOCATION_OF_INHERITED_OR_OUTER_METHOD">IA: Potential ly ambiguous invocation of either an inherited or outer method (IA_AMBIGUOUS_INV OCATION_OF_INHERITED_OR_OUTER_METHOD)</a></h3>
4691 4841
4692 4842
4693 <p> An inner class is invoking a method that could be resolved to either a inh erited method or a method defined in an outer class. By the Java semantics, 4843 <p>
4844 An inner class is invoking a method that could be resolved to either a inherited method or a method defined in an outer class.
4845 For example, you invoke <code>foo(17)</code>, which is defined in both a supercl ass and in an outer method.
4846 By the Java semantics,
4694 it will be resolved to invoke the inherited method, but this may not be want 4847 it will be resolved to invoke the inherited method, but this may not be want
4695 you intend. If you really intend to invoke the inherited method, 4848 you intend.
4849 </p>
4850 <p>If you really intend to invoke the inherited method,
4696 invoke it by invoking the method on super (e.g., invoke super.foo(17)), and 4851 invoke it by invoking the method on super (e.g., invoke super.foo(17)), and
4697 thus it will be clear to other readers of your code and to FindBugs 4852 thus it will be clear to other readers of your code and to FindBugs
4698 that you want to invoke the inherited method, not the method in the outer class. 4853 that you want to invoke the inherited method, not the method in the outer class.
4699 </p> 4854 </p>
4855 <p>If you call <code>this.foo(17)</code>, then the inherited method will be invo ked. However, since FindBugs only looks at
4856 classfiles, it
4857 can't tell the difference between an invocation of <code>this.foo(17)</code> and <code>foo(17)</code>, it will still
4858 complain about a potential ambiguous invocation.
4859 </p>
4700 4860
4701 4861
4702 <h3><a name="IC_INIT_CIRCULARITY">IC: Initialization circularity (IC_INIT_CIRCUL ARITY)</a></h3> 4862 <h3><a name="IC_INIT_CIRCULARITY">IC: Initialization circularity (IC_INIT_CIRCUL ARITY)</a></h3>
4703 4863
4704 4864
4705 <p> A circularity was detected in the static initializers of the two 4865 <p> A circularity was detected in the static initializers of the two
4706 classes referenced by the bug instance.&nbsp; Many kinds of unexpected 4866 classes referenced by the bug instance.&nbsp; Many kinds of unexpected
4707 behavior may arise from such circularity.</p> 4867 behavior may arise from such circularity.</p>
4708 4868
4709 4869
4710 <h3><a name="ICAST_IDIV_CAST_TO_DOUBLE">ICAST: integral division result cast to double or float (ICAST_IDIV_CAST_TO_DOUBLE)</a></h3> 4870 <h3><a name="ICAST_IDIV_CAST_TO_DOUBLE">ICAST: Integral division result cast to double or float (ICAST_IDIV_CAST_TO_DOUBLE)</a></h3>
4711 4871
4712 4872
4713 <p> 4873 <p>
4714 This code casts the result of an integral division (e.g., int or long division) 4874 This code casts the result of an integral division (e.g., int or long division)
4715 operation to double or 4875 operation to double or
4716 float. 4876 float.
4717 Doing division on integers truncates the result 4877 Doing division on integers truncates the result
4718 to the integer value closest to zero. The fact that the result 4878 to the integer value closest to zero. The fact that the result
4719 was cast to double suggests that this precision should have been retained. 4879 was cast to double suggests that this precision should have been retained.
4720 What was probably meant was to cast one or both of the operands to 4880 What was probably meant was to cast one or both of the operands to
(...skipping 10 matching lines...) Expand all
4731 double value2 = x / (double) y; 4891 double value2 = x / (double) y;
4732 </pre> 4892 </pre>
4733 </blockquote> 4893 </blockquote>
4734 4894
4735 4895
4736 <h3><a name="ICAST_INTEGER_MULTIPLY_CAST_TO_LONG">ICAST: Result of integer multi plication cast to long (ICAST_INTEGER_MULTIPLY_CAST_TO_LONG)</a></h3> 4896 <h3><a name="ICAST_INTEGER_MULTIPLY_CAST_TO_LONG">ICAST: Result of integer multi plication cast to long (ICAST_INTEGER_MULTIPLY_CAST_TO_LONG)</a></h3>
4737 4897
4738 4898
4739 <p> 4899 <p>
4740 This code performs integer multiply and then converts the result to a long, 4900 This code performs integer multiply and then converts the result to a long,
4741 as in: 4901 as in:</p>
4742 <code>
4743 <pre> 4902 <pre>
4744 long convertDaysToMilliseconds(int days) { return 1000*3600*24*days; } 4903 long convertDaysToMilliseconds(int days) { return 1000*3600*24*days; }
4745 </pre></code> 4904 </pre>
4905 <p>
4746 If the multiplication is done using long arithmetic, you can avoid 4906 If the multiplication is done using long arithmetic, you can avoid
4747 the possibility that the result will overflow. For example, you 4907 the possibility that the result will overflow. For example, you
4748 could fix the above code to: 4908 could fix the above code to:</p>
4749 <code>
4750 <pre> 4909 <pre>
4751 long convertDaysToMilliseconds(int days) { return 1000L*3600*24*days; } 4910 long convertDaysToMilliseconds(int days) { return 1000L*3600*24*days; }
4752 </pre></code> 4911 </pre>
4753 or 4912 or
4754 <code>
4755 <pre> 4913 <pre>
4756 static final long MILLISECONDS_PER_DAY = 24L*3600*1000; 4914 static final long MILLISECONDS_PER_DAY = 24L*3600*1000;
4757 long convertDaysToMilliseconds(int days) { return days * MILLISECONDS_PER_DA Y; } 4915 long convertDaysToMilliseconds(int days) { return days * MILLISECONDS_PER_DA Y; }
4758 </pre></code> 4916 </pre>
4759 </p>
4760
4761 4917
4762 4918
4763 <h3><a name="IM_AVERAGE_COMPUTATION_COULD_OVERFLOW">IM: Computation of average c ould overflow (IM_AVERAGE_COMPUTATION_COULD_OVERFLOW)</a></h3> 4919 <h3><a name="IM_AVERAGE_COMPUTATION_COULD_OVERFLOW">IM: Computation of average c ould overflow (IM_AVERAGE_COMPUTATION_COULD_OVERFLOW)</a></h3>
4764 4920
4765 4921
4766 <p>The code computes the average of two integers using either division or signed right shift, 4922 <p>The code computes the average of two integers using either division or signed right shift,
4767 and then uses the result as the index of an array. 4923 and then uses the result as the index of an array.
4768 If the values being averaged are very large, this can overflow (resulting in the computation 4924 If the values being averaged are very large, this can overflow (resulting in the computation
4769 of a negative average). Assuming that the result is intended to be nonnegative, you 4925 of a negative average). Assuming that the result is intended to be nonnegative, you
4770 can use an unsigned right shift instead. In other words, rather that using <code >(low+high)/2</code>, 4926 can use an unsigned right shift instead. In other words, rather that using <code >(low+high)/2</code>,
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
4855 <h3><a name="NP_LOAD_OF_KNOWN_NULL_VALUE">NP: Load of known null value (NP_LOAD_ OF_KNOWN_NULL_VALUE)</a></h3> 5011 <h3><a name="NP_LOAD_OF_KNOWN_NULL_VALUE">NP: Load of known null value (NP_LOAD_ OF_KNOWN_NULL_VALUE)</a></h3>
4856 5012
4857 5013
4858 <p> The variable referenced at this point is known to be null due to an earlie r 5014 <p> The variable referenced at this point is known to be null due to an earlie r
4859 check against null. Although this is valid, it might be a mistake (perhaps yo u 5015 check against null. Although this is valid, it might be a mistake (perhaps yo u
4860 intended to refer to a different variable, or perhaps the earlier check to see i f the 5016 intended to refer to a different variable, or perhaps the earlier check to see i f the
4861 variable is null should have been a check to see if it was nonnull). 5017 variable is null should have been a check to see if it was nonnull).
4862 </p> 5018 </p>
4863 5019
4864 5020
5021 <h3><a name="NP_METHOD_PARAMETER_TIGHTENS_ANNOTATION">NP: Method tightens nullne ss annotation on parameter (NP_METHOD_PARAMETER_TIGHTENS_ANNOTATION)</a></h3>
5022
5023 <p>
5024 A method should always implement the contract of a method it overrides. Thus, if a method takes a parameter
5025 that is marked as @Nullable, you shouldn't override that method in a sub class with a method where that parameter is @Nonnull.
5026 Doing so violates the contract that the method should handle a null para meter.
5027 </p>
5028
5029 <h3><a name="NP_METHOD_RETURN_RELAXING_ANNOTATION">NP: Method relaxes nullness a nnotation on return value (NP_METHOD_RETURN_RELAXING_ANNOTATION)</a></h3>
5030
5031 <p>
5032 A method should always implement the contract of a method it overrides. Thus, if a method takes is annotated
5033 as returning a @Nonnull value,
5034 you shouldn't override that method in a subclass with a method annotated as returning a @Nullable or @CheckForNull value.
5035 Doing so violates the contract that the method shouldn't return null.
5036 </p>
5037
4865 <h3><a name="NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE">NP: Possible null pointer d ereference due to return value of called method (NP_NULL_ON_SOME_PATH_FROM_RETUR N_VALUE)</a></h3> 5038 <h3><a name="NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE">NP: Possible null pointer d ereference due to return value of called method (NP_NULL_ON_SOME_PATH_FROM_RETUR N_VALUE)</a></h3>
4866 5039
4867 5040
4868 <p> The return value from a method is dereferenced without a null check, 5041 <p> The return value from a method is dereferenced without a null check,
4869 and the return value of that method is one that should generally be checked 5042 and the return value of that method is one that should generally be checked
4870 for null. This may lead to a <code>NullPointerException</code> when the code is executed. 5043 for null. This may lead to a <code>NullPointerException</code> when the code is executed.
4871 </p> 5044 </p>
4872 5045
4873 5046
4874 <h3><a name="NP_NULL_ON_SOME_PATH_MIGHT_BE_INFEASIBLE">NP: Possible null pointer dereference on branch that might be infeasible (NP_NULL_ON_SOME_PATH_MIGHT_BE_I NFEASIBLE)</a></h3> 5047 <h3><a name="NP_NULL_ON_SOME_PATH_MIGHT_BE_INFEASIBLE">NP: Possible null pointer dereference on branch that might be infeasible (NP_NULL_ON_SOME_PATH_MIGHT_BE_I NFEASIBLE)</a></h3>
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
4937 knowing the left-hand side. This can be less efficient and 5110 knowing the left-hand side. This can be less efficient and
4938 can result in errors if the left-hand side guards cases 5111 can result in errors if the left-hand side guards cases
4939 when evaluating the right-hand side can generate an error. 5112 when evaluating the right-hand side can generate an error.
4940 5113
4941 <p>See <a href="http://java.sun.com/docs/books/jls/third_edition/html/expression s.html#15.22.2">the Java 5114 <p>See <a href="http://java.sun.com/docs/books/jls/third_edition/html/expression s.html#15.22.2">the Java
4942 Language Specification</a> for details 5115 Language Specification</a> for details
4943 5116
4944 </p> 5117 </p>
4945 5118
4946 5119
5120 <h3><a name="PS_PUBLIC_SEMAPHORES">PS: Class exposes synchronization and semapho res in its public interface (PS_PUBLIC_SEMAPHORES)</a></h3>
5121
5122
5123 <p>
5124 This class uses synchronization along with wait(), notify() or notifyAll() o n itself (the this
5125 reference). Client classes that use this class, may, in addition, use an ins tance of this class
5126 as a synchronizing object. Because two classes are using the same object for synchronization,
5127 Multithread correctness is suspect. You should not synchronize nor call sema phore methods on
5128 a public reference. Consider using a internal private member variable to con trol synchronization.
5129 </p>
5130
5131
4947 <h3><a name="PZLA_PREFER_ZERO_LENGTH_ARRAYS">PZLA: Consider returning a zero len gth array rather than null (PZLA_PREFER_ZERO_LENGTH_ARRAYS)</a></h3> 5132 <h3><a name="PZLA_PREFER_ZERO_LENGTH_ARRAYS">PZLA: Consider returning a zero len gth array rather than null (PZLA_PREFER_ZERO_LENGTH_ARRAYS)</a></h3>
4948 5133
4949 5134
4950 <p> It is often a better design to 5135 <p> It is often a better design to
4951 return a length zero array rather than a null reference to indicate that there 5136 return a length zero array rather than a null reference to indicate that there
4952 are no results (i.e., an empty list of results). 5137 are no results (i.e., an empty list of results).
4953 This way, no explicit check for null is needed by clients of the method.</p> 5138 This way, no explicit check for null is needed by clients of the method.</p>
4954 5139
4955 <p>On the other hand, using null to indicate 5140 <p>On the other hand, using null to indicate
4956 "there is no answer to this question" is probably appropriate. 5141 "there is no answer to this question" is probably appropriate.
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
4999 <h3><a name="REC_CATCH_EXCEPTION">REC: Exception is caught when Exception is not thrown (REC_CATCH_EXCEPTION)</a></h3> 5184 <h3><a name="REC_CATCH_EXCEPTION">REC: Exception is caught when Exception is not thrown (REC_CATCH_EXCEPTION)</a></h3>
5000 5185
5001 5186
5002 <p> 5187 <p>
5003 This method uses a try-catch block that catches Exception objects, but Excepti on is not 5188 This method uses a try-catch block that catches Exception objects, but Excepti on is not
5004 thrown within the try block, and RuntimeException is not explicitly caught. I t is a common bug pattern to 5189 thrown within the try block, and RuntimeException is not explicitly caught. I t is a common bug pattern to
5005 say try { ... } catch (Exception e) { something } as a shorthand for catching a number of types of exception 5190 say try { ... } catch (Exception e) { something } as a shorthand for catching a number of types of exception
5006 each of whose catch blocks is identical, but this construct also accidentally catches RuntimeException as well, 5191 each of whose catch blocks is identical, but this construct also accidentally catches RuntimeException as well,
5007 masking potential bugs. 5192 masking potential bugs.
5008 </p> 5193 </p>
5194 <p>A better approach is to either explicitly catch the specific exceptions tha t are thrown,
5195 or to explicitly catch RuntimeException exception, rethrow it, and then catch all non-Runtime Exceptions, as shown below:</p>
5196 <pre>
5197 try {
5198 ...
5199 } catch (RuntimeException e) {
5200 throw e;
5201 } catch (Exception e) {
5202 ... deal with all non-runtime exceptions ...
5203 }</pre>
5009 5204
5010 5205
5011 <h3><a name="RI_REDUNDANT_INTERFACES">RI: Class implements same interface as sup erclass (RI_REDUNDANT_INTERFACES)</a></h3> 5206 <h3><a name="RI_REDUNDANT_INTERFACES">RI: Class implements same interface as sup erclass (RI_REDUNDANT_INTERFACES)</a></h3>
5012 5207
5013 5208
5014 <p> 5209 <p>
5015 This class declares that it implements an interface that is also implemented by a superclass. 5210 This class declares that it implements an interface that is also implemented by a superclass.
5016 This is redundant because once a superclass implements an interface, all sub classes by default also 5211 This is redundant because once a superclass implements an interface, all sub classes by default also
5017 implement this interface. It may point out that the inheritance hierarchy ha s changed since 5212 implement this interface. It may point out that the inheritance hierarchy ha s changed since
5018 this class was created, and consideration should be given to the ownership o f 5213 this class was created, and consideration should be given to the ownership o f
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
5132 5327
5133 <p> This method contains a switch statement where one case branch will fall th rough to the next case. 5328 <p> This method contains a switch statement where one case branch will fall th rough to the next case.
5134 Usually you need to end this case with a break or return.</p> 5329 Usually you need to end this case with a break or return.</p>
5135 5330
5136 5331
5137 <h3><a name="SF_SWITCH_NO_DEFAULT">SF: Switch statement found where default case is missing (SF_SWITCH_NO_DEFAULT)</a></h3> 5332 <h3><a name="SF_SWITCH_NO_DEFAULT">SF: Switch statement found where default case is missing (SF_SWITCH_NO_DEFAULT)</a></h3>
5138 5333
5139 5334
5140 <p> This method contains a switch statement where default case is missing. 5335 <p> This method contains a switch statement where default case is missing.
5141 Usually you need to provide a default case.</p> 5336 Usually you need to provide a default case.</p>
5337 <p>Because the analysis only looks at the generated bytecode, this warning can be incorrect triggered if
5338 the default case is at the end of the switch statement and doesn't end with a br eak statement.
5142 5339
5143 5340
5144 <h3><a name="ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD">ST: Write to static field from instance method (ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD)</a></h3> 5341 <h3><a name="ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD">ST: Write to static field from instance method (ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD)</a></h3>
5145 5342
5146 5343
5147 <p> This instance method writes to a static field. This is tricky to get 5344 <p> This instance method writes to a static field. This is tricky to get
5148 correct if multiple instances are being manipulated, 5345 correct if multiple instances are being manipulated,
5149 and generally bad practice. 5346 and generally bad practice.
5150 </p> 5347 </p>
5151 5348
5152 5349
5153 <h3><a name="SE_PRIVATE_READ_RESOLVE_NOT_INHERITED">Se: private readResolve meth od not inherited by subclasses (SE_PRIVATE_READ_RESOLVE_NOT_INHERITED)</a></h3> 5350 <h3><a name="SE_PRIVATE_READ_RESOLVE_NOT_INHERITED">Se: Private readResolve meth od not inherited by subclasses (SE_PRIVATE_READ_RESOLVE_NOT_INHERITED)</a></h3>
5154 5351
5155 5352
5156 <p> This class defines a private readResolve method. Since it is private, it w on't be inherited by subclasses. 5353 <p> This class defines a private readResolve method. Since it is private, it w on't be inherited by subclasses.
5157 This might be intentional and OK, but should be reviewed to ensure it is what is intended. 5354 This might be intentional and OK, but should be reviewed to ensure it is what is intended.
5158 </p> 5355 </p>
5159 5356
5160 5357
5161 <h3><a name="SE_TRANSIENT_FIELD_OF_NONSERIALIZABLE_CLASS">Se: Transient field of class that isn't Serializable. (SE_TRANSIENT_FIELD_OF_NONSERIALIZABLE_CLASS)</ a></h3> 5358 <h3><a name="SE_TRANSIENT_FIELD_OF_NONSERIALIZABLE_CLASS">Se: Transient field of class that isn't Serializable. (SE_TRANSIENT_FIELD_OF_NONSERIALIZABLE_CLASS)</ a></h3>
5162 5359
5163 5360
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
5210 flow follows to the same or following line regardless of whether or not 5407 flow follows to the same or following line regardless of whether or not
5211 the branch is taken. 5408 the branch is taken.
5212 Often, this is caused by inadvertently using an empty statement as the 5409 Often, this is caused by inadvertently using an empty statement as the
5213 body of an <code>if</code> statement, e.g.:</p> 5410 body of an <code>if</code> statement, e.g.:</p>
5214 <pre> 5411 <pre>
5215 if (argv.length == 1); 5412 if (argv.length == 1);
5216 System.out.println("Hello, " + argv[0]); 5413 System.out.println("Hello, " + argv[0]);
5217 </pre> 5414 </pre>
5218 5415
5219 5416
5417 <h3><a name="USM_USELESS_ABSTRACT_METHOD">USM: Abstract Method is already define d in implemented interface (USM_USELESS_ABSTRACT_METHOD)</a></h3>
5418
5419
5420 <p>
5421 This abstract method is already defined in an interface that is implemente d by this abstract
5422 class. This method can be removed, as it provides no additional value.
5423 </p>
5424
5425
5426 <h3><a name="USM_USELESS_SUBCLASS_METHOD">USM: Method superfluously delegates to parent class method (USM_USELESS_SUBCLASS_METHOD)</a></h3>
5427
5428
5429 <p>
5430 This derived method merely calls the same superclass method passing in the exact parameters
5431 received. This method can be removed, as it provides no additional value.
5432 </p>
5433
5434
5220 <h3><a name="URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD">UrF: Unread public/protected field (URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD)</a></h3> 5435 <h3><a name="URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD">UrF: Unread public/protected field (URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD)</a></h3>
5221 5436
5222 5437
5223 <p> This field is never read.&nbsp 5438 <p> This field is never read.&nbsp;
5224 The field is public or protected, so perhaps 5439 The field is public or protected, so perhaps
5225 it is intended to be used with classes not seen as part of the analysis. If not, 5440 it is intended to be used with classes not seen as part of the analysis. If not,
5226 consider removing it from the class.</p> 5441 consider removing it from the class.</p>
5227 5442
5228 5443
5229 <h3><a name="UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD">UuF: Unused public or protect ed field (UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD)</a></h3> 5444 <h3><a name="UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD">UuF: Unused public or protect ed field (UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD)</a></h3>
5230 5445
5231 5446
5232 <p> This field is never used.&nbsp; 5447 <p> This field is never used.&nbsp;
5233 The field is public or protected, so perhaps 5448 The field is public or protected, so perhaps
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
5276 <script language="JavaScript" type="text/javascript"> 5491 <script language="JavaScript" type="text/javascript">
5277 <!---//hide script from old browsers 5492 <!---//hide script from old browsers
5278 document.write( "Last updated "+ document.lastModified + "." ); 5493 document.write( "Last updated "+ document.lastModified + "." );
5279 //end hiding contents ---> 5494 //end hiding contents --->
5280 </script> 5495 </script>
5281 <p> Send comments to <a class="sidebar" href="mailto:findbugs@cs.umd.edu">findbu gs@cs.umd.edu</a> 5496 <p> Send comments to <a class="sidebar" href="mailto:findbugs@cs.umd.edu">findbu gs@cs.umd.edu</a>
5282 <p> 5497 <p>
5283 <A href="http://sourceforge.net"><IMG src="http://sourceforge.net/sflogo.php?gro up_id=96405&amp;type=5" width="210" height="62" border="0" alt="SourceForge.net Logo" /></A> 5498 <A href="http://sourceforge.net"><IMG src="http://sourceforge.net/sflogo.php?gro up_id=96405&amp;type=5" width="210" height="62" border="0" alt="SourceForge.net Logo" /></A>
5284 </td></tr></table> 5499 </td></tr></table>
5285 </body></html> 5500 </body></html>
OLDNEW
« no previous file with comments | « doc/FAQ.html ('k') | doc/bugDescriptions.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698