| 1 19 20 package edu.umd.cs.findbugs.ba.bcp; 21 22 import org.apache.bcel.generic.ConstantPoolGen; 23 import org.apache.bcel.generic.FieldInstruction; 24 import org.apache.bcel.generic.GETFIELD; 25 import org.apache.bcel.generic.GETSTATIC; 26 import org.apache.bcel.generic.Instruction; 27 import org.apache.bcel.generic.InstructionHandle; 28 29 import edu.umd.cs.findbugs.ba.DataflowAnalysisException; 30 import edu.umd.cs.findbugs.ba.vna.ValueNumber; 31 import edu.umd.cs.findbugs.ba.vna.ValueNumberFrame; 32 33 40 public class Load extends FieldAccess { 41 42 48 public Load(String fieldVarName, String resultVarName) { 49 super(fieldVarName, resultVarName); 50 } 51 52 @Override  53 public MatchResult match(InstructionHandle handle, ConstantPoolGen cpg, 54 ValueNumberFrame before, ValueNumberFrame after, BindingSet bindingSet) throws DataflowAnalysisException { 55 56 Variable field; 57 Instruction ins = handle.getInstruction(); 58 FieldInstruction fieldIns; 59 60 if (ins instanceof GETFIELD) { 62 fieldIns = (GETFIELD) ins; 63 ValueNumber ref = before.getTopValue(); 64 field = new FieldVariable(ref, fieldIns.getClassName(cpg), fieldIns.getFieldName(cpg), fieldIns.getSignature(cpg)); 65 } else if (ins instanceof GETSTATIC) { 66 fieldIns = (GETSTATIC) ins; 67 field = new FieldVariable(fieldIns.getClassName(cpg), fieldIns.getFieldName(cpg), fieldIns.getSignature(cpg)); 68 } else 69 return null; 70 71 Variable result = snarfFieldValue(fieldIns, cpg, after); 72 73 return checkConsistent(field, result, bindingSet); 74 } 75 } 76 77 | Popular Tags |