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