edu.umd.cs.findbugs.ba.bcp

Class PatternElement

public abstract class PatternElement extends Object

A PatternElement is an element of a ByteCodePattern. It potentially matches some number of bytecode instructions.
Method Summary
abstract booleanacceptBranch(Edge edge, InstructionHandle source)
Return whether or not it is acceptable to take the given branch.
protected static BindingSetaddOrCheckDefinition(String varName, Variable variable, BindingSet bindingSet)
Add a variable definition to the given BindingSet, or if there is an existing definition, make sure it is consistent with the new definition.
booleanallowTrailingEdges()
Return whether or not this PatternElement may match trailing edges.
PatternElementdominatedBy(String dominatedBy)
Set the label of another pattern element whose first matched instruction must dominate the instruction(s) matched by this element.
StringgetDominatedBy()
Get the label of the pattern element whose first matched instruction must dominate the instruction(s) matched by this element.
StringgetLabel()
Get the label of this PatternElement.
PatternElementgetNext()
Get the next PatternElement.
PatternElementlabel(String label)
Set a label for this PatternElement.
static Variablelookup(String varName, BindingSet bindingSet)
Look up a variable definition in given BindingSet.
abstract MatchResultmatch(InstructionHandle handle, ConstantPoolGen cpg, ValueNumberFrame before, ValueNumberFrame after, BindingSet bindingSet)
Return whether or not this element matches the given instruction with the given Bindings in effect.
abstract intmaxOccur()
Return the maximum number of instructions this PatternElement must match in the ByteCodePattern.
abstract intminOccur()
Return the minimum number of instructions this PatternElement must match in the ByteCodePattern.
PatternElementsetAllowTrailingEdges(boolean allowTrailingEdges)
Set whether or not this PatternElement allows trailing edges to be matched.
voidsetIndex(int index)
Set the index.
voidsetNext(PatternElement patternElement)
Set the next PatternElement.

Method Detail

acceptBranch

public abstract boolean acceptBranch(Edge edge, InstructionHandle source)
Return whether or not it is acceptable to take the given branch.

Parameters: edge the Edge representing the branch source the source instruction of the branch

Returns: true if the Edge is acceptable, false if not

addOrCheckDefinition

protected static BindingSet addOrCheckDefinition(String varName, Variable variable, BindingSet bindingSet)
Add a variable definition to the given BindingSet, or if there is an existing definition, make sure it is consistent with the new definition.

Parameters: varName the name of the variable variable the Variable which should be added or checked for consistency bindingSet the existing set of bindings

Returns: the updated BindingSet (if the variable is consistent with the previous bindings), or null if the new variable is inconsistent with the previous bindings

allowTrailingEdges

public boolean allowTrailingEdges()
Return whether or not this PatternElement may match trailing edges.

dominatedBy

public PatternElement dominatedBy(String dominatedBy)
Set the label of another pattern element whose first matched instruction must dominate the instruction(s) matched by this element.

getDominatedBy

public String getDominatedBy()
Get the label of the pattern element whose first matched instruction must dominate the instruction(s) matched by this element.

getLabel

public String getLabel()
Get the label of this PatternElement.

Returns: the label, or null if the PatternElement is not labeled

getNext

public PatternElement getNext()
Get the next PatternElement.

label

public PatternElement label(String label)
Set a label for this PatternElement.

Parameters: label the label

Returns: this object

lookup

public static Variable lookup(String varName, BindingSet bindingSet)
Look up a variable definition in given BindingSet.

Parameters: varName the name of the variable bindingSet the BindingSet to look in

Returns: the Variable, or null if no Variable is bound to the name

match

public abstract MatchResult match(InstructionHandle handle, ConstantPoolGen cpg, ValueNumberFrame before, ValueNumberFrame after, BindingSet bindingSet)
Return whether or not this element matches the given instruction with the given Bindings in effect.

Parameters: handle the instruction cpg the ConstantPoolGen from the method before the ValueNumberFrame representing values in the Java stack frame just before the execution of the instruction after the ValueNumberFrame representing values in the Java stack frame just after the execution of the instruction bindingSet the set of Bindings

Returns: if the match is successful, returns a MatchResult with the PatternElement and BindingSet; if the match is not successful, returns null

maxOccur

public abstract int maxOccur()
Return the maximum number of instructions this PatternElement must match in the ByteCodePattern.

minOccur

public abstract int minOccur()
Return the minimum number of instructions this PatternElement must match in the ByteCodePattern.

setAllowTrailingEdges

public PatternElement setAllowTrailingEdges(boolean allowTrailingEdges)
Set whether or not this PatternElement allows trailing edges to be matched. By default, trailing edges may be matched. When this value is set to false, it ensures that the successor instruction must be in the same basic block.

Parameters: allowTrailingEdges true if trailing edges may be matched, false if trailing edges will never be matched

setIndex

public void setIndex(int index)
Set the index. This is just for debugging.

setNext

public void setNext(PatternElement patternElement)
Set the next PatternElement.
FindBugs™ is licenced under the LGPL. Copyright © 2006 University of Maryland.