a junit Testcase to test the parser
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / compiler / ast / VariableDeclaration.java
1 package net.sourceforge.phpdt.internal.compiler.ast;
2
3 import net.sourceforge.phpdt.internal.compiler.parser.Outlineable;
4 import net.sourceforge.phpdt.internal.ui.PHPUiImages;
5 import org.eclipse.jface.resource.ImageDescriptor;
6 import org.eclipse.jface.text.Position;
7
8 import java.util.List;
9 import java.util.ArrayList;
10
11 /**
12  * A variable declaration.
13  * @author Matthieu Casanova
14  */
15 public class VariableDeclaration extends Expression implements Outlineable {
16
17   public static final int EQUAL = 0;
18   public static final int PLUS_EQUAL = 1;
19   public static final int MINUS_EQUAL = 2;
20   public static final int STAR_EQUAL = 3;
21   public static final int SLASH_EQUAL = 4;
22   public static final int AND_EQUAL = 5;
23   public static final int OR_EQUAL = 6;
24   public static final int XOR_EQUAL = 7;
25   public static final int DOT_EQUAL = 8;
26   public static final int REM_EQUAL = 9;
27   public static final int TILDE_EQUAL = 10;
28   public static final int LSHIFT_EQUAL = 11;
29   public static final int RSIGNEDSHIFT_EQUAL = 12;
30
31   protected Variable variable;
32
33   /** The value for variable initialization. */
34   public Expression initialization;
35
36   private Object parent;
37   private boolean reference;
38   private Position position;
39
40   private int operator;
41
42   /**
43    * Create a variable.
44    * @param initialization the initialization
45    * @param variable the name of the variable
46    * @param sourceStart the start point
47    */
48   public VariableDeclaration(final Object parent,
49                              final Variable variable,
50                              final Expression initialization,
51                              final int operator,
52                              final int sourceStart) {
53     super(sourceStart, initialization.sourceEnd);
54     this.initialization = initialization;
55     this.variable = variable;
56     this.operator = operator;
57     this.parent = parent;
58     position = new Position(sourceStart, sourceEnd);
59   }
60
61   /**
62    * Create a variable.
63    * @param name the name of the variable
64    * @param sourceStart the start point
65    */
66   public VariableDeclaration(final Object parent,
67                              final Variable variable,
68                              final int sourceStart,
69                              final int sourceEnd) {
70     super(sourceStart, sourceEnd);
71     this.variable = variable;
72     this.parent = parent;
73   }
74
75   public void setReference(final boolean reference) {
76     this.reference = reference;
77   }
78
79   /**
80    * Create a variable.
81    * @param initialization the initialization
82    * @param name the name of the variable
83    * @param sourceStart the start point
84    */
85   public VariableDeclaration(final Variable variable,
86                              final Expression initialization,
87                              final int operator,
88                              final int sourceStart) {
89     super(sourceStart, initialization.sourceEnd);
90     this.variable = variable;
91     this.initialization = initialization;
92     this.operator = operator;
93   }
94
95   /**
96    * Create a variable.
97    * @param name the name of the variable
98    * @param sourceStart the start point
99    */
100   public VariableDeclaration(final Variable variable,
101                              final int sourceStart) {
102     super(sourceStart, variable.sourceEnd);
103     this.variable = variable;
104   }
105
106   /**
107    * Return the operator as String.
108    * @return the operator
109    */
110   public final String operatorToString() {
111     switch (operator) {
112       case EQUAL:
113         return "="; //$NON-NLS-1$
114       case PLUS_EQUAL:
115         return "+=";   //$NON-NLS-1$
116       case MINUS_EQUAL:
117         return "-=";   //$NON-NLS-1$
118       case STAR_EQUAL:
119         return "*="; //$NON-NLS-1$
120       case SLASH_EQUAL:
121         return "/="; //$NON-NLS-1$
122       case AND_EQUAL:
123         return "<="; //$NON-NLS-1$
124       case OR_EQUAL:
125         return "|=";//$NON-NLS-1$
126       case XOR_EQUAL:
127         return "^=";//$NON-NLS-1$
128       case DOT_EQUAL:
129         return ".="; //$NON-NLS-1$
130       case REM_EQUAL:
131         return "%="; //$NON-NLS-1$
132       case TILDE_EQUAL:
133         return "~="; //$NON-NLS-1$
134       case LSHIFT_EQUAL:
135         return "<<="; //$NON-NLS-1$
136       case RSIGNEDSHIFT_EQUAL:
137         return ">>="; //$NON-NLS-1$
138     }
139     return " unknown operator ";//$NON-NLS-1$
140   }
141
142   /**
143    * Return the variable into String.
144    * @return a String
145    */
146   public String toStringExpression() {
147     final StringBuffer buff;
148     if (reference) {
149       buff = new StringBuffer("&"); //$NON-NLS-1$
150     } else {
151       buff = new StringBuffer();//$NON-NLS-1$
152     }
153     buff.append(variable.toStringExpression());
154     if (initialization != null) {
155       buff.append(operatorToString()); //$NON-NLS-1$
156       buff.append(initialization.toStringExpression());
157     }
158     return buff.toString();
159   }
160
161   public Object getParent() {
162     return parent;
163   }
164
165   public String toString() {
166     return toStringExpression();
167   }
168
169   /**
170    * Get the image of a variable.
171    * @return the image that represents a php variable
172    */
173   public ImageDescriptor getImage() {
174     return PHPUiImages.DESC_VAR;
175   }
176
177   public Position getPosition() {
178     return position;
179   }
180
181   /**
182    * Get the name of the field as String.
183    * @return the name of the String
184    */
185   public String name() {
186     return variable.getName();
187   }
188
189   /**
190    * Get the variables from outside (parameters, globals ...)
191    * @return the variables from outside
192    */
193   public List getOutsideVariable() {
194     return new ArrayList();
195   }
196
197   /**
198    * get the modified variables.
199    * @return the variables from we change value
200    */
201   public List getModifiedVariable() {
202     final ArrayList list = new ArrayList();
203     list.addAll(variable.getModifiedVariable());
204     if (initialization != null) {
205       list.addAll(initialization.getModifiedVariable());
206     }
207     return list;
208   }
209
210   /**
211    * Get the variables used.
212    * @return the variables used
213    */
214   public List getUsedVariable() {
215     final ArrayList list = new ArrayList();
216     if (initialization != null) {
217       list.addAll(initialization.getModifiedVariable());//yes it's getModified variable (in a variable declaration $a = $b, $a is modified, event if you have only $a and no initialization
218     }
219     return list;
220   }
221 }