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 class
InfiniteLoop.BackwardsBranch
(package private) static class
InfiniteLoop.ForwardConditionalBranch
(package private) static class
InfiniteLoop.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) BugReporter
bugReporter
(package private) static boolean
DEBUG
(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 void
addBackwardsReach()
(package private) void
addForwardJump(int from, int to)
private void
clearRegModified()
private int
constantSince(OpcodeStack.Item item1)
private boolean
constantSince(OpcodeStack.Item item1, int branchTarget)
private int
getBackwardsReach(int target)
(package private) int
getFurthestJump(int from)
(package private) java.util.BitSet
getModifiedBitSet(int reg)
private boolean
isConstant(OpcodeStack.Item item0, InfiniteLoop.BackwardsBranch bb)
private boolean
isRegModified(int reg, int firstPC, int lastPC)
private void
regModifiedAt(int reg, int pc)
(package private) void
reportPossibleBug(BugInstance bug)
void
sawBranchTo(int target)
void
sawOpcode(int seen)
By default, this method will not be called when stack is TOP.void
visit(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
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
-
-
-
-
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:
visit
in classDismantleBytecode
-
isConstant
private boolean isConstant(OpcodeStack.Item item0, InfiniteLoop.BackwardsBranch bb)
-
sawBranchTo
public void sawBranchTo(int target)
- Overrides:
sawBranchTo
in classDismantleBytecode
-
sawOpcode
public void sawOpcode(int seen)
Description copied from class:OpcodeStackDetector
By 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:
sawOpcode
in 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)
-
-