FindBugs Report

Project Information

Project: <<unnamed project>>

FindBugs version: 1.3.1

Code analyzed:



Metrics

36506 lines of code analyzed, in 327 classes, in 4 packages.

Metric Total Density*
High Priority Warnings 20 0.55
Medium Priority Warnings 117 3.20
Total Warnings 137 3.75

(* Defects per Thousand lines of non-commenting source statements)



Contents

Summary

Warning Type Number
Bad practice Warnings 9
Correctness Warnings 1
Malicious code vulnerability Warnings 56
Multithreaded correctness Warnings 1
Performance Warnings 2
Dodgy Warnings 68
Total 137

Warnings

Click on a warning row to see full context information.

Bad practice Warnings

Code&nbsp; Warning
DP edu.rice.cs.javalanglevels.LanguageLevelVisitor$1.value() creates a edu.rice.cs.plt.reflect.PathClassLoader classloader, which should be performed within a doPrivileged block
ES Comparison of String objects using == or != in edu.rice.cs.javalanglevels.tree.ModifiersAndVisibility.equals(Object)
ES Comparison of String objects using == or != in edu.rice.cs.javalanglevels.tree.PrimitiveType.equals(Object)
ES Comparison of String objects using == or != in edu.rice.cs.javalanglevels.tree.StringLiteral.equals(Object)
ES Comparison of String objects using == or != in edu.rice.cs.javalanglevels.tree.TypeVariable.equals(Object)
ES Comparison of String objects using == or != in edu.rice.cs.javalanglevels.tree.VoidReturn.equals(Object)
ES Comparison of String objects using == or != in edu.rice.cs.javalanglevels.tree.Word.equals(Object)
NP edu.rice.cs.javalanglevels.InstanceData.equals(Object) does not check for null argument
RV edu.rice.cs.javalanglevels.util.Utilities.copyFile(File, File) ignores exceptional return value of java.io.File.createNewFile()

Correctness Warnings

Code&nbsp; Warning
DMI Invocation of toString on testFiles in edu.rice.cs.javalanglevels.AdvancedLevelTest.testNoNullPointer()

Malicious code vulnerability Warnings

