Package edu.umd.cs.findbugs.detect
Class SharedVariableAtomicityDetector
- java.lang.Object
-
- edu.umd.cs.findbugs.visitclass.BetterVisitor
-
- edu.umd.cs.findbugs.visitclass.PreorderVisitor
-
- edu.umd.cs.findbugs.visitclass.AnnotationVisitor
-
- edu.umd.cs.findbugs.visitclass.DismantleBytecode
-
- edu.umd.cs.findbugs.BytecodeScanningDetector
-
- edu.umd.cs.findbugs.bcel.OpcodeStackDetector
-
- edu.umd.cs.findbugs.detect.SharedVariableAtomicityDetector
-
- All Implemented Interfaces:
Detector,Priorities,org.apache.bcel.classfile.Visitor
public class SharedVariableAtomicityDetector 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 private BugAccumulatorbugAccumulatorprivate CFGcurrentCFGprivate LockDataflowcurrentLockDataFlowprivate org.apache.bcel.classfile.MethodcurrentMethodprivate booleanhadOperationprivate booleanisFirstVisitprivate static java.util.Set<java.lang.Short>methodCallOpCodesprivate java.util.Map<XMethod,java.util.Set<XMethod>>nonSyncedMethodCallsByCallingMethodsprivate static java.util.Set<java.lang.Short>operationOpCodesprivate static java.util.Set<java.lang.Short>pushOpCodesprivate java.util.Map<XMethod,java.util.Set<XField>>readFieldsByMethodsprivate static java.util.Set<java.lang.Short>readOpCodesprivate java.util.Set<XField>relevantFields-
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 SharedVariableAtomicityDetector(BugReporter reporter)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private voidaddNonFinalFieldsOfClass(XField field, XMethod method, java.util.Map<XMethod,java.util.Set<XField>> map)private voidcheckAndReportBug(int seen, XMethod method)private voidcollectFieldReadsAndInnerMethodCalls(int seen, XMethod method)private booleanhasNonSyncedNonPrivateCallToMethod(XMethod method, java.util.Set<XMethod> visitedMethods)private booleanis64bitPrimitive(java.lang.String className)private booleanisPrimitiveOrItsBoxingType(java.lang.String className)private booleanmapContainsFieldWithOtherMethod(XField field, XMethod method, java.util.Map<XMethod,java.util.Set<XField>> map)voidsawOpcode(int seen)By default, this method will not be called when stack is TOP.voidvisit(org.apache.bcel.classfile.JavaClass javaClass)voidvisit(org.apache.bcel.classfile.Method method)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, visit
-
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, 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
-
bugAccumulator
private final BugAccumulator bugAccumulator
-
currentMethod
private org.apache.bcel.classfile.Method currentMethod
-
currentCFG
private CFG currentCFG
-
currentLockDataFlow
private LockDataflow currentLockDataFlow
-
isFirstVisit
private boolean isFirstVisit
-
hadOperation
private boolean hadOperation
-
relevantFields
private final java.util.Set<XField> relevantFields
-
nonSyncedMethodCallsByCallingMethods
private final java.util.Map<XMethod,java.util.Set<XMethod>> nonSyncedMethodCallsByCallingMethods
-
readOpCodes
private static final java.util.Set<java.lang.Short> readOpCodes
-
pushOpCodes
private static final java.util.Set<java.lang.Short> pushOpCodes
-
operationOpCodes
private static final java.util.Set<java.lang.Short> operationOpCodes
-
methodCallOpCodes
private static final java.util.Set<java.lang.Short> methodCallOpCodes
-
-
Constructor Detail
-
SharedVariableAtomicityDetector
public SharedVariableAtomicityDetector(BugReporter reporter)
-
-
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
-
visit
public void visit(org.apache.bcel.classfile.JavaClass javaClass)
- Overrides:
visitin classBetterVisitor
-
visit
public void visit(org.apache.bcel.classfile.Method method)
- Overrides:
visitin classBetterVisitor
-
visitAfter
public void visitAfter(org.apache.bcel.classfile.JavaClass obj)
- Overrides:
visitAfterin classPreorderVisitor
-
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)
-
collectFieldReadsAndInnerMethodCalls
private void collectFieldReadsAndInnerMethodCalls(int seen, XMethod method)
-
addNonFinalFieldsOfClass
private void addNonFinalFieldsOfClass(XField field, XMethod method, java.util.Map<XMethod,java.util.Set<XField>> map)
-
hasNonSyncedNonPrivateCallToMethod
private boolean hasNonSyncedNonPrivateCallToMethod(XMethod method, java.util.Set<XMethod> visitedMethods)
-
mapContainsFieldWithOtherMethod
private boolean mapContainsFieldWithOtherMethod(XField field, XMethod method, java.util.Map<XMethod,java.util.Set<XField>> map)
-
checkAndReportBug
private void checkAndReportBug(int seen, XMethod method)
-
isPrimitiveOrItsBoxingType
private boolean isPrimitiveOrItsBoxingType(java.lang.String className)
-
is64bitPrimitive
private boolean is64bitPrimitive(java.lang.String className)
-
-