jakarta-bcel-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From David Foster <davidf...@earthlink.net>
Subject Suggestions by FindBugs
Date Sun, 23 Jan 2005 02:41:40 GMT
A number of minor code anomalies in BCEL were detected by FindBugs  
(http://findbugs.sourceforge.net/), a program which looks for bugs in  
Java code via static analysis. I realize that a number of the detected  
"anomalies" may be false positives, since they were computer-generated.

Below I have listed (and categorized) the suggestions FindBugs has made  
which I think may be valid:

=== BEGIN SUGGESTIONS ===

"Dubious" constructor invocations:
	Dm: org.apache.bcel.classfile.JavaClass.<clinit>() invokes dubious  
Boolean constructor; use Boolean.valueOf(...) instead
	Dm: org.apache.bcel.verifier.structurals.LocalVariables.toString()  
invokes dubious new String() constructor; just use ""

Invocations of System.exit(...):
	Dm:  
org.apache.bcel.classfile.Utility.codeToString(org.apache.bcel.util.Byte 
Sequence,ConstantPool,boolean) invokes System.exit(...), which shuts  
down the entire virtual machine
	Dm: org.apache.bcel.util.CodeHTML.codeToHTML(ByteSequence,int) invokes  
System.exit(...), which shuts down the entire virtual machine

A number of subclasses of org.apache.bcel.generic.Type define  
equals(...) but inherit Object.hashCode().
Personally I would suggest adding an abstract equals(Object) and  
hashCode() to org.apache.bcel.generic.Type.
	HE: org.apache.bcel.generic.ArrayType defines equals and uses  
Object.hashCode()
	HE: org.apache.bcel.generic.BasicType defines equals and uses  
Object.hashCode()
	HE: org.apache.bcel.generic.ReturnaddressType defines equals and uses  
Object.hashCode()

Other major classes that define equals(...) but inherit  
Object.hashCode():
	HE: org.apache.bcel.generic.Instruction defines equals and uses  
Object.hashCode()
	HE: org.apache.bcel.generic.LocalVariableGen defines equals and uses  
Object.hashCode()

Verifier classes that define equals(...) but inherit Object.hashCode():
(I am less certain as to whether these are actually bugs)
	HE: org.apache.bcel.verifier.VerificationResult defines equals and  
uses Object.hashCode()
	HE: org.apache.bcel.verifier.structurals.Frame defines equals and uses  
Object.hashCode()
	HE: org.apache.bcel.verifier.structurals.LocalVariables defines equals  
and uses Object.hashCode()
	HE: org.apache.bcel.verifier.structurals.OperandStack defines equals  
and uses Object.hashCode()

Serializable classes with non-transient non-serializable members:
	Se: Serializable Class org.apache.bcel.classfile.InnerClasses defines  
non-transient non-serializable instance field  
org.apache.bcel.classfile.InnerClasses.inner_classes
	Se: Serializable Class org.apache.bcel.classfile.StackMap defines  
non-transient non-serializable instance field  
org.apache.bcel.classfile.StackMap.map
	Se: Serializable Class org.apache.bcel.util.ClassPath$Zip defines  
non-transient non-serializable instance field  
org.apache.bcel.util.ClassPath$Zip.zip
	Se: Serializable Class org.apache.bcel.util.ClassLoaderRepository  
defines non-transient non-serializable instance field  
org.apache.bcel.util.ClassLoaderRepository.loader
	Se: Serializable Class org.apache.bcel.verifier.VerifyDialog defines  
non-transient non-serializable instance field  
org.apache.bcel.verifier.VerifyDialog.ivjEventHandler

Serializable classes without a declared serialVersionUID:
	SnVI: org.apache.bcel.generic.InstructionHandle is Serializable;  
consider declaring a serialVersionUID
	SnVI: org.apache.bcel.generic.InstructionList is Serializable;  
consider declaring a serialVersionUID
	SnVI: org.apache.bcel.util.ClassPath$Dir is Serializable; consider  
declaring a serialVersionUID
	SnVI: org.apache.bcel.util.ClassPath$Zip is Serializable; consider  
declaring a serialVersionUID

Misspelled method names:
	Nm: Class org.apache.bcel.generic.ArrayType defines hashcode(); should  
it be hashCode()?

Unused field:
	UuF: Unused field:  
org.apache.bcel.generic.InstructionFactory$MethodObject.arg_names

Other minor suggestions:
	It: org.apache.bcel.generic.InstructionList$1.next() does not throw  
NoSuchElementException appropriately
	SIC: Should  
org.apache.bcel.verifier.statics.Pass2Verifier$InnerClassDetector be a  
_static_ inner class?

=== END SUGGESTIONS ===

I hope these are useful.

- David


---------------------------------------------------------------------
To unsubscribe, e-mail: bcel-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: bcel-dev-help@jakarta.apache.org


Mime
View raw message