Changes:
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / compiler / ast / VariableDeclaration.java
index bbbf44c..4adb02d 100644 (file)
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import java.util.List;
+
+import net.sourceforge.phpdt.internal.compiler.parser.Outlineable;
+import net.sourceforge.phpdt.internal.ui.PHPUiImages;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.text.Position;
+
 /**
  * A variable declaration.
  * @author Matthieu Casanova
  */
-public class VariableDeclaration extends AbstractVariableDeclaration {
+public class VariableDeclaration extends Expression implements Outlineable {
+
+  public static final int EQUAL = 0;
+  public static final int PLUS_EQUAL = 1;
+  public static final int MINUS_EQUAL = 2;
+  public static final int STAR_EQUAL = 3;
+  public static final int SLASH_EQUAL = 4;
+  public static final int AND_EQUAL = 5;
+  public static final int OR_EQUAL = 6;
+  public static final int XOR_EQUAL = 7;
+  public static final int DOT_EQUAL = 8;
+  public static final int REM_EQUAL = 9;
+  public static final int TILDE_EQUAL = 10;
+  public static final int LSHIFT_EQUAL = 11;
+  public static final int RSIGNEDSHIFT_EQUAL = 12;
+
+  protected AbstractVariable variable;
 
   /** The value for variable initialization. */
   public Expression initialization;
 
+  private Object parent;
+  private boolean reference;
+
+  private Position position;
+
+  private int operator;
+
+  /**
+   * Create a variable.
+   * @param variable the name of the variable
+   * @param initialization the initialization
+   * @param operator the assign operator
+   * @param sourceStart the start point
+   */
+  public VariableDeclaration(final Object parent,
+                             final AbstractVariable variable,
+                             final Expression initialization,
+                             final int operator,
+                             final int sourceStart) {
+    super(sourceStart, initialization.sourceEnd);
+    this.initialization = initialization;
+    this.variable = variable;
+    this.operator = operator;
+    this.parent = parent;
+    position = new Position(sourceStart, sourceEnd);
+  }
+
+  /**
+   * Create a variable.
+   * @param variable a variable (in case of $$variablename)
+   * @param sourceStart the start point
+   */
+  public VariableDeclaration(final Object parent,
+                             final AbstractVariable variable,
+                             final int sourceStart,
+                             final int sourceEnd) {
+    super(sourceStart, sourceEnd);
+    this.variable = variable;
+    this.parent = parent;
+    position = new Position(sourceStart, sourceEnd);
+  }
+
+  public void setReference(final boolean reference) {
+    this.reference = reference;
+  }
+
   /**
    * Create a variable.
    * @param initialization the initialization
-   * @param name the name
+   * @param variable a variable (in case of $$variablename)
    * @param sourceStart the start point
-   * @param sourceEnd the end point
    */
-  public VariableDeclaration(Expression initialization,
-                             char[] name,
-                             int sourceStart,
-                             int sourceEnd) {
+  public VariableDeclaration(final AbstractVariable variable,
+                             final Expression initialization,
+                             final int operator,
+                             final int sourceStart) {
+    super(sourceStart, initialization.sourceEnd);
+    this.variable = variable;
     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.operator = operator;
+  }
+
+  /**
+   * Create a variable.
+   * @param variable a variable (in case of $$variablename)
+   * @param sourceStart the start point
+   */
+  public VariableDeclaration(final AbstractVariable variable,
+                             final int sourceStart) {
+    super(sourceStart, variable.sourceEnd);
+    this.variable = variable;
+  }
+
+  /**
+   * Return the operator as String.
+   * @return the operator
+   */
+  public final String operatorToString() {
+    switch (operator) {
+      case EQUAL:
+        return "="; //$NON-NLS-1$
+      case PLUS_EQUAL:
+        return "+=";   //$NON-NLS-1$
+      case MINUS_EQUAL:
+        return "-=";   //$NON-NLS-1$
+      case STAR_EQUAL:
+        return "*="; //$NON-NLS-1$
+      case SLASH_EQUAL:
+        return "/="; //$NON-NLS-1$
+      case AND_EQUAL:
+        return "<="; //$NON-NLS-1$
+      case OR_EQUAL:
+        return "|=";//$NON-NLS-1$
+      case XOR_EQUAL:
+        return "^=";//$NON-NLS-1$
+      case DOT_EQUAL:
+        return ".="; //$NON-NLS-1$
+      case REM_EQUAL:
+        return "%="; //$NON-NLS-1$
+      case TILDE_EQUAL:
+        return "~="; //$NON-NLS-1$
+      case LSHIFT_EQUAL:
+        return "<<="; //$NON-NLS-1$
+      case RSIGNEDSHIFT_EQUAL:
+        return ">>="; //$NON-NLS-1$
+    }
+    return " unknown operator ";//$NON-NLS-1$
+  }
+
+  /**
+   * Return the variable into String.
+   * @return a String
+   */
+  public String toStringExpression() {
+    final StringBuffer buff;
+    if (reference) {
+      buff = new StringBuffer("&"); //$NON-NLS-1$
+    } else {
+      buff = new StringBuffer();//$NON-NLS-1$
+    }
+    buff.append(variable.toStringExpression());
+    if (initialization != null) {
+      buff.append(operatorToString()); //$NON-NLS-1$
+      buff.append(initialization.toStringExpression());
+    }
+    return buff.toString();
+  }
+
+  public Object getParent() {
+    return parent;
+  }
+
+  public String toString() {
+    return toStringExpression();
+  }
+
+  /**
+   * Get the image of a variable.
+   * @return the image that represents a php variable
+   */
+  public ImageDescriptor getImage() {
+    return PHPUiImages.DESC_VAR;
+  }
+
+  public Position getPosition() {
+    return position;
+  }
+
+  /**
+   * Get the name of the field as String.
+   * @return the name of the String
+   */
+  public String name() {
+    return variable.getName();
+  }
+
+  /**
+   * Get the variables from outside (parameters, globals ...)
+   */
+  public void getOutsideVariable(final List list) {
   }
 
-  public String toString(int tab) {
-    String s = tabString(tab);
+  /**
+   * get the modified variables.
+   */
+  public void getModifiedVariable(final List list) {
+    variable.getUsedVariable(list);
+    if (initialization != null) {
+      initialization.getModifiedVariable(list);
+    }
+  }
+
+  /**
+   * Get the variables used.
+   */
+  public void getUsedVariable(final List list) {
     if (initialization != null) {
-      s += " = " + initialization.toStringExpression(tab); //$NON-NLS-1$
+      initialization.getUsedVariable(list);
     }
-    return s;
   }
 }