helpful progress reporting
[IRC.git] / Robust / src / IR / Tree / MethodInvokeNode.java
1 package IR.Tree;
2 import java.util.Vector;
3 import IR.NameDescriptor;
4 import IR.MethodDescriptor;
5 import IR.TypeDescriptor;
6
7 public class MethodInvokeNode extends ExpressionNode {
8   Vector argumentlist;
9   String methodid;
10   NameDescriptor basename;
11   ExpressionNode en;
12   MethodDescriptor md;
13
14   public MethodInvokeNode(NameDescriptor name) {
15     methodid=name.getIdentifier();
16     if (name.getBase()!=null) {
17       basename=name.getBase();
18     }
19     argumentlist=new Vector();
20     en=null;
21     md=null;
22   }
23
24   public MethodInvokeNode(String methodid, ExpressionNode exp) {
25     this.methodid=methodid;
26     this.en=exp;
27     argumentlist=new Vector();
28     md=null;
29     this.basename=null;
30   }
31
32   public NameDescriptor getBaseName() {
33     return basename;
34   }
35
36   public String getMethodName() {
37     return methodid;
38   }
39
40   public ExpressionNode getExpression() {
41     return en;
42   }
43
44   public TypeDescriptor getType() {
45     return md.getReturnType();
46   }
47
48   public void setExpression(ExpressionNode en) {
49     this.en=en;
50   }
51
52   public void setMethod(MethodDescriptor md) {
53     this.md=md;
54   }
55
56   public MethodDescriptor getMethod() {
57     return md;
58   }
59
60   public void addArgument(ExpressionNode en) {
61     argumentlist.add(en);
62   }
63
64   public int numArgs() {
65     return argumentlist.size();
66   }
67
68   public ExpressionNode getArg(int i) {
69     return (ExpressionNode) argumentlist.get(i);
70   }
71
72   public String printNode(int indent) {
73     String st;
74     if (en!=null)
75       st=en.printNode(indent)+"."+methodid+"(";
76     else
77       st=methodid+"(";
78
79     for(int i=0; i<argumentlist.size(); i++) {
80       ExpressionNode en=(ExpressionNode)argumentlist.get(i);
81       st+=en.printNode(indent);
82       if ((i+1)!=argumentlist.size())
83         st+=", ";
84     }
85     return st+")";
86   }
87   public int kind() {
88     return Kind.MethodInvokeNode;
89   }
90 }