1 20 21 26 27 28 29 30 31 32 package soot.grimp.internal; 33 34 import soot.*; 35 import soot.grimp.*; 36 import soot.jimple.internal.*; 37 import soot.jimple.*; 38 import soot.grimp.*; 39 import soot.jimple.internal.*; 40 import soot.util.*; 41 import java.util.*; 42 43 public class GVirtualInvokeExpr extends AbstractVirtualInvokeExpr 44 implements Precedence 45 { 46 public GVirtualInvokeExpr(Value base, SootMethodRef methodRef, List args) 47 { 48 super(Grimp.v().newObjExprBox(base), methodRef, 49 new ValueBox[args.size()]); 50 51 for(int i = 0; i < args.size(); i++) 52 this.argBoxes[i] = Grimp.v().newExprBox((Value) args.get(i)); 53 } 54 55 56 public int getPrecedence() { return 950; } 57 58 private String toString(Value op, String opString, String rightString) 59 { 60 String leftOp = opString; 61 62 if (getBase() instanceof Precedence && 63 ((Precedence)getBase()).getPrecedence() < getPrecedence()) 64 leftOp = "(" + leftOp + ")"; 65 return leftOp + rightString; 66 } 67 68 public String toString() 69 { 70 StringBuffer buffer = new StringBuffer (); 71 72 buffer.append("." + methodRef.getSignature() + "("); 73 74 for(int i = 0; i < argBoxes.length; i++) 75 { 76 if(i != 0) 77 buffer.append(", "); 78 79 buffer.append(argBoxes[i].getValue().toString()); 80 } 81 82 buffer.append(")"); 83 84 return toString(getBase(), getBase().toString(), 85 buffer.toString()); 86 } 87 88 public void toString(UnitPrinter up) 89 { 90 if( PrecedenceTest.needsBrackets( baseBox, this ) ) up.literal("("); 91 baseBox.toString(up); 92 if( PrecedenceTest.needsBrackets( baseBox, this ) ) up.literal(")"); 93 up.literal("."); 94 up.methodRef(methodRef); 95 up.literal("("); 96 97 for(int i = 0; i < argBoxes.length; i++) 98 { 99 if(i != 0) 100 up.literal(", "); 101 102 argBoxes[i].toString(up); 103 } 104 105 up.literal(")"); 106 } 107 108 109 public Object clone() 110 { 111 ArrayList clonedArgs = new ArrayList(getArgCount()); 112 113 for(int i = 0; i < getArgCount(); i++) { 114 clonedArgs.add(i, Grimp.cloneIfNecessary(getArg(i))); 115 } 116 117 return new GVirtualInvokeExpr(Grimp.cloneIfNecessary(getBase()), methodRef, 118 clonedArgs); 119 } 120 121 } 122 123 | Popular Tags |