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.Pattern
anonymousInnerClassNamePattern
private BugReporter
bugReporter
private static boolean
DEBUG
private boolean
directlyImplementsExternalizable
private java.util.HashMap<java.lang.String,XField>
fieldsThatMightBeAProblem
private java.util.List<BugInstance>
fieldWarningList
(package private) boolean
foundSynchronizedMethods
(package private) boolean
foundSynthetic
private boolean
hasPublicVoidConstructor
(package private) boolean
implementsSerializableDirectly
private int
initializeCheckerBranchTarget
private java.util.Set<XField>
initializedCheckerVariables
(package private) boolean
innerClassHasOuterInstance
(package private) boolean
isAbstract
(package private) boolean
isAnonymousInnerClass
(package private) boolean
isEjbImplClass
private boolean
isEnum
(package private) boolean
isExternalizable
(package private) boolean
isGUIClass
(package private) boolean
isJSPClass
(package private) boolean
isRecord
(package private) boolean
isSerializable
private java.util.Map<XField,BugInstance>
optionalBugsInReadExternal
(package private) static boolean
reportTransientFieldOfNonSerializableClass
private boolean
sawReadExternal
private boolean
sawReadExternalBranchExit
private boolean
sawReadExternalExit
private boolean
sawReadObject
private boolean
sawReadResolve
(package private) boolean
sawSerialVersionUID
private boolean
sawWriteExternal
private boolean
sawWriteObject
(package private) boolean
seenTransientField
private boolean
superClassHasReadObject
private boolean
superClassHasVoidConstructor
private boolean
superClassImplementsSerializable
private boolean
testingEnabled
private java.util.HashSet<XField>
transientFieldsSetInConstructor
private java.util.HashSet<XField>
transientFieldsSetToDefaultValueInConstructor
private java.util.HashMap<XField,java.lang.Integer>
transientFieldsUpdates
(package private) boolean
writeObjectIsSynchronized
-
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 int
computePriority(double isSerializable, double bias)
private void
flush()
(package private) boolean
isSynthetic(org.apache.bcel.classfile.FieldOrMethod obj)
void
sawOpcode(int seen)
By default, this method will not be called when stack is TOP.private boolean
strongEvidenceForIntendedSerialization()
void
visit(org.apache.bcel.classfile.Code obj)
void
visit(org.apache.bcel.classfile.Field obj)
void
visit(org.apache.bcel.classfile.JavaClass obj)
void
visit(org.apache.bcel.classfile.Method obj)
void
visitAfter(org.apache.bcel.classfile.JavaClass obj)
void
visitClassContext(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
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:Detector
Visit the ClassContext for a class which should be analyzed for instances of bug patterns.- Specified by:
visitClassContext
in interfaceDetector
- Overrides:
visitClassContext
in classBytecodeScanningDetector
- Parameters:
classContext
- the ClassContext
-
flush
private void flush()
-
visit
public void visit(org.apache.bcel.classfile.JavaClass obj)
- Overrides:
visit
in classBetterVisitor
-
strongEvidenceForIntendedSerialization
private boolean strongEvidenceForIntendedSerialization()
-
visitAfter
public void visitAfter(org.apache.bcel.classfile.JavaClass obj)
- Overrides:
visitAfter
in classPreorderVisitor
-
visit
public void visit(org.apache.bcel.classfile.Method obj)
- Overrides:
visit
in classBetterVisitor
-
isSynthetic
boolean isSynthetic(org.apache.bcel.classfile.FieldOrMethod obj)
-
visit
public void visit(org.apache.bcel.classfile.Code obj)
- Overrides:
visit
in classDismantleBytecode
-
sawOpcode
public void sawOpcode(int seen)
Description copied from class:OpcodeStackDetector
By 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:
sawOpcode
in classOpcodeStackDetector
- See Also:
OpcodeStackDetector.beforeOpcode(int)
-
visit
public void visit(org.apache.bcel.classfile.Field obj)
- Overrides:
visit
in classBetterVisitor
-
computePriority
private int computePriority(double isSerializable, double bias)
-
-