1 19 20 25 26 27 28 29 30 31 package soot.jimple.internal; 32 33 import soot.tagkit.*; 34 import soot.*; 35 import soot.jimple.*; 36 import soot.util.*; 37 import java.util.*; 38 import soot.baf.*; 39 40 public class JInvokeStmt extends AbstractStmt implements InvokeStmt 41 { 42 ValueBox invokeExprBox; 43 44 public JInvokeStmt(Value c) 45 { 46 this(Jimple.v().newInvokeExprBox(c)); 47 } 48 49 protected JInvokeStmt(ValueBox invokeExprBox) 50 { 51 this.invokeExprBox = invokeExprBox; 52 } 53 54 55 public Object clone() 56 { 57 return new JInvokeStmt(Jimple.cloneIfNecessary(getInvokeExpr())); 58 } 59 60 public boolean containsInvokeExpr() 61 { 62 return true; 63 } 64 65 public String toString() 66 { 67 return invokeExprBox.getValue().toString(); 68 } 69 70 public void toString(UnitPrinter up) { 71 invokeExprBox.toString(up); 72 } 73 74 public void setInvokeExpr(Value invokeExpr) 75 { 76 invokeExprBox.setValue(invokeExpr); 77 } 78 79 public InvokeExpr getInvokeExpr() 80 { 81 return (InvokeExpr) invokeExprBox.getValue(); 82 } 83 84 public ValueBox getInvokeExprBox() 85 { 86 return invokeExprBox; 87 } 88 89 public List getUseBoxes() 90 { 91 List list = new ArrayList(); 92 93 list.addAll(invokeExprBox.getValue().getUseBoxes()); 94 list.add(invokeExprBox); 95 96 return list; 97 } 98 99 public void apply(Switch sw) 100 { 101 ((StmtSwitch) sw).caseInvokeStmt(this); 102 } 103 104 public void convertToBaf(JimpleToBafContext context, List out) 105 { 106 InvokeExpr ie = (InvokeExpr) getInvokeExpr(); 107 108 context.setCurrentUnit(this); 109 110 ((ConvertToBaf) ie).convertToBaf(context, out); 111 if(!ie.getMethodRef().returnType().equals(VoidType.v())) 112 { 113 Unit u = Baf.v().newPopInst(ie.getMethodRef().returnType()); 114 out.add(u); 115 116 Iterator it = getTags().iterator(); 117 while(it.hasNext()) { 118 u.addTag((Tag) it.next()); 119 } 120 } 121 } 122 123 public boolean fallsThrough() {return true;} 124 public boolean branches() {return false;} 125 126 } 127 | Popular Tags |