Package com.mebigfatguy.fbcontrib.detect
Class UnitTestAssertionOddities
- 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.UnitTestAssertionOddities
-
- All Implemented Interfaces:
edu.umd.cs.findbugs.Detector
,edu.umd.cs.findbugs.Priorities
,edu.umd.cs.findbugs.visitclass.Constants2
,org.apache.bcel.classfile.Visitor
,org.apache.bcel.Constants
@CustomUserValue public class UnitTestAssertionOddities extends edu.umd.cs.findbugs.BytecodeScanningDetector
looks for odd uses of the Assert class of the JUnit and TestNG framework
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
UnitTestAssertionOddities.State
private static class
UnitTestAssertionOddities.TestFrameworkType
-
Field Summary
Fields Modifier and Type Field Description private static java.lang.String
BOOLEAN_TYPE_SIGNATURE
private edu.umd.cs.findbugs.BugReporter
bugReporter
private boolean
checkIsNegated
private java.lang.String
className
private java.util.Set<edu.umd.cs.findbugs.classfile.FieldDescriptor>
fieldsWithAnnotations
private UnitTestAssertionOddities.TestFrameworkType
frameworkType
private boolean
hasAnnotation
private static java.util.Set<java.lang.String>
INJECTOR_ANNOTATIONS
private boolean
isAnnotationCapable
private boolean
isTestCaseDerived
private static java.lang.String
LJAVA_LANG_DOUBLE
private static java.lang.String
MBEAN_CLASS
private static java.lang.String
MBEAN_METHOD
private static java.lang.String
NEW_ASSERT_CLASS
private static java.lang.String
NG_ASSERT_CLASS
private static java.lang.String
NG_JUNIT_ASSERT_CLASS
private static java.lang.String
OLD_ASSERT_CLASS
private boolean
sawAssert
private edu.umd.cs.findbugs.OpcodeStack
stack
private UnitTestAssertionOddities.State
state
private static java.lang.String
TEST_ANNOTATION_SIGNATURE
private static java.lang.String
TEST_CLASS
private org.apache.bcel.classfile.JavaClass
testAnnotationClass
private static java.lang.String
TESTCASE_CLASS
private org.apache.bcel.classfile.JavaClass
testCaseClass
private static java.lang.String
TESTNG_ANNOTATION_SIGNATURE
private static java.lang.String
TESTNG_CLASS
private org.apache.bcel.classfile.JavaClass
testNGAnnotationClass
-
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 org.apache.bcel.Constants
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_SYPER, ACC_TRANSIENT, ACC_VARARGS, ACC_VOLATILE, ACCESS_NAMES, ACONST_NULL, ALOAD, ALOAD_0, ALOAD_1, ALOAD_2, ALOAD_3, ANEWARRAY, ANEWARRAY_QUICK, APPEND_FRAME, APPEND_FRAME_MAX, ARETURN, ARRAYLENGTH, ASTORE, ASTORE_0, ASTORE_1, ASTORE_2, ASTORE_3, ATHROW, ATTR_ANNOTATION_DEFAULT, ATTR_CODE, ATTR_CONSTANT_VALUE, ATTR_DEPRECATED, ATTR_ENCLOSING_METHOD, ATTR_EXCEPTIONS, ATTR_INNER_CLASSES, ATTR_LINE_NUMBER_TABLE, ATTR_LOCAL_VARIABLE_TABLE, ATTR_LOCAL_VARIABLE_TYPE_TABLE, ATTR_PMG, ATTR_RUNTIME_VISIBLE_ANNOTATIONS, ATTR_RUNTIME_VISIBLE_PARAMETER_ANNOTATIONS, ATTR_RUNTIMEIN_VISIBLE_ANNOTATIONS, ATTR_RUNTIMEIN_VISIBLE_PARAMETER_ANNOTATIONS, ATTR_SIGNATURE, ATTR_SOURCE_FILE, ATTR_STACK_MAP, ATTR_STACK_MAP_TABLE, ATTR_SYNTHETIC, ATTR_UNKNOWN, ATTRIBUTE_NAMES, BALOAD, BASTORE, BIPUSH, BREAKPOINT, CALOAD, CASTORE, CHECKCAST, CHECKCAST_QUICK, CHOP_FRAME, CHOP_FRAME_MAX, CLASS_TYPE_NAMES, CONSTANT_Class, CONSTANT_Double, CONSTANT_Fieldref, CONSTANT_Float, CONSTANT_Integer, CONSTANT_InterfaceMethodref, CONSTANT_InvokeDynamic, CONSTANT_Long, CONSTANT_MethodHandle, CONSTANT_Methodref, CONSTANT_MethodType, CONSTANT_NameAndType, CONSTANT_NAMES, CONSTANT_String, CONSTANT_Utf8, CONSTRUCTOR_NAME, CONSUME_STACK, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DLOAD_0, DLOAD_1, DLOAD_2, DLOAD_3, DMUL, DNEG, DREM, DRETURN, DSTORE, DSTORE_0, DSTORE_1, DSTORE_2, DSTORE_3, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAD_0, FLOAD_1, FLOAD_2, FLOAD_3, FMUL, FNEG, FREM, FRETURN, FSTORE, FSTORE_0, FSTORE_1, FSTORE_2, FSTORE_3, FSUB, FULL_FRAME, GETFIELD, GETFIELD_QUICK, GETFIELD_QUICK_W, GETFIELD2_QUICK, GETSTATIC, GETSTATIC_QUICK, GETSTATIC2_QUICK, GOTO, GOTO_W, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILLEGAL_OPCODE, ILLEGAL_TYPE, ILOAD, ILOAD_0, ILOAD_1, ILOAD_2, ILOAD_3, IMPDEP1, IMPDEP2, IMUL, INEG, INSTANCEOF, INSTANCEOF_QUICK, INT2BYTE, INT2CHAR, INT2SHORT, INTERFACES_IMPLEMENTED_BY_ARRAYS, INVOKEDYNAMIC, INVOKEINTERFACE, INVOKEINTERFACE_QUICK, INVOKENONVIRTUAL, INVOKENONVIRTUAL_QUICK, INVOKESPECIAL, INVOKESTATIC, INVOKESTATIC_QUICK, INVOKESUPER_QUICK, INVOKEVIRTUAL, INVOKEVIRTUAL_QUICK, INVOKEVIRTUAL_QUICK_W, INVOKEVIRTUALOBJECT_QUICK, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISTORE_0, ISTORE_1, ISTORE_2, ISTORE_3, ISUB, ITEM_Bogus, ITEM_Double, ITEM_Float, ITEM_InitObject, ITEM_Integer, ITEM_Long, ITEM_NAMES, ITEM_NewObject, ITEM_Null, ITEM_Object, IUSHR, IXOR, JSR, JSR_W, KNOWN_ATTRIBUTES, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDC_QUICK, LDC_W, LDC_W_QUICK, LDC2_W, LDC2_W_QUICK, LDIV, LLOAD, LLOAD_0, LLOAD_1, LLOAD_2, LLOAD_3, LMUL, LNEG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSTORE_0, LSTORE_1, LSTORE_2, LSTORE_3, LSUB, LUSHR, LXOR, MAJOR, MAJOR_1_1, MAJOR_1_2, MAJOR_1_3, MAJOR_1_4, MAJOR_1_5, MAJOR_1_6, MAJOR_1_7, MAJOR_1_8, MAX_ACC_FLAG, MAX_BYTE, MAX_CODE_SIZE, MAX_CP_ENTRIES, MAX_SHORT, MINOR, MINOR_1_1, MINOR_1_2, MINOR_1_3, MINOR_1_4, MINOR_1_5, MINOR_1_6, MINOR_1_7, MINOR_1_8, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, MULTIANEWARRAY_QUICK, NEW, NEW_QUICK, NEWARRAY, NO_OF_OPERANDS, NOP, OPCODE_NAMES, POP, POP2, PRODUCE_STACK, PUSH, PUTFIELD, PUTFIELD_QUICK, PUTFIELD_QUICK_W, PUTFIELD2_QUICK, PUTSTATIC, PUTSTATIC_QUICK, PUTSTATIC2_QUICK, RESERVED, RET, RETURN, SALOAD, SAME_FRAME, SAME_FRAME_EXTENDED, SAME_FRAME_MAX, SAME_LOCALS_1_STACK_ITEM_FRAME, SAME_LOCALS_1_STACK_ITEM_FRAME_EXTENDED, SAME_LOCALS_1_STACK_ITEM_FRAME_MAX, SASTORE, SHORT_TYPE_NAMES, SIPUSH, STATIC_INITIALIZER_NAME, SWAP, SWITCH, T_ADDRESS, T_ARRAY, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_OBJECT, T_REFERENCE, T_SHORT, T_UNKNOWN, T_VOID, TABLESWITCH, TYPE_NAMES, TYPE_OF_OPERANDS, UNDEFINED, UNPREDICTABLE, WIDE
-
-
Constructor Summary
Constructors Constructor Description UnitTestAssertionOddities(edu.umd.cs.findbugs.BugReporter bugReporter)
constructs a JOA detector given the reporter to report bugs on
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private void
detectFrameworkType()
Attempt to identify whether we are dealing with JUnit or TestNG.private boolean
hasExpects()
private boolean
hasFieldInjectorAnnotation(edu.umd.cs.findbugs.OpcodeStack.Item item)
private boolean
isFloatingPtPrimitive(java.lang.String signature)
private boolean
ngProcessAssertEquals()
private boolean
processAssert()
void
sawOpcode(int seen)
void
visitClassContext(edu.umd.cs.findbugs.ba.ClassContext classContext)
override the visitor to see if this class could be a test classvoid
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
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, getSurroundingTryBlock, getSurroundingTryBlock, getThisClass, getXClass, getXField, getXMethod, hasInterestingClass, hasInterestingMethod, isVisitMethodsInCallOrder, setupVisitorForClass, setVisitMethodsInCallOrder, shouldVisit, toString, visitAfter, visitAfter, visitAnnotationDefault, visitAnnotationEntry, visitConstantPool, visitEnclosingMethod, visitingField, visitingMethod, visitInnerClasses, visitJavaClass, visitLineNumberTable, visitLocalVariableTable, visitStackMapTable, visitStackMapTableEntry
-
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, visitStackMap, visitStackMapEntry, visitSynthetic, visitUnknown
-
-
-
-
Field Detail
-
INJECTOR_ANNOTATIONS
private static final java.util.Set<java.lang.String> INJECTOR_ANNOTATIONS
-
BOOLEAN_TYPE_SIGNATURE
private static final java.lang.String BOOLEAN_TYPE_SIGNATURE
- See Also:
- Constant Field Values
-
LJAVA_LANG_DOUBLE
private static final java.lang.String LJAVA_LANG_DOUBLE
- See Also:
- Constant Field Values
-
TESTCASE_CLASS
private static final java.lang.String TESTCASE_CLASS
- See Also:
- Constant Field Values
-
TEST_CLASS
private static final java.lang.String TEST_CLASS
- See Also:
- Constant Field Values
-
TEST_ANNOTATION_SIGNATURE
private static final java.lang.String TEST_ANNOTATION_SIGNATURE
- See Also:
- Constant Field Values
-
OLD_ASSERT_CLASS
private static final java.lang.String OLD_ASSERT_CLASS
- See Also:
- Constant Field Values
-
NEW_ASSERT_CLASS
private static final java.lang.String NEW_ASSERT_CLASS
- See Also:
- Constant Field Values
-
TESTNG_CLASS
private static final java.lang.String TESTNG_CLASS
- See Also:
- Constant Field Values
-
TESTNG_ANNOTATION_SIGNATURE
private static final java.lang.String TESTNG_ANNOTATION_SIGNATURE
- See Also:
- Constant Field Values
-
NG_ASSERT_CLASS
private static final java.lang.String NG_ASSERT_CLASS
- See Also:
- Constant Field Values
-
NG_JUNIT_ASSERT_CLASS
private static final java.lang.String NG_JUNIT_ASSERT_CLASS
- See Also:
- Constant Field Values
-
MBEAN_CLASS
private static final java.lang.String MBEAN_CLASS
- See Also:
- Constant Field Values
-
MBEAN_METHOD
private static final java.lang.String MBEAN_METHOD
- See Also:
- Constant Field Values
-
bugReporter
private edu.umd.cs.findbugs.BugReporter bugReporter
-
testCaseClass
private org.apache.bcel.classfile.JavaClass testCaseClass
-
testAnnotationClass
private org.apache.bcel.classfile.JavaClass testAnnotationClass
-
testNGAnnotationClass
private org.apache.bcel.classfile.JavaClass testNGAnnotationClass
-
stack
private edu.umd.cs.findbugs.OpcodeStack stack
-
isTestCaseDerived
private boolean isTestCaseDerived
-
isAnnotationCapable
private boolean isAnnotationCapable
-
className
@SlashedClassName private java.lang.String className
-
sawAssert
private boolean sawAssert
-
state
private UnitTestAssertionOddities.State state
-
checkIsNegated
private boolean checkIsNegated
-
frameworkType
private UnitTestAssertionOddities.TestFrameworkType frameworkType
-
hasAnnotation
private boolean hasAnnotation
-
fieldsWithAnnotations
private java.util.Set<edu.umd.cs.findbugs.classfile.FieldDescriptor> fieldsWithAnnotations
-
-
Method Detail
-
visitClassContext
public void visitClassContext(edu.umd.cs.findbugs.ba.ClassContext classContext)
override the visitor to see if this class could be a test class- Specified by:
visitClassContext
in interfaceedu.umd.cs.findbugs.Detector
- Overrides:
visitClassContext
in classedu.umd.cs.findbugs.BytecodeScanningDetector
- Parameters:
classContext
- the context object of the currently parsed class
-
visitCode
public void visitCode(org.apache.bcel.classfile.Code obj)
- Specified by:
visitCode
in interfaceorg.apache.bcel.classfile.Visitor
- Overrides:
visitCode
in classedu.umd.cs.findbugs.visitclass.PreorderVisitor
-
detectFrameworkType
private void detectFrameworkType()
Attempt to identify whether we are dealing with JUnit or TestNG.
-
visitField
public void visitField(org.apache.bcel.classfile.Field obj)
- Specified by:
visitField
in interfaceorg.apache.bcel.classfile.Visitor
- Overrides:
visitField
in classedu.umd.cs.findbugs.visitclass.BetterVisitor
-
sawOpcode
public void sawOpcode(int seen)
- Overrides:
sawOpcode
in classedu.umd.cs.findbugs.visitclass.DismantleBytecode
-
processAssert
private boolean processAssert()
-
ngProcessAssertEquals
private boolean ngProcessAssertEquals()
-
isFloatingPtPrimitive
private boolean isFloatingPtPrimitive(java.lang.String signature)
-
hasExpects
private boolean hasExpects()
-
hasFieldInjectorAnnotation
private boolean hasFieldInjectorAnnotation(edu.umd.cs.findbugs.OpcodeStack.Item item)
-
-