Code&nbsp; Warning
EI edu.rice.cs.javalanglevels.MethodData.getParams() may expose internal representation by returning MethodData._params
EI edu.rice.cs.javalanglevels.MethodData.getThrown() may expose internal representation by returning MethodData._thrown
EI edu.rice.cs.javalanglevels.MethodData.getTypeParameters() may expose internal representation by returning MethodData._typeParameters
EI edu.rice.cs.javalanglevels.SymbolData.getTypeParameters() may expose internal representation by returning SymbolData._typeParameters
EI edu.rice.cs.javalanglevels.tree.ArrayInitializer.getItems() may expose internal representation by returning ArrayInitializer._items
EI edu.rice.cs.javalanglevels.tree.Body.getStatements() may expose internal representation by returning Body._statements
EI edu.rice.cs.javalanglevels.tree.ClassOrInterfaceType.getTypeArguments() may expose internal representation by returning ClassOrInterfaceType._typeArguments
EI edu.rice.cs.javalanglevels.tree.CompoundWord.getWords() may expose internal representation by returning CompoundWord._words
EI edu.rice.cs.javalanglevels.tree.ConstructorDef.getParameters() may expose internal representation by returning ConstructorDef._parameters
EI edu.rice.cs.javalanglevels.tree.ConstructorDef.getThrows() may expose internal representation by returning ConstructorDef._throws
EI edu.rice.cs.javalanglevels.tree.ExpressionList.getExpressions() may expose internal representation by returning ExpressionList._expressions
EI edu.rice.cs.javalanglevels.tree.MethodDef.getParams() may expose internal representation by returning MethodDef._params
EI edu.rice.cs.javalanglevels.tree.MethodDef.getThrows() may expose internal representation by returning MethodDef._throws
EI edu.rice.cs.javalanglevels.tree.MethodDef.getTypeParams() may expose internal representation by returning MethodDef._typeParams
EI edu.rice.cs.javalanglevels.tree.ModifiersAndVisibility.getModifiers() may expose internal representation by returning ModifiersAndVisibility._modifiers
EI edu.rice.cs.javalanglevels.tree.SourceFile.getImportStatements() may expose internal representation by returning SourceFile._importStatements
EI edu.rice.cs.javalanglevels.tree.SourceFile.getPackageStatements() may expose internal representation by returning SourceFile._packageStatements
EI edu.rice.cs.javalanglevels.tree.SourceFile.getTypes() may expose internal representation by returning SourceFile._types
EI edu.rice.cs.javalanglevels.tree.SwitchStatement.getCases() may expose internal representation by returning SwitchStatement._cases
EI edu.rice.cs.javalanglevels.tree.TryCatchStatement.getCatchBlocks() may expose internal representation by returning TryCatchStatement._catchBlocks
EI edu.rice.cs.javalanglevels.tree.TypeDefBase.getInterfaces() may expose internal representation by returning TypeDefBase._interfaces
EI edu.rice.cs.javalanglevels.tree.TypeDefBase.getTypeParameters() may expose internal representation by returning TypeDefBase._typeParameters
EI edu.rice.cs.javalanglevels.tree.VariableDeclaration.getDeclarators() may expose internal representation by returning VariableDeclaration._declarators
EI2 new edu.rice.cs.javalanglevels.LanguageLevelVisitor(File, String, LinkedList, LinkedList, LinkedList, Hashtable, Hashtable) may expose internal representation by storing an externally mutable object into LanguageLevelVisitor._classesToBeParsed
EI2 new edu.rice.cs.javalanglevels.MethodData(String, ModifiersAndVisibility, TypeParameter[], SymbolData, VariableData[], String[], SymbolData, JExpression) may expose internal representation by storing an externally mutable object into MethodData._params
EI2 new edu.rice.cs.javalanglevels.MethodData(String, ModifiersAndVisibility, TypeParameter[], SymbolData, VariableData[], String[], SymbolData, JExpression) may expose internal representation by storing an externally mutable object into MethodData._thrown
EI2 new edu.rice.cs.javalanglevels.MethodData(String, ModifiersAndVisibility, TypeParameter[], SymbolData, VariableData[], String[], SymbolData, JExpression) may expose internal representation by storing an externally mutable object into MethodData._typeParameters
EI2 edu.rice.cs.javalanglevels.MethodData.setParams(VariableData[]) may expose internal representation by storing an externally mutable object into MethodData._params
EI2 edu.rice.cs.javalanglevels.MethodData.setThrown(String[]) may expose internal representation by storing an externally mutable object into MethodData._thrown
EI2 new edu.rice.cs.javalanglevels.parser.ParseException(Token, int[][], String[]) may expose internal representation by storing an externally mutable object into ParseException.expectedTokenSequences
EI2 new edu.rice.cs.javalanglevels.parser.ParseException(Token, int[][], String[]) may expose internal representation by storing an externally mutable object into ParseException.tokenImage
EI2 new edu.rice.cs.javalanglevels.SymbolData(String, ModifiersAndVisibility, TypeParameter[], SymbolData, LinkedList, Data) may expose internal representation by storing an externally mutable object into SymbolData._typeParameters
EI2 edu.rice.cs.javalanglevels.SymbolData.setTypeParameters(TypeParameter[]) may expose internal representation by storing an externally mutable object into SymbolData._typeParameters
EI2 new edu.rice.cs.javalanglevels.tree.ArrayInitializer(SourceInfo, VariableInitializerI[]) may expose internal representation by storing an externally mutable object into ArrayInitializer._items
EI2 new edu.rice.cs.javalanglevels.tree.Body(SourceInfo, BodyItemI[]) may expose internal representation by storing an externally mutable object into Body._statements
EI2 new edu.rice.cs.javalanglevels.tree.ClassOrInterfaceType(SourceInfo, String, Type[]) may expose internal representation by storing an externally mutable object into ClassOrInterfaceType._typeArguments
EI2 new edu.rice.cs.javalanglevels.tree.CompoundWord(SourceInfo, Word[]) may expose internal representation by storing an externally mutable object into CompoundWord._words
EI2 new edu.rice.cs.javalanglevels.tree.ConstructorDef(SourceInfo, Word, ModifiersAndVisibility, FormalParameter[], ReferenceType[], BracedBody) may expose internal representation by storing an externally mutable object into ConstructorDef._parameters
EI2 new edu.rice.cs.javalanglevels.tree.ConstructorDef(SourceInfo, Word, ModifiersAndVisibility, FormalParameter[], ReferenceType[], BracedBody) may expose internal representation by storing an externally mutable object into ConstructorDef._throws
EI2 new edu.rice.cs.javalanglevels.tree.ExpressionList(SourceInfo, Expression[]) may expose internal representation by storing an externally mutable object into ExpressionList._expressions
EI2 new edu.rice.cs.javalanglevels.tree.MethodDef(SourceInfo, ModifiersAndVisibility, TypeParameter[], ReturnTypeI, Word, FormalParameter[], ReferenceType[]) may expose internal representation by storing an externally mutable object into MethodDef._params
EI2 new edu.rice.cs.javalanglevels.tree.MethodDef(SourceInfo, ModifiersAndVisibility, TypeParameter[], ReturnTypeI, Word, FormalParameter[], ReferenceType[]) may expose internal representation by storing an externally mutable object into MethodDef._throws
EI2 new edu.rice.cs.javalanglevels.tree.MethodDef(SourceInfo, ModifiersAndVisibility, TypeParameter[], ReturnTypeI, Word, FormalParameter[], ReferenceType[]) may expose internal representation by storing an externally mutable object into MethodDef._typeParams
EI2 new edu.rice.cs.javalanglevels.tree.ModifiersAndVisibility(SourceInfo, String[]) may expose internal representation by storing an externally mutable object into ModifiersAndVisibility._modifiers
EI2 new edu.rice.cs.javalanglevels.tree.SourceFile(SourceInfo, PackageStatement[], ImportStatement[], TypeDefBase[]) may expose internal representation by storing an externally mutable object into SourceFile._importStatements
EI2 new edu.rice.cs.javalanglevels.tree.SourceFile(SourceInfo, PackageStatement[], ImportStatement[], TypeDefBase[]) may expose internal representation by storing an externally mutable object into SourceFile._packageStatements
EI2 new edu.rice.cs.javalanglevels.tree.SourceFile(SourceInfo, PackageStatement[], ImportStatement[], TypeDefBase[]) may expose internal representation by storing an externally mutable object into SourceFile._types
EI2 new edu.rice.cs.javalanglevels.tree.SwitchStatement(SourceInfo, Expression, SwitchCase[]) may expose internal representation by storing an externally mutable object into SwitchStatement._cases
EI2 new edu.rice.cs.javalanglevels.tree.TryCatchStatement(SourceInfo, Block, CatchBlock[]) may expose internal representation by storing an externally mutable object into TryCatchStatement._catchBlocks
EI2 new edu.rice.cs.javalanglevels.tree.TypeDefBase(SourceInfo, ModifiersAndVisibility, Word, TypeParameter[], ReferenceType[], BracedBody) may expose internal representation by storing an externally mutable object into TypeDefBase._interfaces
EI2 new edu.rice.cs.javalanglevels.tree.TypeDefBase(SourceInfo, ModifiersAndVisibility, Word, TypeParameter[], ReferenceType[], BracedBody) may expose internal representation by storing an externally mutable object into TypeDefBase._typeParameters
EI2 new edu.rice.cs.javalanglevels.tree.VariableDeclaration(SourceInfo, ModifiersAndVisibility, VariableDeclarator[]) may expose internal representation by storing an externally mutable object into VariableDeclaration._declarators
MS edu.rice.cs.javalanglevels.LanguageLevelConverter.OPT should be package protected
MS edu.rice.cs.javalanglevels.LanguageLevelVisitor.errors should be package protected
MS edu.rice.cs.javalanglevels.parser.JExprParserTokenManager.jjnewLexState should be package protected
MS edu.rice.cs.javalanglevels.parser.JExprParserTokenManager.jjstrLiteralImages should be package protected

