OLD | NEW |
| 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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 & SWT.SELECTED) > 0)</pre>. | 521 <pre>((event.detail & SWT.SELECTED) > 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 '> 0'. | 526 to use '!= 0' instead of '> 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 Loading... |
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 Loading... |
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). Although | 863 (which defines equality by comparing object references). 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. (Overriding <code>hashCode()</code> | 866 the <code>hashCode()</code> method. (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). Therefore, the class is very likely to violate the | 884 by the VM). Therefore, the class is very likely to violate the |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 Loading... |
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 Loading... |
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<String> c) { | 1459 String[] getAsArray(Collection<String> 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 Loading... |
1536 int result = 0; | 1568 int result = 0; |
1537 for(int i = 0; i < 4; i++) | 1569 for(int i = 0; i < 4; i++) |
1538 result = ((result << 8) | (b[i] & 0xff)); | 1570 result = ((result << 8) | (b[i] & 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 & SWT.SELECTED) > 0)</pre>. | 1579 <pre>((event.detail & SWT.SELECTED) > 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 '> 0'. | 1584 to use '!= 0' instead of '> 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 Loading... |
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 Loading... |
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 Loading... |
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. | 1980 defined in the base <code>java.lang.Object</code> class. |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
3378 <p> This method may contain an instance of double-checked locking. | 3474 <p> This method may contain an instance of double-checked locking. |
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. For more information, see the web page | 3476 model. 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 Loading... |
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. This bug report indicates that the bug pattern detec
tor | 3598 to synchronization. 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. Also, even when the detector is accurate in | 3618 a lock is held. 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 Loading... |
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 Loading... |
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. If the object is used for multiple conditions, | 4029 which is not in a loop. 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. If the monitor is used for multiple conditions, | 4038 which is not in a loop. 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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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. Many kinds of unexpected | 4866 classes referenced by the bug instance. 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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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.  | 5438 <p> This field is never read. |
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. | 5447 <p> This field is never used. |
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 Loading... |
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&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&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> |
OLD | NEW |