Package edu.umd.cs.findbugs.detect
Class MutableStaticFields
- java.lang.Object
-
- All Implemented Interfaces:
Detector,Priorities,org.apache.bcel.classfile.Visitor
public class MutableStaticFields extends BytecodeScanningDetector
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classMutableStaticFields.AllowedParameter
-
Field Summary
Fields Modifier and Type Field Description private BugReporterbugReporterprivate static java.util.Set<java.lang.String>COLLECTION_SUPERCLASSES(package private) booleanemptyArrayOnTOS(package private) java.util.Map<XField,SourceLineAnnotation>firstFieldUse(package private) booleaninStaticInitializerprivate booleanisEclipseNLSEclipse uses reflection to initialize NLS message bundles.private static java.util.Set<java.lang.String>MUTABLE_COLLECTION_CLASSESprivate static java.util.Map<java.lang.String,java.util.Map<java.lang.String,MutableStaticFields.AllowedParameter>>MUTABLE_COLLECTION_METHODS(package private) java.util.Set<XField>mutableCollection(package private) booleanmutableCollectionJustCreated(package private) java.util.Set<XField>needsRefactoringToBeFinal(package private) java.util.Set<XField>notFinal(package private) java.util.Set<XField>outsidePackage(package private) java.lang.StringpackageName(package private) booleanpublicClass(package private) java.util.Set<XField>readAnywhere(package private) java.util.LinkedList<XField>seen(package private) java.util.Set<XField>unsafeValue(package private) java.util.Set<XField>writtenInMethod(package private) java.util.Set<XField>writtenTwiceInMethod(package private) booleanzeroOnTOS-
Fields inherited from class edu.umd.cs.findbugs.visitclass.DismantleBytecode
codeBytes, lineNumberTable, M_BR, M_CP, M_INT, M_PAD, M_R, M_UINT
-
Fields inherited from interface edu.umd.cs.findbugs.Priorities
EXP_PRIORITY, HIGH_PRIORITY, IGNORE_PRIORITY, LOW_PRIORITY, NORMAL_PRIORITY
-
-
Constructor Summary
Constructors Constructor Description MutableStaticFields(BugReporter bugReporter)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) static java.lang.StringextractPackage(java.lang.String c)private booleaninteresting(XField f)private booleanisCollection(java.lang.String signature)voidreport()This method is called after all classes to be visited.voidsawOpcode(int seen)voidvisit(org.apache.bcel.classfile.Code obj)voidvisit(org.apache.bcel.classfile.Field obj)voidvisit(org.apache.bcel.classfile.JavaClass obj)voidvisit(org.apache.bcel.classfile.Method obj)-
Methods inherited from class edu.umd.cs.findbugs.BytecodeScanningDetector
getClassContext, shouldVisitCode, visitClassContext
-
Methods inherited from class edu.umd.cs.findbugs.visitclass.DismantleBytecode
afterOpcode, areOppositeBranches, atCatchBlock, beforeOpcode, getBranchFallThrough, getBranchOffset, getBranchTarget, getClassConstantOperand, getClassDescriptorOperand, getCodeByte, getConstantRefOperand, getDefaultSwitchOffset, getDottedClassConstantOperand, getFieldDescriptorOperand, getIntConstant, getLongConstant, getMaxPC, getMethodDescriptorOperand, getNameConstantOperand, getNextCodeByte, getNextOpcode, getNextPC, getOpcode, getPC, getPrevOpcode, getRefConstantOperand, getRefFieldIsStatic, getRegisterOperand, getSigConstantOperand, getStringConstantOperand, getSwitchLabels, getSwitchOffsets, getXClassOperand, getXFieldOperand, getXMethodOperand, isBranch, isMethodCall, isRegisterLoad, isRegisterStore, isRegisterStore, isReturn, isShift, isSwitch, isWideOpcode, printOpCode, sawBranchTo, sawClass, sawDouble, sawField, sawFloat, sawIMethod, sawInt, sawLong, sawMethod, sawRegister, sawString
-
Methods inherited from class edu.umd.cs.findbugs.visitclass.AnnotationVisitor
getAnnotationParameterAsEnum, getAnnotationParameterAsString, getAnnotationParameterAsStringArray, visitAnnotation, visitAnnotation, visitParameterAnnotation, visitParameterAnnotation, visitSyntheticParameterAnnotation
-
Methods inherited from class edu.umd.cs.findbugs.visitclass.PreorderVisitor
amVisitingMainMethod, asUnsignedByte, doVisitMethod, getClassDescriptor, getClassName, getCode, getConstantPool, getDottedClassName, getDottedFieldSig, getDottedMethodSig, getDottedSuperclassName, getField, getFieldDescriptor, getFieldIsStatic, getFieldName, getFieldSig, getFullyQualifiedFieldName, getFullyQualifiedMethodName, getMethod, getMethodDescriptor, getMethodName, getMethodSig, getMethodVisitOrder, getNumberArguments, getNumberMethodArguments, getPackageName, getSizeOfSurroundingTryBlock, getSizeOfSurroundingTryBlock, getSourceFile, getStringFromIndex, getSuperclassName, getSurroundingCaughtExceptions, getSurroundingCaughtExceptions, getSurroundingCaughtExceptionTypes, getSurroundingTryBlock, getSurroundingTryBlock, getThisClass, getXClass, getXField, getXMethod, hasInterestingClass, hasInterestingMethod, isVisitMethodsInCallOrder, setupVisitorForClass, setVisitMethodsInCallOrder, shouldVisit, toString, visitAfter, visitAfter, visitAnnotationDefault, visitAnnotationEntry, visitBootstrapMethods, visitCode, visitConstantInvokeDynamic, visitConstantMethodHandle, visitConstantMethodType, visitConstantModule, visitConstantPackage, visitConstantPool, visitEnclosingMethod, visitingField, visitingMethod, visitInnerClasses, visitJavaClass, visitLineNumberTable, visitLocalVariableTable, visitMethodParameters, visitParameterAnnotationEntry, visitStackMap, visitStackMapEntry
-
Methods inherited from class edu.umd.cs.findbugs.visitclass.BetterVisitor
clone, report, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visitCodeException, visitConstantClass, visitConstantDouble, visitConstantFieldref, visitConstantFloat, visitConstantInteger, visitConstantInterfaceMethodref, visitConstantLong, visitConstantMethodref, visitConstantNameAndType, visitConstantString, visitConstantUtf8, visitConstantValue, visitDeprecated, visitExceptionTable, visitField, visitInnerClass, visitLineNumber, visitLocalVariable, visitLocalVariableTypeTable, visitMethod, visitSignature, visitSourceFile, visitSynthetic, visitUnknown
-
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.apache.bcel.classfile.Visitor
visitConstantDynamic, visitMethodParameter, visitModule, visitModuleExports, visitModuleMainClass, visitModuleOpens, visitModulePackages, visitModuleProvides, visitModuleRequires, visitNestHost, visitNestMembers, visitRecord, visitRecordComponent, visitStackMapType
-
-
-
-
Field Detail
-
COLLECTION_SUPERCLASSES
private static final java.util.Set<java.lang.String> COLLECTION_SUPERCLASSES
-
MUTABLE_COLLECTION_CLASSES
private static final java.util.Set<java.lang.String> MUTABLE_COLLECTION_CLASSES
-
MUTABLE_COLLECTION_METHODS
private static final java.util.Map<java.lang.String,java.util.Map<java.lang.String,MutableStaticFields.AllowedParameter>> MUTABLE_COLLECTION_METHODS
-
seen
java.util.LinkedList<XField> seen
-
publicClass
boolean publicClass
-
mutableCollectionJustCreated
boolean mutableCollectionJustCreated
-
zeroOnTOS
boolean zeroOnTOS
-
emptyArrayOnTOS
boolean emptyArrayOnTOS
-
inStaticInitializer
boolean inStaticInitializer
-
packageName
java.lang.String packageName
-
readAnywhere
java.util.Set<XField> readAnywhere
-
unsafeValue
java.util.Set<XField> unsafeValue
-
mutableCollection
java.util.Set<XField> mutableCollection
-
notFinal
java.util.Set<XField> notFinal
-
outsidePackage
java.util.Set<XField> outsidePackage
-
needsRefactoringToBeFinal
java.util.Set<XField> needsRefactoringToBeFinal
-
writtenInMethod
java.util.Set<XField> writtenInMethod
-
writtenTwiceInMethod
java.util.Set<XField> writtenTwiceInMethod
-
firstFieldUse
java.util.Map<XField,SourceLineAnnotation> firstFieldUse
-
bugReporter
private final BugReporter bugReporter
-
isEclipseNLS
private boolean isEclipseNLS
Eclipse uses reflection to initialize NLS message bundles. Classes which using this mechanism are usually extending org.eclipse.osgi.util.NLS class and contains lots of public static String fields which are used as message Constants. Unfortunately these fields cannot be final, so FB reports tons of warnings for such Eclipse classes.
-
-
Constructor Detail
-
MutableStaticFields
public MutableStaticFields(BugReporter bugReporter)
-
-
Method Detail
-
extractPackage
static java.lang.String extractPackage(java.lang.String c)
-
visit
public void visit(org.apache.bcel.classfile.JavaClass obj)
- Overrides:
visitin classBetterVisitor
-
visit
public void visit(org.apache.bcel.classfile.Method obj)
- Overrides:
visitin classBetterVisitor
-
visit
public void visit(org.apache.bcel.classfile.Code obj)
- Overrides:
visitin classDismantleBytecode
-
sawOpcode
public void sawOpcode(int seen)
- Overrides:
sawOpcodein classDismantleBytecode
-
isCollection
private boolean isCollection(java.lang.String signature)
-
interesting
private boolean interesting(XField f)
-
visit
public void visit(org.apache.bcel.classfile.Field obj)
- Overrides:
visitin classBetterVisitor
-
report
public void report()
Description copied from interface:DetectorThis method is called after all classes to be visited. It should be used by any detectors which accumulate information over all visited classes to generate results.- Specified by:
reportin interfaceDetector- Overrides:
reportin classBytecodeScanningDetector
-
-