Package edu.umd.cs.findbugs.detect
Class SerializableIdiom
- java.lang.Object
-
- All Implemented Interfaces:
Detector,Priorities,org.apache.bcel.classfile.Visitor
public class SerializableIdiom extends OpcodeStackDetector
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class edu.umd.cs.findbugs.bcel.OpcodeStackDetector
OpcodeStackDetector.WithCustomJumpInfo
-
-
Field Summary
Fields Modifier and Type Field Description (package private) static java.util.regex.PatternanonymousInnerClassNamePatternprivate BugReporterbugReporterprivate static booleanDEBUGprivate booleandirectlyImplementsExternalizableprivate java.util.HashMap<java.lang.String,XField>fieldsThatMightBeAProblemprivate java.util.List<BugInstance>fieldWarningList(package private) booleanfoundSynchronizedMethods(package private) booleanfoundSyntheticprivate booleanhasPublicVoidConstructor(package private) booleanimplementsSerializableDirectlyprivate intinitializeCheckerBranchTargetprivate java.util.Set<XField>initializedCheckerVariables(package private) booleaninnerClassHasOuterInstance(package private) booleanisAbstract(package private) booleanisAnonymousInnerClass(package private) booleanisEjbImplClassprivate booleanisEnum(package private) booleanisExternalizable(package private) booleanisGUIClass(package private) booleanisJSPClass(package private) booleanisRecord(package private) booleanisSerializableprivate java.util.Map<XField,BugInstance>optionalBugsInReadExternal(package private) static booleanreportTransientFieldOfNonSerializableClassprivate booleansawReadExternalprivate booleansawReadExternalBranchExitprivate booleansawReadExternalExitprivate booleansawReadObjectprivate booleansawReadResolve(package private) booleansawSerialVersionUIDprivate booleansawWriteExternalprivate booleansawWriteObject(package private) booleanseenTransientFieldprivate booleansuperClassHasReadObjectprivate booleansuperClassHasVoidConstructorprivate booleansuperClassImplementsSerializableprivate booleantestingEnabledprivate java.util.HashSet<XField>transientFieldsSetInConstructorprivate java.util.HashSet<XField>transientFieldsSetToDefaultValueInConstructorprivate java.util.HashMap<XField,java.lang.Integer>transientFieldsUpdates(package private) booleanwriteObjectIsSynchronized-
Fields inherited from class edu.umd.cs.findbugs.bcel.OpcodeStackDetector
stack
-
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 SerializableIdiom(BugReporter bugReporter)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private intcomputePriority(double isSerializable, double bias)private voidflush()(package private) booleanisSynthetic(org.apache.bcel.classfile.FieldOrMethod obj)voidsawOpcode(int seen)By default, this method will not be called when stack is TOP.private booleanstrongEvidenceForIntendedSerialization()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)voidvisitAfter(org.apache.bcel.classfile.JavaClass obj)voidvisitClassContext(ClassContext classContext)Visit the ClassContext for a class which should be analyzed for instances of bug patterns.-
Methods inherited from class edu.umd.cs.findbugs.bcel.OpcodeStackDetector
afterOpcode, beforeOpcode, getStack, isUsingCustomUserValue, visitCode
-
Methods inherited from class edu.umd.cs.findbugs.BytecodeScanningDetector
getClassContext, report, shouldVisitCode
-
Methods inherited from class edu.umd.cs.findbugs.visitclass.DismantleBytecode
areOppositeBranches, atCatchBlock, 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, visitAnnotationDefault, visitAnnotationEntry, visitBootstrapMethods, 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
-
DEBUG
private static final boolean DEBUG
-
reportTransientFieldOfNonSerializableClass
static final boolean reportTransientFieldOfNonSerializableClass
-
sawSerialVersionUID
boolean sawSerialVersionUID
-
isSerializable
boolean isSerializable
-
implementsSerializableDirectly
boolean implementsSerializableDirectly
-
isExternalizable
boolean isExternalizable
-
isGUIClass
boolean isGUIClass
-
isEjbImplClass
boolean isEjbImplClass
-
isJSPClass
boolean isJSPClass
-
isRecord
boolean isRecord
-
foundSynthetic
boolean foundSynthetic
-
seenTransientField
boolean seenTransientField
-
foundSynchronizedMethods
boolean foundSynchronizedMethods
-
writeObjectIsSynchronized
boolean writeObjectIsSynchronized
-
bugReporter
private final BugReporter bugReporter
-
isAbstract
boolean isAbstract
-
fieldWarningList
private final java.util.List<BugInstance> fieldWarningList
-
fieldsThatMightBeAProblem
private final java.util.HashMap<java.lang.String,XField> fieldsThatMightBeAProblem
-
transientFieldsUpdates
private final java.util.HashMap<XField,java.lang.Integer> transientFieldsUpdates
-
transientFieldsSetInConstructor
private final java.util.HashSet<XField> transientFieldsSetInConstructor
-
transientFieldsSetToDefaultValueInConstructor
private final java.util.HashSet<XField> transientFieldsSetToDefaultValueInConstructor
-
optionalBugsInReadExternal
private final java.util.Map<XField,BugInstance> optionalBugsInReadExternal
-
initializedCheckerVariables
private java.util.Set<XField> initializedCheckerVariables
-
initializeCheckerBranchTarget
private int initializeCheckerBranchTarget
-
sawReadExternalBranchExit
private boolean sawReadExternalBranchExit
-
sawReadExternalExit
private boolean sawReadExternalExit
-
sawReadExternal
private boolean sawReadExternal
-
sawWriteExternal
private boolean sawWriteExternal
-
sawReadObject
private boolean sawReadObject
-
sawReadResolve
private boolean sawReadResolve
-
sawWriteObject
private boolean sawWriteObject
-
superClassImplementsSerializable
private boolean superClassImplementsSerializable
-
superClassHasReadObject
private boolean superClassHasReadObject
-
hasPublicVoidConstructor
private boolean hasPublicVoidConstructor
-
superClassHasVoidConstructor
private boolean superClassHasVoidConstructor
-
directlyImplementsExternalizable
private boolean directlyImplementsExternalizable
-
testingEnabled
private final boolean testingEnabled
-
anonymousInnerClassNamePattern
static final java.util.regex.Pattern anonymousInnerClassNamePattern
-
isAnonymousInnerClass
boolean isAnonymousInnerClass
-
innerClassHasOuterInstance
boolean innerClassHasOuterInstance
-
isEnum
private boolean isEnum
-
-
Constructor Detail
-
SerializableIdiom
public SerializableIdiom(BugReporter bugReporter)
-
-
Method Detail
-
visitClassContext
public void visitClassContext(ClassContext classContext)
Description copied from interface:DetectorVisit the ClassContext for a class which should be analyzed for instances of bug patterns.- Specified by:
visitClassContextin interfaceDetector- Overrides:
visitClassContextin classBytecodeScanningDetector- Parameters:
classContext- the ClassContext
-
flush
private void flush()
-
visit
public void visit(org.apache.bcel.classfile.JavaClass obj)
- Overrides:
visitin classBetterVisitor
-
strongEvidenceForIntendedSerialization
private boolean strongEvidenceForIntendedSerialization()
-
visitAfter
public void visitAfter(org.apache.bcel.classfile.JavaClass obj)
- Overrides:
visitAfterin classPreorderVisitor
-
visit
public void visit(org.apache.bcel.classfile.Method obj)
- Overrides:
visitin classBetterVisitor
-
isSynthetic
boolean isSynthetic(org.apache.bcel.classfile.FieldOrMethod obj)
-
visit
public void visit(org.apache.bcel.classfile.Code obj)
- Overrides:
visitin classDismantleBytecode
-
sawOpcode
public void sawOpcode(int seen)
Description copied from class:OpcodeStackDetectorBy default, this method will not be called when stack is TOP. To change this behavior, override
#beforeOpcode(int)and change to return true even if stack is TOP.see Using FindBugs for Research to learn lattice and what TOP means.
- Specified by:
sawOpcodein classOpcodeStackDetector- See Also:
OpcodeStackDetector.beforeOpcode(int)
-
visit
public void visit(org.apache.bcel.classfile.Field obj)
- Overrides:
visitin classBetterVisitor
-
computePriority
private int computePriority(double isSerializable, double bias)
-
-