FindBugs Report

Project Information

Project: <<unnamed project>>

FindBugs version: 1.3.1

Code analyzed:



Metrics

37004 lines of code analyzed, in 336 classes, in 4 packages.

Metric Total Density*
High Priority Warnings 18 0.49
Medium Priority Warnings 116 3.13
Total Warnings 134 3.62

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



Contents

Summary

Warning Type Number
Bad practice Warnings 8
Correctness Warnings 4
Malicious code vulnerability Warnings 55
Multithreaded correctness Warnings 1
Performance Warnings 2
Dodgy Warnings 64
Total 134

Warnings

Click on a warning row to see full context information.

Bad practice Warnings

Code&nbsp; Warning
DP edu.rice.cs.javalanglevels.LanguageLevelConverter$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)
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()
NP Possible null pointer dereference of o1 in edu.rice.cs.javalanglevels.LanguageLevelVisitor.arrayEquals(Object[], Object[])
RCN Nullcheck of sd at line 105 of value previously dereferenced in new edu.rice.cs.javalanglevels.ClassBodyFullJavaVisitor(SymbolData, File, String, LinkedList, LinkedList, HashSet, Hashtable, LinkedList, HashMap)
RCN Nullcheck of superC at line 814 of value previously dereferenced in edu.rice.cs.javalanglevels.ExpressionTypeChecker.handleAnonymousClassInstantiation(AnonymousClassInstantiation, SymbolData)

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.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, ArrayList, 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)
NP Load of known null value in edu.rice.cs.javalanglevels.LanguageLevelVisitor.getQualifiedSymbolData(String, SourceInfo, boolean, boolean, boolean)
QF Complicated, subtle or wrong increment in for-loop edu.rice.cs.javalanglevels.ExpressionTypeChecker.reassignLotsaVariableDatas(LinkedList, LinkedList)
QF Complicated, subtle or wrong increment in for-loop edu.rice.cs.javalanglevels.SpecialTypeChecker.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.LanguageLevelVisitor._errorAdded 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.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.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.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.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.errors from instance method new edu.rice.cs.javalanglevels.FullJavaVisitor(File, LinkedList, LinkedList, Hashtable, LinkedList, LinkedList)
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor.visitedFiles from instance method new edu.rice.cs.javalanglevels.FullJavaVisitor(File, LinkedList, LinkedList, Hashtable, LinkedList, 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.errors from instance method new edu.rice.cs.javalanglevels.IntermediateVisitor(File, LinkedList, LinkedList, Hashtable, LinkedList, LinkedList)
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor.visitedFiles from instance method new edu.rice.cs.javalanglevels.IntermediateVisitor(File, LinkedList, LinkedList, Hashtable, LinkedList, 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, String, LinkedList, LinkedList, HashSet, Hashtable, LinkedList, HashMap)
ST Write to static field edu.rice.cs.javalanglevels.LanguageLevelVisitor.fixUps from instance method new edu.rice.cs.javalanglevels.LanguageLevelVisitor(File, String, String, LinkedList, LinkedList, HashSet, Hashtable, LinkedList, HashMap)
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.visitedFiles 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.TypeChecker.errors from instance method edu.rice.cs.javalanglevels.SpecialTypeChecker$BobTest.setUp()
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_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.

NP_NULL_ON_SOME_PATH: Possible null pointer dereference

A reference value dereferenced here might be null at runtime.  This may lead to a NullPointerException when the code is executed.

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_WOULD_HAVE_BEEN_A_NPE: Nullcheck of value previously dereferenced

A value is checked here to see whether it is null, but this value can't be null because it was previously dereferenced and if it were null a null pointer exception would have occurred at the earlier dereference. Essentially, this code and the previous dereference disagree as to whether this value is allowed to be null. Either the check is redundant or the previous dereference is erroneous.

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.