Class LocalTypeDetector

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
All Implemented Interfaces:
edu.umd.cs.findbugs.Detector, edu.umd.cs.findbugs.Priorities, org.apache.bcel.classfile.Visitor
Direct Known Subclasses:
LocalHangingExecutor, LocalSynchronizedCollection

abstract class LocalTypeDetector extends edu.umd.cs.findbugs.BytecodeScanningDetector
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    protected static class 
     
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private int
     
    private edu.umd.cs.findbugs.OpcodeStack
     
     

    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
     
  • Method Summary

    Modifier and Type
    Method
    Description
    protected Integer
     
    protected Integer
     
    protected Integer
     
    protected void
    dealWithStoring(int seen)
     
    protected abstract Set<String>
    returns a set of self returning methods, that is, methods that when called on a a synchronized collection return themselves.
    protected abstract 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 abstract 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 abstract void
    Given this RegisterInfo, report an appropriate bug.
    protected void
     
    void
    sawOpcode(int seen)
    implements the visitor to find the constructors defined in getWatchedConstructors() and the method calls in getWatchedClassMethods()
    void
    visitClassContext(edu.umd.cs.findbugs.ba.ClassContext classContext)
    implements the visitor to create and clear the stack and suspectLocals
    void
    visitCode(org.apache.bcel.classfile.Code obj)
    implements the visitor to reset the stack
    void
    visitMethod(org.apache.bcel.classfile.Method obj)
    implements the visitor to collect parameter registers

    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

  • Constructor Details

    • LocalTypeDetector

      LocalTypeDetector()
  • Method Details

    • getWatchedConstructors

      protected abstract Map<String,Integer> getWatchedConstructors()
      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.
      Returns:
      the map of watched constructors
    • getWatchedClassMethods

      protected abstract Map<String,Set<String>> getWatchedClassMethods()
      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).
      Returns:
      map of factory methods
    • getSelfReturningMethods

      protected abstract Set<String> getSelfReturningMethods()
      returns a set of self returning methods, that is, methods that when called on a a synchronized collection return themselves.
      Returns:
      a set of self referential methods
    • reportBug

      protected abstract void reportBug(LocalTypeDetector.RegisterInfo cri)
      Given this RegisterInfo, report an appropriate bug.
      Parameters:
      cri - the register info
    • visitClassContext

      public void visitClassContext(edu.umd.cs.findbugs.ba.ClassContext classContext)
      implements the visitor to create and clear the stack and suspectLocals
      Specified by:
      visitClassContext in interface edu.umd.cs.findbugs.Detector
      Overrides:
      visitClassContext in class edu.umd.cs.findbugs.BytecodeScanningDetector
      Parameters:
      classContext - the context object of the currently parsed class
    • visitMethod

      public void visitMethod(org.apache.bcel.classfile.Method obj)
      implements the visitor to collect parameter registers
      Specified by:
      visitMethod in interface org.apache.bcel.classfile.Visitor
      Overrides:
      visitMethod in class edu.umd.cs.findbugs.visitclass.BetterVisitor
      Parameters:
      obj - the context object of the currently parsed method
    • visitCode

      public void visitCode(org.apache.bcel.classfile.Code obj)
      implements the visitor to reset the stack
      Specified by:
      visitCode in interface org.apache.bcel.classfile.Visitor
      Overrides:
      visitCode in class edu.umd.cs.findbugs.visitclass.PreorderVisitor
      Parameters:
      obj - the context object of the currently parsed code block
    • sawOpcode

      public void sawOpcode(int seen)
      implements the visitor to find the constructors defined in getWatchedConstructors() and the method calls in getWatchedClassMethods()
      Overrides:
      sawOpcode in class edu.umd.cs.findbugs.visitclass.DismantleBytecode
      Parameters:
      seen - the opcode of the currently parsed instruction
    • dealWithStoring

      protected void dealWithStoring(int seen)
    • checkStaticCreations

      protected Integer checkStaticCreations()
    • checkSelfReturningMethods

      protected Integer checkSelfReturningMethods()
    • checkConstructors

      protected Integer checkConstructors()
    • reportTroublesomeLocals

      protected void reportTroublesomeLocals()