Class AnnotationIssues

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

@CustomUserValue public class AnnotationIssues extends edu.umd.cs.findbugs.BytecodeScanningDetector
looks for common problems with the application of annotations. - missing @Nullable annotations
  • Nested Class Summary

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

    Fields
    Modifier and Type
    Field
    Description
     
     
    private List<Integer>
     
    private edu.umd.cs.findbugs.BugReporter
     
    private static final Set<String>
     
    private boolean
     
    private Set<Integer>
     
    private static final Set<FQMethod>
     
    private static final Set<String>
     
    private edu.umd.cs.findbugs.OpcodeStack
     
    private static final 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
    AnnotationIssues(edu.umd.cs.findbugs.BugReporter bugReporter)
    constructs a AI detector given the reporter to report bugs on
  • Method Summary

    Modifier and Type
    Method
    Description
    static void
    clearAssumptions(Map<Integer,Integer> assumptionTill, int pc)
    the map is keyed by register, and value by when an assumption holds to a byte offset if we have passed when the assumption holds, clear the item from the map
    void
    remove branch targets that have been passed
    void
     
    int
     
    boolean
     
    static boolean
    isMethodNullable(String className, String methodName, String methodSignature)
     
    static boolean
    isStackElementNullable(String className, org.apache.bcel.classfile.Method method, edu.umd.cs.findbugs.OpcodeStack.Item itm)
     
    static boolean
    methodHasNullableAnnotation(org.apache.bcel.classfile.Method m)
     
    void
     
    void
    sawOpcode(int seen)
     
    void
    visitClassContext(edu.umd.cs.findbugs.ba.ClassContext classContext)
     
    void
    visitCode(org.apache.bcel.classfile.Code 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, 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

    • USER_NULLABLE_ANNOTATIONS

      private static final String USER_NULLABLE_ANNOTATIONS
      See Also:
    • IS_EMPTY_SIGNATURES

      private static final Set<String> IS_EMPTY_SIGNATURES
    • NULLABLE_ANNOTATIONS

      private static final Set<String> NULLABLE_ANNOTATIONS
    • NOTABLE_EXCEPTIONS

      private static final Set<FQMethod> NOTABLE_EXCEPTIONS
    • bugReporter

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

      private Map<Integer,Integer> assumedNullTill
    • assumedNonNullTill

      private Map<Integer,Integer> assumedNonNullTill
    • noAssumptionsPossible

      private Set<Integer> noAssumptionsPossible
    • branchTargets

      private List<Integer> branchTargets
    • stack

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

      private boolean methodIsNullable
  • Constructor Details

    • AnnotationIssues

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

    • isCollecting

      public boolean isCollecting()
    • 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
    • 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
    • methodHasNullableAnnotation

      public static boolean methodHasNullableAnnotation(org.apache.bcel.classfile.Method m)
    • isStackElementNullable

      public static boolean isStackElementNullable(String className, org.apache.bcel.classfile.Method method, edu.umd.cs.findbugs.OpcodeStack.Item itm)
    • isMethodNullable

      public static boolean isMethodNullable(@SlashedClassName String className, String methodName, String methodSignature)
    • clearAssumptions

      public static void clearAssumptions(Map<Integer,Integer> assumptionTill, int pc)
      the map is keyed by register, and value by when an assumption holds to a byte offset if we have passed when the assumption holds, clear the item from the map
      Parameters:
      assumptionTill - the map of assumptions
      pc - // * the current pc
    • convertNullToNonNull

      public void convertNullToNonNull(int pc)
    • clearBranchTargets

      public void clearBranchTargets(int pc)
      remove branch targets that have been passed
      Parameters:
      pc - the current pc
    • getNextBranchTarget

      public int getNextBranchTarget()
    • removeAssumptions

      public void removeAssumptions(Map<Integer,Integer> assumptionsTill)