First try for AST structure. A lot of things to change
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / compiler / ast / VariableDeclaration.java
index bbbf44c..4ba1ba5 100644 (file)
@@ -1,39 +1,82 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import net.sourceforge.phpdt.internal.compiler.ast.Expression;
+import net.sourceforge.phpdt.internal.compiler.ast.AbstractVariableDeclaration;
+import net.sourceforge.phpdt.internal.compiler.parser.Outlineable;
+import net.sourceforge.phpdt.internal.ui.PHPUiImages;
+import org.eclipse.jface.resource.ImageDescriptor;
+
 /**
  * A variable declaration.
  * @author Matthieu Casanova
  */
-public class VariableDeclaration extends AbstractVariableDeclaration {
+public class VariableDeclaration extends AbstractVariableDeclaration implements Outlineable {
 
   /** The value for variable initialization. */
   public Expression initialization;
 
+  private Object parent;
+  private boolean reference;
+
   /**
    * Create a variable.
    * @param initialization the initialization
-   * @param name the name
+   * @param name the name of the variable
    * @param sourceStart the start point
-   * @param sourceEnd the end point
    */
-  public VariableDeclaration(Expression initialization,
+  public VariableDeclaration(Object parent,
                              char[] name,
-                             int sourceStart,
-                             int sourceEnd) {
+                             Expression initialization,
+                             int sourceStart) {
+    super(name, sourceStart, initialization.sourceEnd);
     this.initialization = initialization;
-    this.name = name;
-    //due to some declaration like
-    // int x, y = 3, z , x ;
-    //the sourceStart and the sourceEnd is ONLY on  the name
-    this.sourceStart = sourceStart;
-    this.sourceEnd = sourceEnd;
+    this.parent = parent;
   }
 
-  public String toString(int tab) {
-    String s = tabString(tab);
+  public void setReference(boolean reference) {
+    this.reference = reference;
+  }
+
+  /**
+   * Create a variable.
+   * @param initialization the initialization
+   * @param name the name of the variable
+   * @param sourceStart the start point
+   */
+  public VariableDeclaration(char[] name,
+                             Expression initialization,
+                             int sourceStart) {
+    super(name, sourceStart, initialization.sourceEnd);
+    this.initialization = initialization;
+  }
+  /**
+   * Return the variable into String.
+   * @return a String
+   */
+  public String toStringExpression() {
+    final StringBuffer buff;
+    if (reference) {
+      buff = new StringBuffer('&');
+    } else {
+      buff = new StringBuffer();
+    }
+    buff.append(name);
     if (initialization != null) {
-      s += " = " + initialization.toStringExpression(tab); //$NON-NLS-1$
+      buff.append(" = "); //$NON-NLS-1$
+      buff.append(initialization.toStringExpression());
     }
-    return s;
+    return buff.toString();
   }
+
+  public Object getParent() {
+    return parent;
+  }
+
+    /**
+     * Get the image of a variable.
+     * @return the image that represents a php variable
+     */
+    public ImageDescriptor getImage() {
+        return PHPUiImages.DESC_VAR;
+    }
 }