Class SharedVariableAtomicityDetector

All Implemented Interfaces:
Detector, Priorities, org.apache.bcel.classfile.Visitor

public class SharedVariableAtomicityDetector extends OpcodeStackDetector
  • Field Details

    • 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
    • readFieldsByMethods

      private final Map<XMethod,Set<XField>> readFieldsByMethods
    • relevantFields

      private final Set<XField> relevantFields
    • nonSyncedMethodCallsByCallingMethods

      private final Map<XMethod,Set<XMethod>> nonSyncedMethodCallsByCallingMethods
    • readOpCodes

      private static final Set<Short> readOpCodes
    • pushOpCodes

      private static final Set<Short> pushOpCodes
    • operationOpCodes

      private static final Set<Short> operationOpCodes
    • methodCallOpCodes

      private static final Set<Short> methodCallOpCodes
  • Constructor Details

    • SharedVariableAtomicityDetector

      public SharedVariableAtomicityDetector(BugReporter reporter)
  • Method Details

    • 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 interface Detector
      Overrides:
      visitClassContext in class BytecodeScanningDetector
      Parameters:
      classContext - the ClassContext
    • visit

      public void visit(org.apache.bcel.classfile.JavaClass javaClass)
      Overrides:
      visit in class BetterVisitor
    • visit

      public void visit(org.apache.bcel.classfile.Method method)
      Overrides:
      visit in class BetterVisitor
    • visitAfter

      public void visitAfter(org.apache.bcel.classfile.JavaClass obj)
      Overrides:
      visitAfter in class PreorderVisitor
    • 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 class OpcodeStackDetector
      See Also:
    • collectFieldReadsAndInnerMethodCalls

      private void collectFieldReadsAndInnerMethodCalls(int seen, XMethod method)
    • addNonFinalFieldsOfClass

      private void addNonFinalFieldsOfClass(XField field, XMethod method, Map<XMethod,Set<XField>> map)
    • hasNonSyncedNonPrivateCallToMethod

      private boolean hasNonSyncedNonPrivateCallToMethod(XMethod method, Set<XMethod> visitedMethods)
    • mapContainsFieldWithOtherMethod

      private boolean mapContainsFieldWithOtherMethod(XField field, XMethod method, Map<XMethod,Set<XField>> map)
    • checkAndReportBug

      private void checkAndReportBug(int seen, XMethod method)
    • isPrimitiveOrItsBoxingType

      private boolean isPrimitiveOrItsBoxingType(String className)
    • is64bitPrimitive

      private boolean is64bitPrimitive(String className)