@OpcodeStack.CustomUserValue
public class SillynessPotPourri
extends edu.umd.cs.findbugs.BytecodeScanningDetector
Modifier and Type | Class and Description |
---|---|
(package private) static class |
SillynessPotPourri.SPPMethod |
(package private) static class |
SillynessPotPourri.SPPUserValue |
Modifier and Type | Field and Description |
---|---|
private static java.util.regex.Pattern |
APPEND_PATTERN |
private java.util.Map<java.lang.Integer,java.util.BitSet> |
branchTargets
branch targets, to a set of branch instructions
|
private edu.umd.cs.findbugs.BugReporter |
bugReporter |
private static org.apache.bcel.classfile.JavaClass |
calendarClass |
private static java.util.Set<java.lang.String> |
collectionInterfaces |
private boolean |
isInterface |
private boolean |
lastIfEqWasBoolean |
private boolean |
lastLoadWasString |
private int |
lastOpcode |
private int[] |
lastPCs |
private int |
lastReg |
private static java.lang.String |
LITERAL |
private static java.util.Map<QMethod,java.lang.Integer> |
methodsThatAreSillyOnStringLiterals |
private static java.util.Set<java.lang.String> |
oddMissingEqualsClasses |
private edu.umd.cs.findbugs.OpcodeStack |
stack |
private java.util.Set<java.lang.String> |
staticConstants |
private java.util.Set<java.lang.String> |
toStringClasses |
private java.util.Map<SillynessPotPourri.SPPUserValue,java.lang.Integer> |
trimLocations |
codeBytes, lineNumberTable, M_BR, M_CP, M_INT, M_PAD, M_R, M_UINT
EXP_PRIORITY, HIGH_PRIORITY, IGNORE_PRIORITY, LOW_PRIORITY, NORMAL_PRIORITY
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 and Description |
---|
SillynessPotPourri(edu.umd.cs.findbugs.BugReporter bugReporter)
constructs a SPP detector given the reporter to report bugs on
|
Modifier and Type | Method and Description |
---|---|
private void |
bitSetSilliness(java.lang.String methodName) |
private void |
booleanSilliness() |
private void |
calendarBeforeAfterSilliness() |
private void |
checkApproximationsOfMathConstants() |
private void |
checkCompareToNaNDouble() |
private void |
checkCompareToNaNFloat() |
private void |
checkEqualsStringBufferLength() |
private void |
checkForArrayParameter(edu.umd.cs.findbugs.OpcodeStack.Item item) |
private void |
checkForEmptyStringAndNullChecks(int seen) |
private void |
checkForTrim(edu.umd.cs.findbugs.OpcodeStack.Item item) |
private void |
checkForUselessTernaryReturn() |
private void |
checkImmutableUsageOfStringBuilder(int reg) |
private void |
checkImproperToCharArrayUse() |
private void |
checkNotEqualsStringBuilderLength() |
private void |
checkNullAndInstanceOf() |
private void |
checkSizeEquals0() |
private void |
checkStutterdAssignment(int seen,
int reg) |
private void |
checkTrimDupStore()
determines whether this operation is storing the result of a trim() call, where the trimmed string was duplicated on the stack.
|
private void |
checkTrimLocations() |
private void |
defaultToStringSilliness() |
private void |
equalsSilliness(java.lang.String className) |
private SillynessPotPourri.SPPUserValue |
getTrimUserValue() |
private boolean |
hasToString(org.apache.bcel.classfile.JavaClass cls) |
private static boolean |
isBranchByteCode(int seen) |
private boolean |
looksLikeStaticFieldValue(java.lang.String constant) |
private void |
propertiesSilliness(java.lang.String methodName) |
private SillynessPotPourri.SPPUserValue |
sawIntConst() |
private SillynessPotPourri.SPPUserValue |
sawInvokeInterface() |
private void |
sawInvokeSpecial() |
private SillynessPotPourri.SPPUserValue |
sawInvokeStatic() |
private SillynessPotPourri.SPPUserValue |
sawInvokeVirtual() |
private void |
sawLoad(int seen) |
void |
sawOpcode(int seen)
implements the visitor to look for various silly bugs
|
private SillynessPotPourri.SPPUserValue |
stringBufferSilliness(java.lang.String methodName) |
private SillynessPotPourri.SPPUserValue |
stringSilliness(java.lang.String methodName,
java.lang.String signature) |
void |
visitClassContext(edu.umd.cs.findbugs.ba.ClassContext classContext) |
void |
visitCode(org.apache.bcel.classfile.Code obj)
implements the visitor to reset the opcode stack
|
void |
visitField(org.apache.bcel.classfile.Field field) |
getClassContext, report, shouldVisitCode
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
getAnnotationParameterAsString, getAnnotationParameterAsStringArray, visitAnnotation, visitAnnotation, visitParameterAnnotation, visitParameterAnnotation, visitSyntheticParameterAnnotation
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
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
private static final java.util.Set<java.lang.String> collectionInterfaces
private static final java.util.Set<java.lang.String> oddMissingEqualsClasses
private static final java.lang.String LITERAL
private static final java.util.regex.Pattern APPEND_PATTERN
private static org.apache.bcel.classfile.JavaClass calendarClass
private static java.util.Map<QMethod,java.lang.Integer> methodsThatAreSillyOnStringLiterals
private final edu.umd.cs.findbugs.BugReporter bugReporter
private final java.util.Set<java.lang.String> toStringClasses
private edu.umd.cs.findbugs.OpcodeStack stack
private int[] lastPCs
private int lastOpcode
private int lastReg
private boolean lastIfEqWasBoolean
private boolean lastLoadWasString
private java.util.Map<java.lang.Integer,java.util.BitSet> branchTargets
private java.util.Set<java.lang.String> staticConstants
private java.util.Map<SillynessPotPourri.SPPUserValue,java.lang.Integer> trimLocations
private boolean isInterface
public SillynessPotPourri(edu.umd.cs.findbugs.BugReporter bugReporter)
bugReporter
- the sync of bug reportspublic void visitField(org.apache.bcel.classfile.Field field)
visitField
in interface org.apache.bcel.classfile.Visitor
visitField
in class edu.umd.cs.findbugs.visitclass.BetterVisitor
public void visitClassContext(edu.umd.cs.findbugs.ba.ClassContext classContext)
visitClassContext
in interface edu.umd.cs.findbugs.Detector
visitClassContext
in class edu.umd.cs.findbugs.BytecodeScanningDetector
public void visitCode(org.apache.bcel.classfile.Code obj)
visitCode
in interface org.apache.bcel.classfile.Visitor
visitCode
in class edu.umd.cs.findbugs.visitclass.PreorderVisitor
obj
- the context object for the currently parsed Codepublic void sawOpcode(int seen)
sawOpcode
in class edu.umd.cs.findbugs.visitclass.DismantleBytecode
seen
- the opcode of the currently parsed instructionprivate void checkImproperToCharArrayUse()
@Nullable private SillynessPotPourri.SPPUserValue sawIntConst()
private void sawLoad(int seen)
private void checkTrimDupStore()
private void checkStutterdAssignment(int seen, int reg)
private void checkImmutableUsageOfStringBuilder(int reg)
private void checkCompareToNaNFloat()
private void checkCompareToNaNDouble()
private void checkApproximationsOfMathConstants()
private void checkForUselessTernaryReturn()
private void checkEqualsStringBufferLength()
private void checkNotEqualsStringBuilderLength()
private void checkNullAndInstanceOf()
private void checkSizeEquals0()
private void checkForEmptyStringAndNullChecks(int seen)
private static boolean isBranchByteCode(int seen)
private SillynessPotPourri.SPPUserValue sawInvokeStatic()
private void checkForArrayParameter(edu.umd.cs.findbugs.OpcodeStack.Item item)
@Nullable private SillynessPotPourri.SPPUserValue sawInvokeVirtual() throws java.lang.ClassNotFoundException
java.lang.ClassNotFoundException
private void bitSetSilliness(java.lang.String methodName)
@Nullable private SillynessPotPourri.SPPUserValue stringBufferSilliness(java.lang.String methodName)
private SillynessPotPourri.SPPUserValue stringSilliness(java.lang.String methodName, java.lang.String signature)
private void checkForTrim(edu.umd.cs.findbugs.OpcodeStack.Item item)
private void equalsSilliness(java.lang.String className)
private void booleanSilliness()
private void calendarBeforeAfterSilliness()
private void defaultToStringSilliness() throws java.lang.ClassNotFoundException
java.lang.ClassNotFoundException
private void propertiesSilliness(java.lang.String methodName)
private SillynessPotPourri.SPPUserValue sawInvokeInterface()
private void sawInvokeSpecial()
private boolean looksLikeStaticFieldValue(java.lang.String constant)
private boolean hasToString(org.apache.bcel.classfile.JavaClass cls) throws java.lang.ClassNotFoundException
java.lang.ClassNotFoundException
@Nullable private SillynessPotPourri.SPPUserValue getTrimUserValue()
private void checkTrimLocations()
Copyright © 2005-2018 MeBigFatGuy.com. All Rights Reserved.