Multithreaded correctness Warnings

Code&nbsp; Warning
STCAL Found static field of type java.text.DateFormat in edu.rice.cs.javalanglevels.util.Log.DATE_FORMAT

Performance Warnings

Code&nbsp; Warning
SBSC Method edu.rice.cs.javalanglevels.parser.ParseException.getMessage() concatenates strings using + in a loop
SIC Should edu.rice.cs.javalanglevels.BodyTypeChecker$NoAssignmentAllowedInExpression be a _static_ inner class?

Dodgy Warnings

Code&nbsp; Warning
NP Load of known null value in edu.rice.cs.javalanglevels.BodyTypeChecker.getCommonSuperType(SymbolData, SymbolData)
QF Complicated, subtle or wrong increment in for-loop edu.rice.cs.javalanglevels.Bob.reassignLotsaVariableDatas(LinkedList, LinkedList)
QF Complicated, subtle or wrong increment in for-loop edu.rice.cs.javalanglevels.ExpressionTypeChecker.reassignLotsaVariableDatas(LinkedList, LinkedList)
RCN Redundant nullcheck of in_value, which is known to be non-null in new edu.rice.cs.javalanglevels.tree.StringLiteral(SourceInfo, String)
RCN Redundant nullcheck of in_name, which is known to be non-null in new edu.rice.cs.javalanglevels.tree.Type(SourceInfo, String)
RCN Redundant nullcheck of in_name, which is known to be non-null in new edu.rice.cs.javalanglevels.tree.VoidReturn(SourceInfo, String)
RCN Redundant nullcheck of in_text, which is known to be non-null in new edu.rice.cs.javalanglevels.tree.Word(SourceInfo, String)
ST Write to static field edu.rice.cs.javalanglevels.Augmentor._endOfClassVarDefs from instance method new edu.rice.cs.javalanglevels.Augmentor(boolean, BufferedReader, BufferedWriter, LanguageLevelVisitor)
ST Write to static field edu.rice.cs.javalanglevels.Augmentor._fileIn from instance method new edu.rice.cs.javalanglevels.Augmentor(boolean, BufferedReader, BufferedWriter, LanguageLevelVisitor)
ST Write to static field edu.rice.cs.javalanglevels.Augmentor._fileInColumn from instance method new edu.rice.cs.javalanglevels.Augmentor(boolean, BufferedReader, BufferedWriter, LanguageLevelVisitor)
ST Write to static field edu.rice.cs.javalanglevels.Augmentor._fileInLine from instance method new edu.rice.cs.javalanglevels.Augmentor(boolean, BufferedReader, BufferedWriter, LanguageLevelVisitor)
ST Write to static field edu.rice.cs.javalanglevels.Augmentor._fileOut from instance method new edu.rice.cs.javalanglevels.Augmentor(boolean, BufferedReader, BufferedWriter, LanguageLevelVisitor)
ST Write to static field edu.rice.cs.javalanglevels.Augmentor._fileOutCorrespondingLine from instance method new edu.rice.cs.javalanglevels.Augmentor(boolean, BufferedReader, BufferedWriter, LanguageLevelVisitor)
ST Write to static field edu.rice.cs.javalanglevels.Augmentor._fileOutLine from instance method new edu.rice.cs.javalanglevels.Augmentor(boolean, BufferedReader, BufferedWriter, LanguageLevelVisitor)
ST Write to static field edu.rice.cs.javalanglevels.Augmentor._lineNumberMap from instance method new edu.rice.cs.javalanglevels.Augmentor(boolean, BufferedReader, BufferedWriter, LanguageLevelVisitor)
ST Write to static field edu.rice.cs.javalanglevels.Augmentor._llv from instance method new edu.rice.cs.javalanglevels.Augmentor(boolean, BufferedReader, BufferedWriter, LanguageLevelVisitor)
ST Write to static field edu.rice.cs.javalanglevels.Augmentor._safeSupportCode from instance method new edu.rice.cs.javalanglevels.Augmentor(boolean, BufferedReader, BufferedWriter, LanguageLevelVisitor)
ST Write to static field edu.rice.cs.javalanglevels.TypeChecker.errors from instance method edu.rice.cs.javalanglevels.Bob$BobTest.setUp()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor._errorAdded from instance method edu.rice.cs.javalanglevels.BodyTypeChecker$BodyTypeCheckerTest.testForBracedBody()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor._hierarchy from instance method edu.rice.cs.javalanglevels.BodyTypeChecker$BodyTypeCheckerTest.testForBracedBody()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor.continuations from instance method edu.rice.cs.javalanglevels.BodyTypeChecker$BodyTypeCheckerTest.testForBracedBody()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor.errors from instance method edu.rice.cs.javalanglevels.BodyTypeChecker$BodyTypeCheckerTest.testForBracedBody()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor.visitedFiles from instance method edu.rice.cs.javalanglevels.BodyTypeChecker$BodyTypeCheckerTest.testForBracedBody()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor._errorAdded from instance method edu.rice.cs.javalanglevels.BodyTypeChecker$BodyTypeCheckerTest.testForNormalTryCatchStatement()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor._hierarchy from instance method edu.rice.cs.javalanglevels.BodyTypeChecker$BodyTypeCheckerTest.testForNormalTryCatchStatement()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor.continuations from instance method edu.rice.cs.javalanglevels.BodyTypeChecker$BodyTypeCheckerTest.testForNormalTryCatchStatement()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor.errors from instance method edu.rice.cs.javalanglevels.BodyTypeChecker$BodyTypeCheckerTest.testForNormalTryCatchStatement()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor.visitedFiles from instance method edu.rice.cs.javalanglevels.BodyTypeChecker$BodyTypeCheckerTest.testForNormalTryCatchStatement()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor._errorAdded from instance method edu.rice.cs.javalanglevels.BodyTypeChecker$BodyTypeCheckerTest.testForThrowStatement()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor._hierarchy from instance method edu.rice.cs.javalanglevels.BodyTypeChecker$BodyTypeCheckerTest.testForThrowStatement()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor.continuations from instance method edu.rice.cs.javalanglevels.BodyTypeChecker$BodyTypeCheckerTest.testForThrowStatement()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor.errors from instance method edu.rice.cs.javalanglevels.BodyTypeChecker$BodyTypeCheckerTest.testForThrowStatement()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor.visitedFiles from instance method edu.rice.cs.javalanglevels.BodyTypeChecker$BodyTypeCheckerTest.testForThrowStatement()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor._errorAdded from instance method edu.rice.cs.javalanglevels.BodyTypeChecker$BodyTypeCheckerTest.testForTryCatchFinallyStatement()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor._hierarchy from instance method edu.rice.cs.javalanglevels.BodyTypeChecker$BodyTypeCheckerTest.testForTryCatchFinallyStatement()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor.continuations from instance method edu.rice.cs.javalanglevels.BodyTypeChecker$BodyTypeCheckerTest.testForTryCatchFinallyStatement()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor.errors from instance method edu.rice.cs.javalanglevels.BodyTypeChecker$BodyTypeCheckerTest.testForTryCatchFinallyStatement()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor.visitedFiles from instance method edu.rice.cs.javalanglevels.BodyTypeChecker$BodyTypeCheckerTest.testForTryCatchFinallyStatement()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor.errors from instance method edu.rice.cs.javalanglevels.ClassBodyFullJavaVisitor$ClassBodyFullJavaVisitorTest.setUp()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor.errors from instance method edu.rice.cs.javalanglevels.ClassBodyIntermediateVisitor$ClassBodyIntermediateVisitorTest.setUp()
ST Write to static field edu.rice.cs.javalanglevels.TypeChecker.errors from instance method edu.rice.cs.javalanglevels.ClassBodyTypeChecker$ClassBodyTypeCheckerTest.setUp()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor._errorAdded from instance method edu.rice.cs.javalanglevels.ConstructorBodyTypeChecker$ConstructorBodyTypeCheckerTest.testForBracedBody()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor._hierarchy from instance method edu.rice.cs.javalanglevels.ConstructorBodyTypeChecker$ConstructorBodyTypeCheckerTest.testForBracedBody()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor.continuations from instance method edu.rice.cs.javalanglevels.ConstructorBodyTypeChecker$ConstructorBodyTypeCheckerTest.testForBracedBody()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor.errors from instance method edu.rice.cs.javalanglevels.ConstructorBodyTypeChecker$ConstructorBodyTypeCheckerTest.testForBracedBody()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor.visitedFiles from instance method edu.rice.cs.javalanglevels.ConstructorBodyTypeChecker$ConstructorBodyTypeCheckerTest.testForBracedBody()
ST Write to static field edu.rice.cs.javalanglevels.TypeChecker.errors from instance method edu.rice.cs.javalanglevels.ExpressionTypeChecker$ExpressionTypeCheckerTest.setUp()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor._hierarchy from instance method new edu.rice.cs.javalanglevels.FullJavaVisitor(File, LinkedList, Hashtable, LinkedList)
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor.errors from instance method new edu.rice.cs.javalanglevels.FullJavaVisitor(File, LinkedList, Hashtable, LinkedList)
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor.visitedFiles from instance method new edu.rice.cs.javalanglevels.FullJavaVisitor(File, LinkedList, Hashtable, LinkedList)
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor.errors from instance method edu.rice.cs.javalanglevels.FullJavaVisitor$FullJavaVisitorTest.setUp()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor.errors from instance method edu.rice.cs.javalanglevels.InterfaceBodyFullJavaVisitor$InterfaceBodyFullJavaVisitorTest.setUp()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor.errors from instance method edu.rice.cs.javalanglevels.InterfaceBodyIntermediateVisitor$InterfaceBodyIntermediateVisitorTest.setUp()
ST Write to static field edu.rice.cs.javalanglevels.TypeChecker.errors from instance method edu.rice.cs.javalanglevels.InterfaceBodyTypeChecker$InterfaceBodyTypeCheckerTest.setUp()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor._hierarchy from instance method new edu.rice.cs.javalanglevels.IntermediateVisitor(File, LinkedList, Hashtable, LinkedList)
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor.errors from instance method new edu.rice.cs.javalanglevels.IntermediateVisitor(File, LinkedList, Hashtable, LinkedList)
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor.visitedFiles from instance method new edu.rice.cs.javalanglevels.IntermediateVisitor(File, LinkedList, Hashtable, LinkedList)
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor.errors from instance method edu.rice.cs.javalanglevels.IntermediateVisitor$IntermediateVisitorTest.setUp()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelConverter.OPT from instance method edu.rice.cs.javalanglevels.LanguageLevelConverter.convert(File[], Options, Map)
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor.continuations from instance method new edu.rice.cs.javalanglevels.LanguageLevelVisitor(File, String, LinkedList, LinkedList, LinkedList, Hashtable)
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor._errorAdded from instance method edu.rice.cs.javalanglevels.LanguageLevelVisitor$LanguageLevelVisitorTest.setUp()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor.errors from instance method edu.rice.cs.javalanglevels.LanguageLevelVisitor$LanguageLevelVisitorTest.setUp()
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor._errorAdded from instance method edu.rice.cs.javalanglevels.LanguageLevelVisitor$LanguageLevelVisitorTest.test_checkError()
ST Write to static field edu.rice.cs.javalanglevels.parser.JExprParser._currentFile from instance method new edu.rice.cs.javalanglevels.parser.JExprParser(File)
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor.errors from instance method edu.rice.cs.javalanglevels.SymbolData$SymbolDataTest.setUp()
ST Write to static field edu.rice.cs.javalanglevels.TypeChecker.errors from instance method edu.rice.cs.javalanglevels.SymbolData$SymbolDataTest.testCheckDifferentReturnTypes()
ST Write to static field edu.rice.cs.javalanglevels.TypeChecker.errors from instance method new edu.rice.cs.javalanglevels.TypeChecker(File, String, LinkedList, Symboltable, LinkedList, LinkedList)
ST Write to static field edu.rice.cs.javalanglevels.TypeChecker.errors from instance method edu.rice.cs.javalanglevels.TypeChecker$TypeCheckerTest.setUp()

