| 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.Instruction; 25 import org.apache.bcel.generic.InstructionHandle; 26 import org.apache.bcel.generic.PUTFIELD; 27 import org.apache.bcel.generic.PUTSTATIC; 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 Store extends FieldAccess { 41 47 public Store(String fieldVarName, String valueVarName) { 48 super(fieldVarName, valueVarName); 49 } 50 51 @Override  52 public MatchResult match(InstructionHandle handle, ConstantPoolGen cpg, 53 ValueNumberFrame before, ValueNumberFrame after, BindingSet bindingSet) throws DataflowAnalysisException { 54 55 Instruction ins = handle.getInstruction(); 56 FieldInstruction fieldIns; 57 Variable field; 58 59 if (ins instanceof PUTFIELD) { 61 fieldIns = (PUTFIELD) ins; 62 int numSlots = before.getNumSlots(); 63 ValueNumber ref = before.getValue(isLongOrDouble(fieldIns, cpg) 64 ? numSlots - 3 65 : numSlots - 2); 66 field = new FieldVariable(ref, fieldIns.getClassName(cpg), fieldIns.getFieldName(cpg), fieldIns.getSignature(cpg)); 67 } else if (ins instanceof PUTSTATIC) { 68 fieldIns = (PUTSTATIC) ins; 69 field = new FieldVariable(fieldIns.getClassName(cpg), fieldIns.getFieldName(cpg), fieldIns.getSignature(cpg)); 70 } else 71 return null; 72 73 Variable value = snarfFieldValue(fieldIns, cpg, before); 74 75 return checkConsistent(field, value, bindingSet); 76 } 77 } 78 79 | Popular Tags |