Package edu.umd.cs.findbugs.detect
Class SwitchFallthrough
- java.lang.Object
-
- All Implemented Interfaces:
Detector,Priorities,StatelessDetector,java.lang.Cloneable,org.apache.bcel.classfile.Visitor
public class SwitchFallthrough extends OpcodeStackDetector implements StatelessDetector
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class edu.umd.cs.findbugs.bcel.OpcodeStackDetector
OpcodeStackDetector.WithCustomJumpInfo
-
-
Field Summary
Fields Modifier and Type Field Description private intbiggestJumpTargetprivate BugAccumulatorbugAccumulatorprivate LocalVariableAnnotationdeadStoreprivate static booleanDEBUG(package private) XClassenumType(package private) java.util.Collection<SourceLineAnnotation>found(package private) booleanjustSawHashcodeprivate intlastPCprivate static booleanLOOK_IN_SOURCE_FOR_FALLTHRU_COMMENTprivate java.util.Set<XField>potentiallyDeadFieldsprivate java.util.Set<XField>potentiallyDeadFieldsFromBeforeFallthroughprivate java.util.BitSetpotentiallyDeadStoresprivate java.util.BitSetpotentiallyDeadStoresFromBeforeFallthroughprivate intpriorityprivate booleanreachableprivate SwitchHandlerswitchHdlr-
Fields inherited from class edu.umd.cs.findbugs.bcel.OpcodeStackDetector
stack
-
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 SwitchFallthrough(BugReporter bugReporter)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private voidclearAllDeadStores()private voidfoundSwitchNoDefault(SourceLineAnnotation s)private booleanhasFallThruComment(int startPC, int endPC)booleanisBranchTargetOutsideOfNextCase()A GOTO might correspond to abreakor to a do/while/for loop.voidsawOpcode(int seen)By default, this method will not be called when stack is TOP.voidvisit(org.apache.bcel.classfile.Code obj)voidvisitClassContext(ClassContext classContext)Visit the ClassContext for a class which should be analyzed for instances of bug patterns.-
Methods inherited from class edu.umd.cs.findbugs.bcel.OpcodeStackDetector
afterOpcode, beforeOpcode, getStack, isUsingCustomUserValue, visitCode
-
Methods inherited from class edu.umd.cs.findbugs.BytecodeScanningDetector
getClassContext, report, shouldVisitCode
-
Methods inherited from class edu.umd.cs.findbugs.visitclass.DismantleBytecode
areOppositeBranches, atCatchBlock, 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
-
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 edu.umd.cs.findbugs.StatelessDetector
clone
-
Methods inherited from interface org.apache.bcel.classfile.Visitor
visitConstantDynamic, visitMethodParameter, visitModule, visitModuleExports, visitModuleMainClass, visitModuleOpens, visitModulePackages, visitModuleProvides, visitModuleRequires, visitNestHost, visitNestMembers, visitRecord, visitRecordComponent, visitStackMapType
-
-
-
-
Field Detail
-
DEBUG
private static final boolean DEBUG
-
LOOK_IN_SOURCE_FOR_FALLTHRU_COMMENT
private static final boolean LOOK_IN_SOURCE_FOR_FALLTHRU_COMMENT
-
switchHdlr
private SwitchHandler switchHdlr
-
reachable
private boolean reachable
-
bugAccumulator
private final BugAccumulator bugAccumulator
-
lastPC
private int lastPC
-
biggestJumpTarget
private int biggestJumpTarget
-
potentiallyDeadStores
private final java.util.BitSet potentiallyDeadStores
-
potentiallyDeadFields
private final java.util.Set<XField> potentiallyDeadFields
-
potentiallyDeadStoresFromBeforeFallthrough
private java.util.BitSet potentiallyDeadStoresFromBeforeFallthrough
-
potentiallyDeadFieldsFromBeforeFallthrough
private java.util.Set<XField> potentiallyDeadFieldsFromBeforeFallthrough
-
deadStore
private LocalVariableAnnotation deadStore
-
priority
private int priority
-
found
java.util.Collection<SourceLineAnnotation> found
-
enumType
XClass enumType
-
justSawHashcode
boolean justSawHashcode
-
-
Constructor Detail
-
SwitchFallthrough
public SwitchFallthrough(BugReporter bugReporter)
-
-
Method Detail
-
visitClassContext
public void visitClassContext(ClassContext classContext)
Description copied from interface:DetectorVisit the ClassContext for a class which should be analyzed for instances of bug patterns.- Specified by:
visitClassContextin interfaceDetector- Overrides:
visitClassContextin classBytecodeScanningDetector- Parameters:
classContext- the ClassContext
-
visit
public void visit(org.apache.bcel.classfile.Code obj)
- Overrides:
visitin classDismantleBytecode
-
foundSwitchNoDefault
private void foundSwitchNoDefault(SourceLineAnnotation s)
-
sawOpcode
public void sawOpcode(int seen)
Description copied from class:OpcodeStackDetectorBy default, this method will not be called when stack is TOP. To change this behavior, override
#beforeOpcode(int)and change to return true even if stack is TOP.see Using FindBugs for Research to learn lattice and what TOP means.
- Specified by:
sawOpcodein classOpcodeStackDetector- See Also:
OpcodeStackDetector.beforeOpcode(int)
-
isBranchTargetOutsideOfNextCase
public boolean isBranchTargetOutsideOfNextCase()
A GOTO might correspond to abreakor to a do/while/for loop. For loops the branch target will be before the offset of the next case, for breaks we're exiting the switch so the target is actually even after the end of the last case. The branch target might be before the switch when we're inside another structure such as a loop.- Returns:
trueif:- the branch target is a GOTO instruction as it is the case for a no-op (empty block) in an arrow-syntax switch
- the branch target is after the next switch offset as it is the case for a switch break
- or the branch target is before the PC corresponding to the switch instruction
- or there's no next switch case (as it is the case for the default case)
-
clearAllDeadStores
private void clearAllDeadStores()
-
hasFallThruComment
private boolean hasFallThruComment(int startPC, int endPC)
-
-