Package dk.brics.string.intermediate

Examples of dk.brics.string.intermediate.FieldAssignment


  public HandleFieldAssignment(Method[] methods) {
    for (Method m : methods) {
      LinkedList<FieldAssignment> assigns = new LinkedList<FieldAssignment>();
      for (Statement s : m.getStatements()) {
        if (s instanceof FieldAssignment) {
          FieldAssignment assign = (FieldAssignment)s;
          if (assign.getTo().getType().mightBeUsefulMutable()) {
            assigns.add(assign);
          }
        }
      }
      if (!assigns.isEmpty()) {
        for (Return r : m.getReturns()) {
          LinkedList<FieldAssignment> copiedAssigns = new LinkedList<FieldAssignment>();
          for (FieldAssignment assign : assigns) {
            FieldAssignment copiedAssign = new FieldAssignment(assign.getField(), assign.getFrom());
            m.addStatement(copiedAssign);
            if (!copiedAssigns.isEmpty()) {
              FieldAssignment pred = copiedAssigns.getLast();
              pred.addSucc(copiedAssign);
            }
            copiedAssigns.add(copiedAssign);
          }
          if (!copiedAssigns.isEmpty()) {
            HashMap<Integer,Statement> predsMap = new HashMap<Integer,Statement>();
            int counter = 0;
            for (Statement pred : r.getPreds()) {
              predsMap.put(counter, pred);
              counter++;
            }
            Statement first = copiedAssigns.getFirst();
            for (int i=0; i<predsMap.size(); i++) {
              Statement pred = predsMap.get(i);
              pred.getSuccs().remove(r);
              pred.addSucc(first);
              r.getPreds().remove(pred);
            }
            copiedAssigns.getLast().addSucc(r);
          }
        }
View Full Code Here


    public boolean translateFieldAssignment(FieldRef leftSide, Variable rightSide, IntermediateFactory factory) {
        if (!leftSide.getField().getDeclaringClass().isApplicationClass()) {
            return false;
        }
       
        factory.addStatement(new FieldAssignment(factory.getField(leftSide.getField()), rightSide));
       
        return true;
    }
View Full Code Here

            for (SootField field : ac.getFields()) {
                // String fields should be assigned to "null" because they are
                // exempt from the
                // null-pointer analysis we use for other objects
                if (field.getType().equals(RefType.v("java.lang.String"))) {
                    FieldAssignment assignment = new FieldAssignment(
                            variableManager.getField(field), nullVar);
                    cfg.addStatement(assignment);
                }

                // corrupt externally visible fields
                if (ext.isExternallyVisibleField(field)) {
                    VariableType type = fromSootType(field
                            .getType());

                    if (type == VariableType.NONE)
                        continue;

                    Variable fieldInit;

                    switch (type) {
                    case OBJECT:
                    case STRING:
                    case PRIMITIVE:
                        fieldInit = anyVar;
                        break;

                    case STRINGBUFFER: {
                        fieldInit = application.createVariable(VariableType.STRINGBUFFER);
                        Statement s = new StringBufferCorrupt(fieldInit);
                        cfg.addStatement(s);
                        break;
                    }

                    case ARRAY: {
                        fieldInit = application.createVariable(VariableType.ARRAY);
                        Statement s = new ArrayCorrupt(fieldInit);
                        cfg.addStatement(s);
                        break;
                    }
                    default:
                        throw new RuntimeException("Unknown field type " + type);
                    }// switch

                    FieldAssignment assignment = new FieldAssignment(variableManager.getField(field), fieldInit);
                    cfg.addStatement(assignment);
                }
            }
        }
       
View Full Code Here

TOP

Related Classes of dk.brics.string.intermediate.FieldAssignment

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.