Package edu.umd.cs.findbugs.detect
Class InfiniteLoop
- java.lang.Object
-
- All Implemented Interfaces:
Detector,Priorities,org.apache.bcel.classfile.Visitor
public class InfiniteLoop extends OpcodeStackDetector
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static classInfiniteLoop.BackwardsBranch(package private) static classInfiniteLoop.ForwardConditionalBranch(package private) static classInfiniteLoop.Jump-
Nested classes/interfaces inherited from class edu.umd.cs.findbugs.bcel.OpcodeStackDetector
OpcodeStackDetector.WithCustomJumpInfo
-
-
Field Summary
Fields Modifier and Type Field Description (package private) java.util.HashSet<InfiniteLoop.BackwardsBranch>backwardBranches(package private) java.util.HashSet<InfiniteLoop.Jump>backwardReach(package private) BugReporterbugReporter(package private) static booleanDEBUG(package private) java.util.HashSet<InfiniteLoop.ForwardConditionalBranch>forwardConditionalBranches(package private) java.util.LinkedList<InfiniteLoop.Jump>forwardJumps(package private) java.util.ArrayList<java.util.BitSet>regModifiedAt-
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 InfiniteLoop(BugReporter bugReporter)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private voidaddBackwardsReach()(package private) voidaddForwardJump(int from, int to)private voidclearRegModified()private intconstantSince(OpcodeStack.Item item1)private booleanconstantSince(OpcodeStack.Item item1, int branchTarget)private intgetBackwardsReach(int target)(package private) intgetFurthestJump(int from)(package private) java.util.BitSetgetModifiedBitSet(int reg)private booleanisConstant(OpcodeStack.Item item0, InfiniteLoop.BackwardsBranch bb)private booleanisRegModified(int reg, int firstPC, int lastPC)private voidregModifiedAt(int reg, int pc)(package private) voidreportPossibleBug(BugInstance bug)voidsawBranchTo(int target)voidsawOpcode(int seen)By default, this method will not be called when stack is TOP.voidvisit(org.apache.bcel.classfile.Code obj)-
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, visitClassContext
-
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, 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 org.apache.bcel.classfile.Visitor
visitConstantDynamic, visitMethodParameter, visitModule, visitModuleExports, visitModuleMainClass, visitModuleOpens, visitModulePackages, visitModuleProvides, visitModuleRequires, visitNestHost, visitNestMembers, visitRecord, visitRecordComponent, visitStackMapType
-
-
-
-
Field Detail
-
regModifiedAt
java.util.ArrayList<java.util.BitSet> regModifiedAt
-
bugReporter
BugReporter bugReporter
-
backwardReach
java.util.HashSet<InfiniteLoop.Jump> backwardReach
-
backwardBranches
java.util.HashSet<InfiniteLoop.BackwardsBranch> backwardBranches
-
forwardConditionalBranches
java.util.HashSet<InfiniteLoop.ForwardConditionalBranch> forwardConditionalBranches
-
forwardJumps
java.util.LinkedList<InfiniteLoop.Jump> forwardJumps
-
DEBUG
static final boolean DEBUG
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
InfiniteLoop
public InfiniteLoop(BugReporter bugReporter)
-
-
Method Detail
-
getModifiedBitSet
@Nonnull java.util.BitSet getModifiedBitSet(int reg)
-
regModifiedAt
private void regModifiedAt(int reg, int pc)
-
clearRegModified
private void clearRegModified()
-
isRegModified
private boolean isRegModified(int reg, int firstPC, int lastPC)
-
addForwardJump
void addForwardJump(int from, int to)
-
getFurthestJump
int getFurthestJump(int from)
-
visit
public void visit(org.apache.bcel.classfile.Code obj)
- Overrides:
visitin classDismantleBytecode
-
isConstant
private boolean isConstant(OpcodeStack.Item item0, InfiniteLoop.BackwardsBranch bb)
-
sawBranchTo
public void sawBranchTo(int target)
- Overrides:
sawBranchToin classDismantleBytecode
-
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)
-
addBackwardsReach
private void addBackwardsReach()
-
getBackwardsReach
private int getBackwardsReach(int target)
-
constantSince
private boolean constantSince(OpcodeStack.Item item1, int branchTarget)
-
constantSince
private int constantSince(OpcodeStack.Item item1)
-
reportPossibleBug
void reportPossibleBug(BugInstance bug)
-
-