Class SharedVariableAtomicityDetector

    • Field Detail

      • currentMethod

        private org.apache.bcel.classfile.Method currentMethod
      • currentCFG

        private CFG currentCFG
      • currentLockDataFlow

        private LockDataflow currentLockDataFlow
      • isFirstVisit

        private boolean isFirstVisit
      • hadOperation

        private boolean hadOperation
      • readFieldsByMethods

        private final java.util.Map<XMethod,​java.util.Set<XField>> readFieldsByMethods
      • 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

      • 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
      • 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)
      • isFieldOfMethodClassOrEnclosing

        private boolean isFieldOfMethodClassOrEnclosing​(XField field,
                                                        XMethod method)
        True if field is declared on method's own class or on one of its enclosing classes. A non-static inner class can read and write fields of its enclosing instance via the synthetic this$0 reference, so the detector must follow that chain instead of only matching the inner class itself.
      • isEnclosingThisReference

        private static boolean isEnclosingThisReference​(XField field)
      • addPendingBug

        private void addPendingBug​(java.lang.String bugType,
                                   XMethod method,
                                   XField field)
      • report

        public void report()
        Description copied from interface: Detector
        This method is called after all classes to be visited. It should be used by any detectors which accumulate information over all visited classes to generate results.
        Specified by:
        report in interface Detector
        Overrides:
        report in class BytecodeScanningDetector