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 BugAccumulator
bugAccumulator
private CFG
currentCFG
private LockDataflow
currentLockDataFlow
private org.apache.bcel.classfile.Method
currentMethod
private boolean
isFirstVisit
private static java.util.Set<java.lang.Short>
methodCallOpCodes
private java.util.Map<XMethod,java.util.Set<XMethod>>
nonSyncedMethodCallsByCallingMethods
private static java.util.Set<java.lang.Short>
operationOpCodes
private static java.util.Set<java.lang.Short>
pushOpCodes
private java.util.Map<XMethod,java.util.Set<XField>>
readFieldsByMethods
private static java.util.Set<java.lang.Short>
readOpCodes
private 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 void
addNonFinalFieldsOfClass(XField field, XMethod method, java.util.Map<XMethod,java.util.Set<XField>> map)
private void
checkAndReportBug(int seen, XMethod method)
private void
collectFieldReadsAndInnerMethodCalls(int seen, XMethod method)
private boolean
hasNonSyncedNonPrivateCallToMethod(XMethod method, java.util.Set<XMethod> visitedMethods)
private boolean
is64bitPrimitive(java.lang.String className)
private boolean
isPrimitiveOrItsBoxingType(java.lang.String className)
private boolean
mapContainsFieldWithOtherMethod(XField field, XMethod method, java.util.Map<XMethod,java.util.Set<XField>> map)
void
sawOpcode(int seen)
By default, this method will not be called when stack is TOP.void
visit(org.apache.bcel.classfile.JavaClass javaClass)
void
visit(org.apache.bcel.classfile.Method method)
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, 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
-
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: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
-
visit
public void visit(org.apache.bcel.classfile.JavaClass javaClass)
- Overrides:
visit
in classBetterVisitor
-
visit
public void visit(org.apache.bcel.classfile.Method method)
- Overrides:
visit
in classBetterVisitor
-
visitAfter
public void visitAfter(org.apache.bcel.classfile.JavaClass obj)
- Overrides:
visitAfter
in classPreorderVisitor
-
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)
-
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)
-
-