*** empty log message ***
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / compiler / ast / VariableDeclaration.java
index 9fafb2f..6b9facd 100644 (file)
@@ -1,7 +1,6 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
 import net.sourceforge.phpdt.internal.compiler.parser.Outlineable;
-import net.sourceforge.phpdt.internal.compiler.ast.declarations.VariableUsage;
 import net.sourceforge.phpdt.internal.ui.PHPUiImages;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.text.Position;
@@ -13,7 +12,7 @@ import java.util.ArrayList;
  * 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;
@@ -29,6 +28,7 @@ public class VariableDeclaration extends AbstractVariableDeclaration implements
   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;
@@ -38,19 +38,22 @@ public class VariableDeclaration extends AbstractVariableDeclaration implements
   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 operator the assign operator
    * @param sourceStart the start point
    */
   public VariableDeclaration(final Object parent,
-                             final char[] name,
+                             final AbstractVariable variable,
                              final Expression initialization,
                              final int operator,
                              final int sourceStart) {
-    super(name, sourceStart, initialization.sourceEnd);
+    super(sourceStart, initialization.sourceEnd);
     this.initialization = initialization;
+    this.variable = variable;
     this.operator = operator;
     this.parent = parent;
     position = new Position(sourceStart, sourceEnd);
@@ -58,14 +61,15 @@ public class VariableDeclaration extends AbstractVariableDeclaration implements
 
   /**
    * 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(final Object parent,
-                             final char[] name,
+                             final AbstractVariable variable,
                              final int sourceStart,
                              final int sourceEnd) {
-    super(name, sourceStart, sourceEnd);
+    super(sourceStart, sourceEnd);
+    this.variable = variable;
     this.parent = parent;
   }
 
@@ -76,29 +80,31 @@ public class VariableDeclaration extends AbstractVariableDeclaration implements
   /**
    * Create a variable.
    * @param initialization the initialization
-   * @param name the name of the variable
+   * @param variable a variable (in case of $$variablename)
    * @param sourceStart the start point
    */
-  public VariableDeclaration(final char[] name,
+  public VariableDeclaration(final AbstractVariable variable,
                              final Expression initialization,
                              final int operator,
                              final int sourceStart) {
-    super(name, sourceStart, initialization.sourceEnd);
+    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(final char[] name,
+  public VariableDeclaration(final AbstractVariable variable,
                              final int sourceStart) {
-    super(name, sourceStart, sourceStart + name.length);
+    super(sourceStart, variable.sourceEnd);
+    this.variable = variable;
   }
 
-    /**
+  /**
    * Return the operator as String.
    * @return the operator
    */
@@ -141,11 +147,11 @@ public class VariableDeclaration extends AbstractVariableDeclaration implements
   public String toStringExpression() {
     final StringBuffer buff;
     if (reference) {
-      buff = new StringBuffer("&$"); //$NON-NLS-1$
+      buff = new StringBuffer("&"); //$NON-NLS-1$
     } else {
-      buff = new StringBuffer("$");//$NON-NLS-1$
+      buff = new StringBuffer();//$NON-NLS-1$
     }
-    buff.append(name);
+    buff.append(variable.toStringExpression());
     if (initialization != null) {
       buff.append(operatorToString()); //$NON-NLS-1$
       buff.append(initialization.toStringExpression());
@@ -178,7 +184,7 @@ public class VariableDeclaration extends AbstractVariableDeclaration implements
    * @return the name of the String
    */
   public String name() {
-    return new String(name);
+    return variable.getName();
   }
 
   /**
@@ -186,7 +192,7 @@ public class VariableDeclaration extends AbstractVariableDeclaration implements
    * @return the variables from outside
    */
   public List getOutsideVariable() {
-    return new ArrayList();
+    return new ArrayList(1);
   }
 
   /**
@@ -194,8 +200,7 @@ public class VariableDeclaration extends AbstractVariableDeclaration implements
    * @return the variables from we change value
    */
   public List getModifiedVariable() {
-    final ArrayList list = new ArrayList();
-    list.add(new VariableUsage(new String(name), sourceStart));
+    final List list = variable.getUsedVariable();
     if (initialization != null) {
       list.addAll(initialization.getModifiedVariable());
     }
@@ -207,10 +212,9 @@ public class VariableDeclaration extends AbstractVariableDeclaration implements
    * @return the variables used
    */
   public List getUsedVariable() {
-    final ArrayList list = new ArrayList();
     if (initialization != null) {
-      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
+      return 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
     }
-    return list;
+    return new ArrayList(1);
   }
 }