Package edu.umd.cs.findbugs.ba.bcp
Class PatternMatcher.State
- java.lang.Object
-
- edu.umd.cs.findbugs.ba.bcp.PatternMatcher.State
-
- Enclosing class:
- PatternMatcher
private class PatternMatcher.State extends java.lang.ObjectObject representing the current state of the matching algorithm. Provides convenient methods to implement the various steps of the algorithm.
-
-
Field Summary
Fields Modifier and Type Field Description private BasicBlockbasicBlockprivate BindingSetbindingSetprivate booleancanForkprivate PatternElementMatchcurrentMatchprivate BasicBlock.InstructionIteratorinstructionIteratorprivate intmatchCountprivate intparentPathprivate intpathprivate PatternElementpatternElement
-
Constructor Summary
Constructors Constructor Description State(BasicBlock basicBlock, BasicBlock.InstructionIterator instructionIterator, PatternElement patternElement)Constructor.State(PatternMatcher.State parent, BasicBlock basicBlock, BasicBlock.InstructionIterator instructionIterator, PatternElement patternElement, int matchCount, PatternElementMatch currentMatch, BindingSet bindingSet, boolean canFork)Constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description PatternMatcher.StateadvanceToNextElement()Try to produce a new state that will finish matching the current element and start matching the next element.PatternMatcher.StateadvanceToSuccessor(Edge edge, MatchResult matchResult)Return a new State for continuing the overall pattern match in a successor basic block.booleancanAdvanceToNextBasicBlock()Determine if it is possible to continue matching in a successor basic block.booleancurrentElementCanContinue()Determine if the current pattern element can continue to match instructions.java.lang.Iterable<PatternMatcher.State>dominatedInstructionStateIterable()Return Iterator over states representing dominated instructions that continue the match.PatternMatcher.Stateduplicate()Make an exact copy of this object.BasicBlockgetBasicBlock()Get basic block.PatternElementMatchgetCurrentMatch()Get current pattern element match.org.apache.bcel.generic.InstructionHandlegetLastMatchedInstruction()Get most recently matched instruction.PatternElementgetPatternElement()Get current pattern element.ByteCodePatternMatchgetResult()Get a ByteCodePatternMatch representing the complete match.booleanisComplete()Determine if the match is complete.booleanlookForDominatedInstruction()Determine if we need to look for a dominated instruction at this point in the search.private MatchResultmatchLocation(Location location)MatchResultmatchNextInBasicBlock()Match current pattern element with next instruction in basic block.booleanmoreInstructionsInBasicBlock()Determine if there are more instructions in the same basic block.java.lang.StringtoString()
-
-
-
Field Detail
-
basicBlock
private final BasicBlock basicBlock
-
instructionIterator
private final BasicBlock.InstructionIterator instructionIterator
-
patternElement
private final PatternElement patternElement
-
matchCount
private int matchCount
-
currentMatch
private PatternElementMatch currentMatch
-
bindingSet
private BindingSet bindingSet
-
canFork
private boolean canFork
-
parentPath
private final int parentPath
-
path
private final int path
-
-
Constructor Detail
-
State
public State(BasicBlock basicBlock, BasicBlock.InstructionIterator instructionIterator, PatternElement patternElement)
Constructor. Builds the start state.- Parameters:
basicBlock- the initial basic blockinstructionIterator- the instructionIterator indicating where to start matchingpatternElement- the first PatternElement of the pattern
-
State
public State(@Nullable PatternMatcher.State parent, BasicBlock basicBlock, BasicBlock.InstructionIterator instructionIterator, PatternElement patternElement, int matchCount, @Nullable PatternElementMatch currentMatch, @Nullable BindingSet bindingSet, boolean canFork)Constructor.
-
-
Method Detail
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
duplicate
public PatternMatcher.State duplicate()
Make an exact copy of this object.
-
getBasicBlock
public BasicBlock getBasicBlock()
Get basic block.
-
getPatternElement
public PatternElement getPatternElement()
Get current pattern element.
-
getCurrentMatch
public PatternElementMatch getCurrentMatch()
Get current pattern element match.
-
isComplete
public boolean isComplete()
Determine if the match is complete.
-
getResult
public ByteCodePatternMatch getResult()
Get a ByteCodePatternMatch representing the complete match.
-
advanceToNextElement
public PatternMatcher.State advanceToNextElement()
Try to produce a new state that will finish matching the current element and start matching the next element. Returns null if the current element is not complete.
-
currentElementCanContinue
public boolean currentElementCanContinue()
Determine if the current pattern element can continue to match instructions.
-
moreInstructionsInBasicBlock
public boolean moreInstructionsInBasicBlock()
Determine if there are more instructions in the same basic block.
-
matchNextInBasicBlock
public MatchResult matchNextInBasicBlock() throws DataflowAnalysisException
Match current pattern element with next instruction in basic block. Returns MatchResult if match succeeds, null otherwise.- Throws:
DataflowAnalysisException
-
canAdvanceToNextBasicBlock
public boolean canAdvanceToNextBasicBlock()
Determine if it is possible to continue matching in a successor basic block.
-
getLastMatchedInstruction
public org.apache.bcel.generic.InstructionHandle getLastMatchedInstruction()
Get most recently matched instruction.
-
advanceToSuccessor
public PatternMatcher.State advanceToSuccessor(Edge edge, MatchResult matchResult)
Return a new State for continuing the overall pattern match in a successor basic block.- Parameters:
edge- the Edge leading to the successor basic blockmatchResult- a MatchResult representing the match of the last instruction in the predecessor block; null if none
-
lookForDominatedInstruction
public boolean lookForDominatedInstruction()
Determine if we need to look for a dominated instruction at this point in the search.
-
dominatedInstructionStateIterable
public java.lang.Iterable<PatternMatcher.State> dominatedInstructionStateIterable() throws DataflowAnalysisException
Return Iterator over states representing dominated instructions that continue the match.- Throws:
DataflowAnalysisException
-
matchLocation
private MatchResult matchLocation(Location location) throws DataflowAnalysisException
- Throws:
DataflowAnalysisException
-
-