improved parser string handling
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / compiler / ast / IfStatement.java
1 package net.sourceforge.phpdt.internal.compiler.ast;
2
3 import java.util.List;
4
5 /**
6  * This is a if statement.
7  * if (condition)
8  *  statement
9  * (elseif statement)*
10  * else statement
11  * @author Matthieu Casanova
12  */
13 public final class IfStatement extends Statement {
14
15   private final Expression condition;
16   private final Statement statement;
17   private final ElseIf[] elseifs;
18   private final Else els;
19
20   /**
21    * Create a new If statement.
22    * @param condition the condition
23    * @param statement a statement or a block of statements
24    * @param elseifs the elseifs
25    * @param els the else (or null)
26    * @param sourceStart the starting position
27    * @param sourceEnd the ending offset
28    */
29   public IfStatement(final Expression condition,
30                      final Statement statement,
31                      final ElseIf[] elseifs,
32                      final Else els,
33                      final int sourceStart,
34                      final int sourceEnd) {
35     super(sourceStart, sourceEnd);
36     this.condition = condition;
37     this.statement = statement;
38     this.elseifs = elseifs;
39     this.els = els;
40   }
41
42   /**
43    * Return the object into String.
44    * @param tab how many tabs (not used here
45    * @return a String
46    */
47   public String toString(final int tab) {
48     final StringBuffer buff = new StringBuffer(tabString(tab));
49     buff.append("if (");//$NON-NLS-1$
50     buff.append(condition.toStringExpression()).append(") ");//$NON-NLS-1$
51     if (statement != null) {
52       buff.append(statement.toString(tab + 1));
53     }
54     for (int i = 0; i < elseifs.length; i++) {
55       buff.append(elseifs[i].toString(tab + 1));
56       buff.append("\n");//$NON-NLS-1$
57     }
58     if (els != null) {
59       buff.append(els.toString(tab + 1));
60       buff.append("\n");//$NON-NLS-1$
61     }
62     return buff.toString();
63   }
64
65   /**
66    * Get the variables from outside (parameters, globals ...)
67    *
68    * @param list the list where we will put variables
69    */
70   public void getOutsideVariable(final List list) {
71     condition.getOutsideVariable(list); // todo: check if unuseful
72     if (statement != null) {
73       statement.getOutsideVariable(list);
74     }
75     for (int i = 0; i < elseifs.length; i++) {
76       elseifs[i].getOutsideVariable(list);
77     }
78     if (els != null) {
79       els.getOutsideVariable(list);
80     }
81   }
82
83   /**
84    * get the modified variables.
85    *
86    * @param list the list where we will put variables
87    */
88   public void getModifiedVariable(final List list) {
89     condition.getModifiedVariable(list);
90     if (statement != null) {
91       statement.getModifiedVariable(list);
92     }
93     for (int i = 0; i < elseifs.length; i++) {
94       elseifs[i].getModifiedVariable(list);
95     }
96     if (els != null) {
97       els.getModifiedVariable(list);
98     }
99   }
100
101   /**
102    * Get the variables used.
103    *
104    * @param list the list where we will put variables
105    */
106   public void getUsedVariable(final List list) {
107     condition.getUsedVariable(list);
108     if (statement != null) {
109       statement.getUsedVariable(list);
110     }
111     for (int i = 0; i < elseifs.length; i++) {
112       elseifs[i].getUsedVariable(list);
113     }
114     if (els != null) {
115       els.getUsedVariable(list);
116     }
117   }
118 }