1 19 20 package edu.umd.cs.findbugs.ba.bcp; 21 22 import org.apache.bcel.generic.ConstantPoolGen; 23 import org.apache.bcel.generic.IFNONNULL; 24 import org.apache.bcel.generic.IFNULL; 25 import org.apache.bcel.generic.Instruction; 26 import org.apache.bcel.generic.InstructionHandle; 27 28 import edu.umd.cs.findbugs.ba.DataflowAnalysisException; 29 import edu.umd.cs.findbugs.ba.Edge; 30 import edu.umd.cs.findbugs.ba.EdgeTypes; 31 import edu.umd.cs.findbugs.ba.vna.ValueNumberFrame; 32 33 public class IfNull extends OneVariableInstruction implements EdgeTypes { 34 35 public IfNull(String varName) { 36 super(varName); 37 } 38 39 @Override 40 public MatchResult match(InstructionHandle handle, ConstantPoolGen cpg, 41 ValueNumberFrame before, ValueNumberFrame after, BindingSet bindingSet) throws DataflowAnalysisException { 42 43 Instruction ins = handle.getInstruction(); 45 if (!(ins instanceof IFNULL || ins instanceof IFNONNULL)) 46 return null; 47 48 LocalVariable ref = new LocalVariable(before.getTopValue()); 51 return addOrCheckDefinition(ref, bindingSet); 52 } 53 54 @Override 55 public boolean acceptBranch(Edge edge, InstructionHandle source) { 56 boolean isIfNull = (source.getInstruction() instanceof IFNULL); 57 return edge.getType() == (isIfNull ? IFCMP_EDGE : FALL_THROUGH_EDGE); 58 } 59 } 60 61 | Popular Tags |