looks for methods that are implemented using synchronized blocks, but are overly
synchronized because the beginning of the block only accesses local variables,
and not member variables, or this.
looks for methods that rely on the format of the string fetched from another object's toString
method, when that method appears not to be owned by the author of the calling method.
looks for classes that implement Serializable and implements readObject and writeObject
by just calling the readDefaultObject or writeDefaultObject of the stream parameter.
looks for method calls to collection classes where the method is not defined by the Collections
interface, and an equivalent method exists in the interface.
looks for tag libraries that are not recycleable because backing members of taglib attributes are
set in areas besides the setter method for the attribute.
looks for manual casts of objects that are more specific then needed as the value is assigned
to a class or interface higher up in the inheritance chain.
looks for classes that maintain two or more lists or arrays associated one-for-one through the same index
to hold two or more pieces of related information.
looks for classes that don't handle serialization of parent class member fields
when the class in question is serializable but is derived from non serializable classes.
looks for classes that maintain collections or StringBuffer/StringBuilders in static member
variables, and that do not appear to provide a way to clear or remove items from these members.
overrides the visitor to annotate new array creation with a user value
that denotes it as being uninitialized, and then if the array is populated
to remove that user value.
implements the visitor to look for method calls that pass a constant string as a parameter when
the string is only one character long, and there is an alternate method passing a character.
looks for classes that implement interfaces by relying on methods being
implemented in super classes, even though the superclass knows nothing about
the interface being implemented by the child.
looks for methods that access objects in http sessions, that are complex objects,
modifies those objects, but does not call setAttribute to signify a change so that
cluster replication can happen.
looks for class that implement Comparator or Comparable, and whose compare or compareTo
methods return constant values only, but that don't represent the three possible choice
(a negative number, 0, and a positive number).
looks for code that checks to see if a field or local variable is not null,
before entering a code block either an if, or while statement, and then doesn't
reference that field or local in the block of code that is guarded by the null
check.
looks for methods that pass single character string constants as parameters to
methods that alternatively have an overridden method that accepts a character instead.
implements the visitor to look for classes that reference com.sun.xxx, or org.apache.xerces.xxx classes
by looking for class constants in the constant pool
implements the visitor to set up the stack and methodToCalledmethods map
reports calls to public non final methods from methods called from constructors.
implements the visitor to look for classes that are serializable, and are derived
from non serializable classes and don't either implement methods in Externalizable
or Serializable to save parent class fields.