Class NonRecycleableTaglibs

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

public class NonRecycleableTaglibs extends edu.umd.cs.findbugs.BytecodeScanningDetector
looks for tag libraries that are not recycleable because backing members of taglib attributes are set in areas besides the setter method for the attribute.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private Map<QMethod,String>
    methodname:methodsig to type of setter methods
    private final edu.umd.cs.findbugs.BugReporter
     
    private Map<String,edu.umd.cs.findbugs.FieldAnnotation>
     
    private static final int
     
    private Map<QMethod,Map<Map.Entry<String,String>,edu.umd.cs.findbugs.SourceLineAnnotation>>
    QMethod to (fieldname:fieldtype)s
    private static final Set<String>
     
    private static final 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
    NonRecycleableTaglibs(edu.umd.cs.findbugs.BugReporter bugReporter)
    constructs a NRTL detector given the reporter to report bugs on.
  • Method Summary

    Modifier and Type
    Method
    Description
    private static Map<QMethod,String>
    getAttributes(org.apache.bcel.classfile.JavaClass cls)
    collect all possible attributes given the name of methods available.
    private void
    generates all the bug reports for attributes that are not recycleable
    void
    sawOpcode(int seen)
    implements the visitor to record storing of fields, and where they occur
    void
    visitClassContext(edu.umd.cs.findbugs.ba.ClassContext classContext)
    implements the visitor to look for classes that extend the TagSupport or BodyTagSupport class
    void
    visitCode(org.apache.bcel.classfile.Code obj)
    implements the visitor to

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

    • MAX_ATTRIBUTE_CODE_LENGTH

      private static final int MAX_ATTRIBUTE_CODE_LENGTH
      See Also:
    • tagClasses

      private static final Set<String> tagClasses
    • validAttrTypes

      private static final Set<String> validAttrTypes
    • bugReporter

      private final edu.umd.cs.findbugs.BugReporter bugReporter
    • attributes

      private Map<QMethod,String> attributes
      methodname:methodsig to type of setter methods
    • methodWrites

      private Map<QMethod,Map<Map.Entry<String,String>,edu.umd.cs.findbugs.SourceLineAnnotation>> methodWrites
      QMethod to (fieldname:fieldtype)s
    • fieldAnnotations

      private Map<String,edu.umd.cs.findbugs.FieldAnnotation> fieldAnnotations
  • Constructor Details

    • NonRecycleableTaglibs

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

    • visitClassContext

      public void visitClassContext(edu.umd.cs.findbugs.ba.ClassContext classContext)
      implements the visitor to look for classes that extend the TagSupport or BodyTagSupport class
      Specified by:
      visitClassContext in interface edu.umd.cs.findbugs.Detector
      Overrides:
      visitClassContext in class edu.umd.cs.findbugs.BytecodeScanningDetector
      Parameters:
      classContext - the context object for the currently parsed class
    • getAttributes

      private static Map<QMethod,String> getAttributes(org.apache.bcel.classfile.JavaClass cls)
      collect all possible attributes given the name of methods available.
      Parameters:
      cls - the class to look for setter methods to infer properties
      Returns:
      the map of possible attributes/types
    • visitCode

      public void visitCode(org.apache.bcel.classfile.Code obj)
      implements the visitor to
      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 for the currently parsed code object
    • sawOpcode

      public void sawOpcode(int seen)
      implements the visitor to record storing of fields, and where they occur
      Overrides:
      sawOpcode in class edu.umd.cs.findbugs.visitclass.DismantleBytecode
      Parameters:
      seen - the currently parsed opcode
    • reportBugs

      private void reportBugs()
      generates all the bug reports for attributes that are not recycleable