Details

DMI_INVOKING_TOSTRING_ON_ARRAY: Invocation of toString on an array

The code invokes toString on an array, which will generate a fairly useless result such as [C@16f0472. Consider using Arrays.toString to convert the array into a readable String that gives the contents of the array. See Programming Puzzlers, chapter 3, puzzle 12.

DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED: Classloaders should only be created inside doPrivileged block

This code creates a classloader, which requires a security manager. If this code will be granted security permissions, but might be invoked by code that does not have security permissions, then the classloader creation needs to occur inside a doPrivileged block.

EI_EXPOSE_REP: May expose internal representation by returning reference to mutable object

Returning a reference to a mutable object value stored in one of the object's fields exposes the internal representation of the object.  If instances are accessed by untrusted code, and unchecked changes to the mutable object would compromise security or other important properties, you will need to do something different. Returning a new copy of the object is better approach in many situations.

EI_EXPOSE_REP2: May expose internal representation by incorporating reference to mutable object

This code stores a reference to an externally mutable object into the internal representation of the object.  If instances are accessed by untrusted code, and unchecked changes to the mutable object would compromise security or other important properties, you will need to do something different. Storing a copy of the object is better approach in many situations.

ES_COMPARING_STRINGS_WITH_EQ: Comparison of String objects using == or !=

This code compares java.lang.String objects for reference equality using the == or != operators. Unless both strings are either constants in a source file, or have been interned using the String.intern() method, the same string value may be represented by two different String objects. Consider using the equals(Object) method instead.

MS_PKGPROTECT: Field should be package protected

A mutable static field could be changed by malicious code or by accident. The field could be made package protected to avoid this vulnerability.

NP_EQUALS_SHOULD_HANDLE_NULL_ARGUMENT: equals() method does not check for null argument

This implementation of equals(Object) violates the contract defined by java.lang.Object.equals() because it does not check for null being passed as the argument. All equals() methods should return false if passed a null value.

NP_LOAD_OF_KNOWN_NULL_VALUE: Load of known null value

The variable referenced at this point is known to be null due to an earlier check against null. Although this is valid, it might be a mistake (perhaps you intended to refer to a different variable, or perhaps the earlier check to see if the variable is null should have been a check to see if it was nonnull.

QF_QUESTIONABLE_FOR_LOOP: Complicated, subtle or wrong increment in for-loop

Are you sure this for loop is incrementing the correct variable? It appears that another variable is being initialized and checked by the for loop.

RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE: Redundant nullcheck of value known to be non-null

This method contains a redundant check of a known non-null value against the constant null.

RV_RETURN_VALUE_IGNORED_BAD_PRACTICE: Method ignores exceptional return value

This method returns a value that is not checked. The return value should be checked since it can indication an unusual or unexpected function execution. For example, the File.delete() method returns false if the file could not be successfully deleted (rather than throwing an Exception). If you don't check the result, you won't notice if the method invocation signals unexpected behavior by returning an atypical return value.

SBSC_USE_STRINGBUFFER_CONCATENATION: Method concatenates strings using + in a loop

The method seems to be building a String using concatenation in a loop. In each iteration, the String is converted to a StringBuffer/StringBuilder, appended to, and converted back to a String. This can lead to a cost quadratic in the number of iterations, as the growing string is recopied in each iteration.

Better performance can be obtained by using a StringBuffer (or StringBuilder in Java 1.5) explicitly.

For example:

  // This is bad
  String s = "";
  for (int i = 0; i < field.length; ++i) {
    s = s + field[i];
  }

  // This is better
  StringBuffer buf = new StringBuffer();
  for (int i = 0; i < field.length; ++i) {
    buf.append(field[i]);
  }
  String s = buf.toString();

SIC_INNER_SHOULD_BE_STATIC: Should be a static inner class

This class is an inner class, but does not use its embedded reference to the object which created it.  This reference makes the instances of the class larger, and may keep the reference to the creator object alive longer than necessary.  If possible, the class should be made static.

ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD: Write to static field from instance method

This instance method writes to a static field. This is tricky to get correct if multiple instances are being manipulated, and generally bad practice.

STCAL_STATIC_SIMPLE_DATE_FORMAT_INSTANCE: Static DateFormat

As the JavaDoc states, DateFormats are inherently unsafe for multithreaded use. Sharing a single instance across thread boundaries without proper synchronization will result in erratic behavior of the application.

You may also experience serialization problems.

Using an instance field is recommended.

For more information on this see Sun Bug #6231579 and Sun Bug #6178997.