Class DubiousMapCollection

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

@CustomUserValue public class DubiousMapCollection extends edu.umd.cs.findbugs.BytecodeScanningDetector
looks for fields that are implementations of java.util.Map, but that are only ever iterated over. This probably means that this data structure should be a List of some class that holds two values, or at the least Pair. Map was probably chosen as it was the easiest thing to use, but belies the point of the data structure.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private edu.umd.cs.findbugs.BugReporter
     
    private String
     
    private boolean
     
    private boolean
     
    private static final Set<String>
     
    private Map<String,edu.umd.cs.findbugs.FieldAnnotation>
     
    private org.apache.bcel.classfile.JavaClass
     
    private static final Set<String>
     
    private String
     
    private org.apache.bcel.classfile.JavaClass
     
    private Map<String,Set<edu.umd.cs.findbugs.ba.XField>>
     
    private static final Set<String>
     
    private edu.umd.cs.findbugs.OpcodeStack
     
    private edu.umd.cs.findbugs.ba.XField
     
    private int
     

    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
    DubiousMapCollection(edu.umd.cs.findbugs.BugReporter bugReporter)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    private boolean
    isMap(org.apache.bcel.classfile.Field obj)
     
    private void
    parses all the parameters of a called method and removes any of the parameters that are maps currently being looked at for this detector
    private void
     
    private void
    removeField(edu.umd.cs.findbugs.OpcodeStack.Item itm)
     
    void
    saveSpecialFieldUse(edu.umd.cs.findbugs.ba.XField xf)
     
    void
    sawOpcode(int seen)
     
    void
    visitClassContext(edu.umd.cs.findbugs.ba.ClassContext classContext)
     
    void
    visitCode(org.apache.bcel.classfile.Code obj)
     
    void
    visitField(org.apache.bcel.classfile.Field obj)
     

    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, 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 Details

    • SPECIAL_METHODS

      private static final Set<String> SPECIAL_METHODS
    • MAP_METHODS

      private static final Set<String> MAP_METHODS
    • MODIFYING_METHODS

      private static final Set<String> MODIFYING_METHODS
    • bugReporter

      private edu.umd.cs.findbugs.BugReporter bugReporter
    • mapInterface

      private org.apache.bcel.classfile.JavaClass mapInterface
    • propertiesClass

      private org.apache.bcel.classfile.JavaClass propertiesClass
    • stack

      private edu.umd.cs.findbugs.OpcodeStack stack
    • mapFields

      private Map<String,edu.umd.cs.findbugs.FieldAnnotation> mapFields
    • ternaryAccessedField

      private edu.umd.cs.findbugs.ba.XField ternaryAccessedField
    • savedSpecialFields

      private Map<String,Set<edu.umd.cs.findbugs.ba.XField>> savedSpecialFields
    • ternaryTarget

      private int ternaryTarget
    • isInSpecial

      private boolean isInSpecial
    • clsName

      private String clsName
    • isInnerClass

      private boolean isInnerClass
    • outerClassName

      private String outerClassName
  • Constructor Details

    • DubiousMapCollection

      public DubiousMapCollection(edu.umd.cs.findbugs.BugReporter bugReporter)
  • Method Details

    • visitClassContext

      public void visitClassContext(edu.umd.cs.findbugs.ba.ClassContext classContext)
      Specified by:
      visitClassContext in interface edu.umd.cs.findbugs.Detector
      Overrides:
      visitClassContext in class edu.umd.cs.findbugs.BytecodeScanningDetector
    • visitField

      public void visitField(org.apache.bcel.classfile.Field obj)
      Specified by:
      visitField in interface org.apache.bcel.classfile.Visitor
      Overrides:
      visitField in class edu.umd.cs.findbugs.visitclass.BetterVisitor
    • visitCode

      public void visitCode(org.apache.bcel.classfile.Code obj)
      Specified by:
      visitCode in interface org.apache.bcel.classfile.Visitor
      Overrides:
      visitCode in class edu.umd.cs.findbugs.visitclass.PreorderVisitor
    • sawOpcode

      public void sawOpcode(int seen)
      Overrides:
      sawOpcode in class edu.umd.cs.findbugs.visitclass.DismantleBytecode
    • processNormalInvoke

      private void processNormalInvoke()
    • processMethodCall

      private void processMethodCall()
      parses all the parameters of a called method and removes any of the parameters that are maps currently being looked at for this detector
    • isMap

      private boolean isMap(org.apache.bcel.classfile.Field obj)
    • removeField

      private void removeField(edu.umd.cs.findbugs.OpcodeStack.Item itm)
    • saveSpecialFieldUse

      public void saveSpecialFieldUse(edu.umd.cs.findbugs.ba.XField xf)