Package com.mebigfatguy.fbcontrib.detect
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 -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate edu.umd.cs.findbugs.BugReporterprivate booleanprivate edu.umd.cs.findbugs.OpcodeStackprivate static final StringFields inherited from class edu.umd.cs.findbugs.visitclass.DismantleBytecode
codeBytes, lineNumberTable, M_BR, M_CP, M_INT, M_PAD, M_R, M_UINTFields inherited from interface edu.umd.cs.findbugs.Priorities
EXP_PRIORITY, HIGH_PRIORITY, IGNORE_PRIORITY, LOW_PRIORITY, NORMAL_PRIORITY -
Constructor Summary
ConstructorsConstructorDescriptionAnnotationIssues(edu.umd.cs.findbugs.BugReporter bugReporter) constructs a AI detector given the reporter to report bugs on -
Method Summary
Modifier and TypeMethodDescriptionstatic voidclearAssumptions(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 mapvoidclearBranchTargets(int pc) remove branch targets that have been passedvoidconvertNullToNonNull(int pc) intbooleanstatic booleanisMethodNullable(String className, String methodName, String methodSignature) static booleanisStackElementNullable(String className, org.apache.bcel.classfile.Method method, edu.umd.cs.findbugs.OpcodeStack.Item itm) static booleanmethodHasNullableAnnotation(org.apache.bcel.classfile.Method m) voidremoveAssumptions(Map<Integer, Integer> assumptionsTill) voidsawOpcode(int seen) voidvisitClassContext(edu.umd.cs.findbugs.ba.ClassContext classContext) voidvisitCode(org.apache.bcel.classfile.Code obj) Methods inherited from class edu.umd.cs.findbugs.BytecodeScanningDetector
getClassContext, report, shouldVisitCodeMethods 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, visitMethods inherited from class edu.umd.cs.findbugs.visitclass.AnnotationVisitor
getAnnotationParameterAsEnum, getAnnotationParameterAsString, getAnnotationParameterAsStringArray, visitAnnotation, visitAnnotation, visitParameterAnnotation, visitParameterAnnotation, visitSyntheticParameterAnnotationMethods 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, visitStackMapEntryMethods 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, visitUnknownMethods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods 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
- See Also:
-
IS_EMPTY_SIGNATURES
-
NULLABLE_ANNOTATIONS
-
NOTABLE_EXCEPTIONS
-
bugReporter
private edu.umd.cs.findbugs.BugReporter bugReporter -
assumedNullTill
-
assumedNonNullTill
-
noAssumptionsPossible
-
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:
visitClassContextin interfaceedu.umd.cs.findbugs.Detector- Overrides:
visitClassContextin classedu.umd.cs.findbugs.BytecodeScanningDetector
-
visitCode
public void visitCode(org.apache.bcel.classfile.Code obj) - Specified by:
visitCodein interfaceorg.apache.bcel.classfile.Visitor- Overrides:
visitCodein classedu.umd.cs.findbugs.visitclass.PreorderVisitor
-
sawOpcode
public void sawOpcode(int seen) - Overrides:
sawOpcodein classedu.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
-
clearAssumptions
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 assumptionspc- // * 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
-