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