Class LocalSynchronizedCollection

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
com.mebigfatguy.fbcontrib.detect.LocalTypeDetector
com.mebigfatguy.fbcontrib.detect.LocalSynchronizedCollection
All Implemented Interfaces:
edu.umd.cs.findbugs.Detector, edu.umd.cs.findbugs.Priorities, org.apache.bcel.classfile.Visitor

@CustomUserValue public class LocalSynchronizedCollection extends LocalTypeDetector
looks for allocations of synchronized collections that are stored in local variables, and never stored in fields or returned from methods. As local variables are by definition thread safe, using synchronized collections in this context makes no sense.
  • Nested Class Summary

    Nested classes/interfaces inherited from class com.mebigfatguy.fbcontrib.detect.LocalTypeDetector

    LocalTypeDetector.RegisterInfo
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private edu.umd.cs.findbugs.BugReporter
     
    private static final Set<String>
     
    private static final Map<String,Integer>
     
    private static final Map<String,Set<String>>
     

    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
    LocalSynchronizedCollection(edu.umd.cs.findbugs.BugReporter bugReporter)
    constructs a LSYC detector given the reporter to report bugs on
  • Method Summary

    Modifier and Type
    Method
    Description
    protected Set<String>
    returns a set of self returning methods, that is, methods that when called on a a synchronized collection return themselves.
    protected Map<String,Set<String>>
    Should return a map of a class and a set of "factory" methods that create types that should be reported buggy (when made as local variables).
    protected Map<String,Integer>
    Should return a map of constructors that should be watched, as well as version number of Java that the given constructor becomes a bad idea.
    protected void
    Given this RegisterInfo, report an appropriate bug.

    Methods inherited from class edu.umd.cs.findbugs.BytecodeScanningDetector

    getClassContext, report, shouldVisitCode

    Methods inherited from class edu.umd.cs.findbugs.visitclass.DismantleBytecode

    afterOpcode, areOppositeBranches, atCatchBlock, beforeOpcode, 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, 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, visit, visit, visitCodeException, visitConstantClass, visitConstantDouble, visitConstantFieldref, visitConstantFloat, visitConstantInteger, visitConstantInterfaceMethodref, visitConstantLong, visitConstantMethodref, visitConstantNameAndType, visitConstantString, visitConstantUtf8, visitConstantValue, visitDeprecated, visitExceptionTable, visitField, visitInnerClass, visitLineNumber, visitLocalVariable, visitLocalVariableTypeTable, 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 Details

    • syncCtors

      private static final Map<String,Integer> syncCtors
    • synchClassMethods

      private static final Map<String,Set<String>> synchClassMethods
    • selfReturningMethods

      private static final Set<String> selfReturningMethods
    • bugReporter

      private edu.umd.cs.findbugs.BugReporter bugReporter
  • Constructor Details

    • LocalSynchronizedCollection

      public LocalSynchronizedCollection(edu.umd.cs.findbugs.BugReporter bugReporter)
      constructs a LSYC detector given the reporter to report bugs on
      Parameters:
      bugReporter - the sync of bug reports
  • Method Details

    • getWatchedConstructors

      protected Map<String,Integer> getWatchedConstructors()
      Description copied from class: LocalTypeDetector
      Should return a map of constructors that should be watched, as well as version number of Java that the given constructor becomes a bad idea. e.g. StringBuffer was the only way to efficiently concatenate a string until the faster, non-thread safe StringBuilder was introduced in 1.5. Thus, in code that targets before 1.5, FindBugs should not report a LocalSynchronizedCollection bug. Therefore, the entry <"java/lang/StringBuffer", Const.MAJOR_1_5> is in the returned map.
      Specified by:
      getWatchedConstructors in class LocalTypeDetector
      Returns:
      the map of watched constructors
    • getWatchedClassMethods

      protected Map<String,Set<String>> getWatchedClassMethods()
      Description copied from class: LocalTypeDetector
      Should return a map of a class and a set of "factory" methods that create types that should be reported buggy (when made as local variables).
      Specified by:
      getWatchedClassMethods in class LocalTypeDetector
      Returns:
      map of factory methods
    • getSelfReturningMethods

      protected Set<String> getSelfReturningMethods()
      Description copied from class: LocalTypeDetector
      returns a set of self returning methods, that is, methods that when called on a a synchronized collection return themselves.
      Specified by:
      getSelfReturningMethods in class LocalTypeDetector
      Returns:
      a set of self referential methods
    • reportBug

      protected void reportBug(LocalTypeDetector.RegisterInfo cri)
      Description copied from class: LocalTypeDetector
      Given this RegisterInfo, report an appropriate bug.
      Specified by:
      reportBug in class LocalTypeDetector
      Parameters:
      cri - the register info