soot.javaToJimple
Class JimpleBodyBuilder

java.lang.Object
  extended by soot.javaToJimple.AbstractJimpleBodyBuilder
      extended by soot.javaToJimple.JimpleBodyBuilder
Direct Known Subclasses:
AnonInitBodyBuilder

public class JimpleBodyBuilder
extends AbstractJimpleBodyBuilder


Field Summary
protected  List<List<Stmt>> afterReturn
           
protected  List<List<Stmt>> beforeReturn
           
protected  Stack<polyglot.ast.Try> catchStack
           
protected  Stack<Stmt> condControlNoop
           
protected  Stack<Stmt> endControlNoop
           
protected  ArrayList<Trap> exceptionTable
           
protected  Stack<Stmt> falseNoop
           
protected  HashMap getThisMap
           
protected  HashMap<String,Stmt> labelBreakMap
           
protected  HashMap<String,Stmt> labelContinueMap
           
protected  HashMap<polyglot.ast.Stmt,Stmt> labelMap
           
protected  LocalGenerator lg
           
protected  HashMap<polyglot.util.IdentityKey,Local> localsMap
           
protected  Stack<Value> monitorStack
           
protected  Local outerClassParamLocal
           
protected  int paramRefCount
           
protected  Local specialThisLocal
           
protected  Stack<Stmt> trueNoop
           
protected  Stack<polyglot.ast.Try> tryStack
           
 
Fields inherited from class soot.javaToJimple.AbstractJimpleBodyBuilder
body
 
Constructor Summary
JimpleBodyBuilder()
           
 
Method Summary
protected  Value createAggressiveExpr(polyglot.ast.Expr expr, boolean reduceAggressively, boolean reverseCondIfNec)
          Aggressive Expression Creation make reduceAggressively true to not reduce all the way to a local
 Constant createConstant(polyglot.ast.Expr expr)
           
 JimpleBody createJimpleBody(polyglot.ast.Block block, List formals, SootMethod sootMethod)
          Jimple Body Creation
protected  Value createLHS(polyglot.ast.Expr expr)
          create LHS expressions
protected  void createStmt(polyglot.ast.Stmt stmt)
          Stmt creation
protected  Local generateLocal(polyglot.types.Type polyglotType)
          Extra Local Variables Generation
protected  Local generateLocal(Type sootType)
           
protected  Value getAssignLocal(polyglot.ast.Assign assign)
          Assign Expression Creation
protected  Value getAssignRightLocal(polyglot.ast.Assign assign, Local leftLocal)
           
protected  Value getBaseLocal(polyglot.ast.Receiver receiver)
           
protected  Constant getConstant(Type type, int val)
          Returns a needed constant given a type and val
protected  FieldRef getFieldRef(polyglot.ast.Field field)
          creates a field ref
protected  Value getSimpleAssignRightLocal(polyglot.ast.Assign assign)
           
protected  SootMethodRef getSootMethodRef(polyglot.ast.Call call)
           
protected  Local getThis(Type sootType)
           
protected  void handleFieldInits(ArrayList<polyglot.ast.FieldDecl> fieldInits)
           
protected  Local handlePrivateFieldAssignSet(polyglot.ast.Assign assign)
           
protected  Local handlePrivateFieldSet(polyglot.ast.Expr expr, Value right, Value base)
           
protected  Local handlePrivateFieldUnarySet(polyglot.ast.Unary unary)
           
protected  void handleStaticBlocks(ArrayList<polyglot.ast.Block> initializerBlocks)
           
protected  boolean needsAccessor(polyglot.ast.Expr expr)
           
protected  boolean needsAccessor(polyglot.types.MemberInstance inst)
          needs accessors: when field or meth is private and in some other class when field or meth is protected and in
protected  boolean needsOuterClassRef(polyglot.types.ClassType typeToInvoke)
           
 
Methods inherited from class soot.javaToJimple.AbstractJimpleBodyBuilder
base, base, ext, ext
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

beforeReturn

protected List<List<Stmt>> beforeReturn

afterReturn

protected List<List<Stmt>> afterReturn

exceptionTable

protected ArrayList<Trap> exceptionTable

endControlNoop

protected Stack<Stmt> endControlNoop

condControlNoop

protected Stack<Stmt> condControlNoop

monitorStack

protected Stack<Value> monitorStack

tryStack

protected Stack<polyglot.ast.Try> tryStack

catchStack

protected Stack<polyglot.ast.Try> catchStack

trueNoop

protected Stack<Stmt> trueNoop

falseNoop

protected Stack<Stmt> falseNoop

labelBreakMap

protected HashMap<String,Stmt> labelBreakMap

