Some minor changes
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / compiler / ast / VariableDeclaration.java
index 17a6e39..fc4f236 100644 (file)
@@ -3,102 +3,225 @@ package net.sourceforge.phpdt.internal.compiler.ast;
 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;
+
+import java.util.List;
 
 /**
  * A variable declaration.
+ * 
  * @author Matthieu Casanova
  */
-public class VariableDeclaration extends AbstractVariableDeclaration implements Outlineable {
+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 final AbstractVariable variable;
 
   /** The value for variable initialization. */
   public Expression initialization;
 
   private Object parent;
-  private boolean reference;
+  protected boolean reference;
+
+  private Position position;
+
+  private int operator;
 
   /**
    * Create a variable.
+   * 
+   * @param variable       the name of the variable
    * @param initialization the initialization
-   * @param name the name of the variable
-   * @param sourceStart the start point
+   * @param operator       the assign operator
+   * @param sourceStart    the start point
    */
-  public VariableDeclaration(Object parent,
-                             char[] name,
-                             Expression initialization,
-                             int sourceStart) {
-    super(name, sourceStart, initialization.sourceEnd);
+  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 name the name of the variable
+   * 
+   * @param variable    a variable (in case of $$variablename)
    * @param sourceStart the start point
    */
-  public VariableDeclaration(Object parent,
-                             char[] name,
-                             int sourceStart,
-                             int sourceEnd) {
-    super(name, sourceStart, sourceEnd);
+  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(boolean reference) {
+  public final void setReference(final boolean reference) {
     this.reference = reference;
   }
 
   /**
    * Create a variable.
+   * 
    * @param initialization the initialization
-   * @param name the name of the variable
-   * @param sourceStart the start point
+   * @param variable       a variable (in case of $$variablename)
+   * @param sourceStart    the start point
    */
-  public VariableDeclaration(char[] name,
-                             Expression initialization,
-                             int sourceStart) {
-    super(name, sourceStart, initialization.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.operator = operator;
   }
 
   /**
    * Create a variable.
-   * @param name the name of the variable
+   * 
+   * @param variable    a variable (in case of $$variablename)
    * @param sourceStart the start point
    */
-  public VariableDeclaration(char[] name,
-                             int sourceStart) {
-    super(name, sourceStart, sourceStart + name.length);
+  public VariableDeclaration(final AbstractVariable variable,
+                             final int sourceStart) {
+    super(sourceStart, variable.sourceEnd);
+    this.variable = variable;
+  }
+
+  /**
+   * Return the operator as String.
+   * 
+   * @return the operator
+   */
+  private 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$
+    final String variableString = variable.toStringExpression();
+    if (initialization == null) {
+      if (reference) return '&' + variableString; else return variableString;
     } else {
-      buff = new StringBuffer("$");//$NON-NLS-1$
+      final String operatorString = operatorToString();
+      final String initString = initialization.toStringExpression();
+      final StringBuffer buff = new StringBuffer(variableString.length() +
+                                                 operatorString.length() +
+                                                 initString.length() +
+                                                 1);
+      buff.append(variableString);
+      buff.append(operatorString); //$NON-NLS-1$
+      buff.append(initString);
+      return buff.toString();
     }
-    buff.append(name);
-    if (initialization != null) {
-      buff.append(" = "); //$NON-NLS-1$
-      buff.append(initialization.toStringExpression());
-    }
-    return buff.toString();
   }
 
-  public Object getParent() {
+  public final 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;
+  public final String toString() {
+    return toStringExpression();
+  }
+
+  /**
+   * Get the image of a variable.
+   * 
+   * @return the image that represents a php variable
+   */
+  public final ImageDescriptor getImage() {
+    return PHPUiImages.DESC_VAR;
+  }
+
+  public final Position getPosition() {
+    return position;
+  }
+
+  /**
+   * Get the name of the field as String.
+   * 
+   * @return the name of the String
+   */
+  public final String name() {
+    return variable.getName();
+  }
+
+  /**
+   * Get the variables from outside (parameters, globals ...)
+   */
+  public final void getOutsideVariable(final List list) {
+  }
+
+  /**
+   * get the modified variables.
+   */
+  public final void getModifiedVariable(final List list) {
+    variable.getUsedVariable(list);
+    if (initialization != null) {
+      initialization.getModifiedVariable(list);
+    }
+  }
+
+  /**
+   * Get the variables used.
+   */
+  public final void getUsedVariable(final List list) {
+    if (initialization != null) {
+      initialization.getUsedVariable(list);
     }
+  }
 }