@Override final public void caseInstanceFieldRef(InstanceFieldRef ifr) { if (pag.getOpts().field_based() || pag.getOpts().vta()) { setResult(pag.makeGlobalVarNode(ifr.getField(), ifr.getField().getType())); } else { setResult(pag.makeLocalFieldRefNode(ifr.getBase(), ifr.getBase().getType(), ifr.getField(), method)); } }
public void caseInstanceFieldRef(InstanceFieldRef v) { emitValue(v.getBase()); emit("getfield " + slashify(v.getFieldRef().declaringClass().getName()) + "/" + v.getFieldRef().name() + " " + jasminDescriptorOf(v.getFieldRef().type()), -1 + sizeOfType(v.getFieldRef().type())); }
private void initRefTypeLists(ValueBox box) { Value val = box.getValue(); Type opType = null; if (val instanceof InstanceFieldRef) { InstanceFieldRef ir = (InstanceFieldRef) val; opType = ir.getType(); if (opType instanceof RefType || opType instanceof ArrayType) { EquivalentValue eir = getEquivalentValue(ir); if (!refTypeInstFields.contains(eir)) { refTypeInstFields.add(eir); EquivalentValue eirbase = getEquivalentValue(ir.getBase()); if (!refTypeInstFieldBases.contains(eirbase)) { refTypeInstFieldBases.add(eirbase); } } } } else if (val instanceof StaticFieldRef) { StaticFieldRef sr = (StaticFieldRef) val; opType = sr.getType(); if (opType instanceof RefType || opType instanceof ArrayType) { EquivalentValue esr = getEquivalentValue(sr); if (!refTypeStaticFields.contains(esr)) { refTypeStaticFields.add(esr); } } } }
private void handleInstanceFieldRef(InstanceFieldRef ifr, Stmt stmt) { ifr.setBase(this.uv.visit(ifr.getBase(), ifr.getFieldRef().declaringClass().getType(), stmt)); }
InstanceFieldRef ref = (InstanceFieldRef) l; TypeNode base = hierarchy.typeNode(((Local) ref.getBase()).getType()); if (!base.hasAncestorOrSelf(hierarchy.typeNode(ref.getField().getDeclaringClass().getType()))) { if (fix) { ref.setBase(insertCast((Local) ref.getBase(), ref.getField().getDeclaringClass().getType(), stmt)); } else { error("Type Error(18)"); left = hierarchy.typeNode(ref.getField().getType()); } else if (l instanceof StaticFieldRef) { StaticFieldRef ref = (StaticFieldRef) l; InstanceFieldRef ref = (InstanceFieldRef) r; TypeNode baseType = hierarchy.typeNode(((Local) ref.getBase()).getType()); if (!baseType.hasAncestorOrSelf(hierarchy.typeNode(ref.getField().getDeclaringClass().getType()))) { if (fix) { ref.setBase(insertCast((Local) ref.getBase(), ref.getField().getDeclaringClass().getType(), stmt)); } else { error("Type Error(42)"); if (!left.hasDescendantOrSelf(hierarchy.typeNode(ref.getField().getType()))) { error("Type Error(43)");
private void handleFieldRef(FieldRef fieldRef, AnalysisInfo out) { if (fieldRef instanceof InstanceFieldRef) { InstanceFieldRef instanceFieldRef = (InstanceFieldRef) fieldRef; // here we know that the receiver must point to an object Value base = instanceFieldRef.getBase(); out.put(base, NON_NULL); } }
InstanceFieldRef ifr = (InstanceFieldRef) r; javafy(ifr.getBaseBox()); vb.setValue(new DInstanceFieldRef(ifr.getBase(), ifr.getFieldRef(), thisLocals));
/** * Replace 0 with null in the given unit. * * @param u * the unit where 0 will be replaced with null. */ protected void replaceWithNull(Unit u) { if (u instanceof IfStmt) { ConditionExpr expr = (ConditionExpr) ((IfStmt) u).getCondition(); if (isZeroComparison(expr)) { expr.setOp2(NullConstant.v()); } } else if (u instanceof AssignStmt) { AssignStmt s = (AssignStmt) u; Value v = s.getRightOp(); if ((v instanceof IntConstant && ((IntConstant) v).value == 0) || (v instanceof LongConstant && ((LongConstant) v).value == 0)) { // If this is a field assignment, double-check the type. We // might have a.f = 2 with a being a null candidate, but a.f // being an int. if (!(s.getLeftOp() instanceof InstanceFieldRef) || ((InstanceFieldRef) s.getLeftOp()).getFieldRef().type() instanceof RefLikeType) { s.setRightOp(NullConstant.v()); } } } }
InstanceFieldRef ref = (InstanceFieldRef) l; TypeNode base = hierarchy.typeNode(((Local) ref.getBase()).getType()); if (!base.hasAncestorOrSelf(hierarchy.typeNode(ref.getField().getDeclaringClass().getType()))) { if (fix) { ref.setBase(insertCast((Local) ref.getBase(), ref.getField().getDeclaringClass().getType(), stmt)); } else { error("Type Error(18)"); left = hierarchy.typeNode(ref.getField().getType()); } else if (l instanceof StaticFieldRef) { StaticFieldRef ref = (StaticFieldRef) l; InstanceFieldRef ref = (InstanceFieldRef) r; TypeNode baseType = hierarchy.typeNode(((Local) ref.getBase()).getType()); if (!baseType.hasAncestorOrSelf(hierarchy.typeNode(ref.getField().getDeclaringClass().getType()))) { if (fix) { ref.setBase(insertCast((Local) ref.getBase(), ref.getField().getDeclaringClass().getType(), stmt)); } else { error("Type Error(42)"); if (!left.hasDescendantOrSelf(hierarchy.typeNode(ref.getField().getType()))) { error("Type Error(43)");
private void handleFieldRef(FieldRef fieldRef, AnalysisInfo out) { if (fieldRef instanceof InstanceFieldRef) { InstanceFieldRef instanceFieldRef = (InstanceFieldRef) fieldRef; // here we know that the receiver must point to an object Value base = instanceFieldRef.getBase(); out.put(base, NON_NULL); } // but the referenced object might point to everything // out.put(fieldRef, TOP); }
condset.add(lhs); } else if (lhs instanceof InstanceFieldRef) { SootField field = ((InstanceFieldRef) lhs).getField(); HashSet<Value> related = fieldToFieldRef.get(field); if (related != null) {
InstanceFieldRef ref = (InstanceFieldRef) l; Type fieldType = ref.getFieldRef().type(); left = resolver.typeVariable(ref.getFieldRef().type()); InstanceFieldRef ref = (InstanceFieldRef) r; if (ref.getFieldRef().type() instanceof IntegerType) { right = resolver.typeVariable(ref.getFieldRef().type());
TypeNode base = hierarchy.typeNode(((Local) ref.getBase()).getType()); if(!base.hasAncestorOrSelf(hierarchy.typeNode(ref.getField().getDeclaringClass().getType()))) ref.setBase(insertCast((Local) ref.getBase(), ref.getField().getDeclaringClass().getType(), stmt)); left = hierarchy.typeNode(ref.getField().getType()); TypeNode baseType = hierarchy.typeNode(((Local) ref.getBase()).getType()); if(!baseType.hasAncestorOrSelf(hierarchy.typeNode(ref.getField().getDeclaringClass().getType()))) ref.setBase(insertCast((Local) ref.getBase(), ref.getField().getDeclaringClass().getType(), stmt)); if(!left.hasDescendantOrSelf(hierarchy.typeNode(ref.getField().getType())))
public void caseInstanceFieldRef(InstanceFieldRef ref) { result = result.add(mgr.RESOLVE_FIELD_ERRORS); result = result.add(mgr.NULL_POINTER_EXCEPTION); result = result.add(mightThrow(ref.getBase())); }
public void caseInstanceFieldRef(InstanceFieldRef v) { emitValue(v.getBase()); emitValue(rvalue); emit("putfield " + slashify(v.getFieldRef().declaringClass().getName()) + "/" + v.getFieldRef().name() + " " + jasminDescriptorOf(v.getFieldRef().type()), -1 + -sizeOfType(v.getFieldRef().type())); }
} else if (lv instanceof InstanceFieldRef) { InstanceFieldRef ifr = (InstanceFieldRef) lv; if (ifr.getBase() == thisLocal) // data flows into the field ref sink = ifr.getBase(); flowsToDataStructure = true; } else { sink = ifr.getBase(); flowsToDataStructure = true; } else if (rv instanceof InstanceFieldRef) { InstanceFieldRef ifr = (InstanceFieldRef) rv; if (ifr.getBase() == thisLocal) // data flows from the field ref sources.add(ifr.getBase()); } else { sources.add(ifr.getBase()); sources.add(rv); handleInnerField(rv); } else // data flows from the base's data structure sources.add(ifr.getBase()); interestingFlow = !ignoreThisDataType(ifr.getType());
SootField field = v.getField(); if (field == null) { exceptions.add(new UnitValidationException(unit, body, "Resolved field is null: " + fr.toString()));
} else if (l instanceof InstanceFieldRef && isObject(((InstanceFieldRef) l).getFieldRef().type())) { usedAsObject = true; if (usedAsObject) {