labelContinueMap

protected HashMap<String,Stmt> labelContinueMap

labelMap

protected HashMap<polyglot.ast.Stmt,Stmt> labelMap

localsMap

protected HashMap<polyglot.util.IdentityKey,Local> localsMap

getThisMap

protected HashMap getThisMap

specialThisLocal

protected Local specialThisLocal

outerClassParamLocal

protected Local outerClassParamLocal

paramRefCount

protected int paramRefCount

lg

protected LocalGenerator lg
Constructor Detail

JimpleBodyBuilder

public JimpleBodyBuilder()
Method Detail

createJimpleBody

public JimpleBody createJimpleBody(polyglot.ast.Block block,
                                   List formals,
                                   SootMethod sootMethod)
Jimple Body Creation

Overrides:
createJimpleBody in class AbstractJimpleBodyBuilder

handleFieldInits

protected void handleFieldInits(ArrayList<polyglot.ast.FieldDecl> fieldInits)

handleStaticBlocks

protected void handleStaticBlocks(ArrayList<polyglot.ast.Block> initializerBlocks)

createStmt

protected void createStmt(polyglot.ast.Stmt stmt)
Stmt creation

Overrides:
createStmt in class AbstractJimpleBodyBuilder

createConstant

public Constant createConstant(polyglot.ast.Expr expr)

createAggressiveExpr

protected Value createAggressiveExpr(polyglot.ast.Expr expr,
                                     boolean reduceAggressively,
                                     boolean reverseCondIfNec)
Aggressive Expression Creation make reduceAggressively true to not reduce all the way to a local

Overrides:
createAggressiveExpr in class AbstractJimpleBodyBuilder

handlePrivateFieldUnarySet

protected Local handlePrivateFieldUnarySet(polyglot.ast.Unary unary)
Overrides:
handlePrivateFieldUnarySet in class AbstractJimpleBodyBuilder

handlePrivateFieldAssignSet

protected Local handlePrivateFieldAssignSet(polyglot.ast.Assign assign)
Overrides:
handlePrivateFieldAssignSet in class AbstractJimpleBodyBuilder

handlePrivateFieldSet

protected Local handlePrivateFieldSet(polyglot.ast.Expr expr,
                                      Value right,
                                      Value base)
Overrides:
handlePrivateFieldSet in class AbstractJimpleBodyBuilder

getAssignRightLocal

protected Value getAssignRightLocal(polyglot.ast.Assign assign,
                                    Local leftLocal)
Overrides:
getAssignRightLocal in class AbstractJimpleBodyBuilder

getSimpleAssignRightLocal

protected Value getSimpleAssignRightLocal(polyglot.ast.Assign assign)
Overrides:
getSimpleAssignRightLocal in class AbstractJimpleBodyBuilder

getAssignLocal

protected Value getAssignLocal(polyglot.ast.Assign assign)
Assign Expression Creation


needsAccessor

protected boolean needsAccessor(polyglot.ast.Expr expr)
Overrides:
needsAccessor in class AbstractJimpleBodyBuilder

needsAccessor

protected boolean needsAccessor(polyglot.types.MemberInstance inst)
needs accessors: when field or meth is private and in some other class when field or meth is protected and in


getFieldRef

protected FieldRef getFieldRef(polyglot.ast.Field field)
creates a field ref

Overrides:
getFieldRef in class AbstractJimpleBodyBuilder

getConstant

protected Constant getConstant(Type type,
                               int val)
Returns a needed constant given a type and val

Overrides:
getConstant in class AbstractJimpleBodyBuilder

getThis

protected Local getThis(Type sootType)
Overrides:
getThis in class AbstractJimpleBodyBuilder

needsOuterClassRef

protected boolean needsOuterClassRef(polyglot.types.ClassType typeToInvoke)

getSootMethodRef

protected SootMethodRef getSootMethodRef(polyglot.ast.Call call)
Overrides:
getSootMethodRef in class AbstractJimpleBodyBuilder

getBaseLocal

protected Value getBaseLocal(polyglot.ast.Receiver receiver)
Overrides:
getBaseLocal in class AbstractJimpleBodyBuilder

createLHS

protected Value createLHS(polyglot.ast.Expr expr)
create LHS expressions

Overrides:
createLHS in class AbstractJimpleBodyBuilder

generateLocal

protected Local generateLocal(polyglot.types.Type polyglotType)
Extra Local Variables Generation

Overrides:
generateLocal in class AbstractJimpleBodyBuilder

generateLocal

protected Local generateLocal(Type sootType)
Overrides:
generateLocal in class AbstractJimpleBodyBuilder