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;
import java.util.List;
-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;
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(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);
/**
* 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;
+ position = new Position(sourceStart, sourceEnd);
}
- public void setReference(final 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(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
*/
- public final String operatorToString() {
+ private String operatorToString() {
switch (operator) {
case EQUAL:
return "="; //$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$
- }
- buff.append(name);
- if (initialization != null) {
- buff.append(operatorToString()); //$NON-NLS-1$
- buff.append(initialization.toStringExpression());
+ 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();
}
- return buff.toString();
}
- public Object getParent() {
+ public final Object getParent() {
return parent;
}
- public String toString() {
+ public final String toString() {
return toStringExpression();
}
/**
* Get the image of a variable.
+ *
* @return the image that represents a php variable
*/
- public ImageDescriptor getImage() {
+ public final ImageDescriptor getImage() {
return PHPUiImages.DESC_VAR;
}
- public Position getPosition() {
+ public final Position getPosition() {
return position;
}
/**
* Get the name of the field as String.
+ *
* @return the name of the String
*/
- public String name() {
- return new String(name);
+ public final String name() {
+ return variable.getName();
}
/**
* Get the variables from outside (parameters, globals ...)
- * @return the variables from outside
*/
- public List getOutsideVariable() {
- return new ArrayList();
+ public final void getOutsideVariable(final List list) {
}
/**
* get the modified variables.
- * @return the variables from we change value
*/
- public List getModifiedVariable() {
- final ArrayList list = new ArrayList();
- list.add(new VariableUsage(new String(name), sourceStart));
+ public final void getModifiedVariable(final List list) {
+ variable.getUsedVariable(list);
if (initialization != null) {
- list.addAll(initialization.getModifiedVariable());
+ initialization.getModifiedVariable(list);
}
- return list;
}
/**
* Get the variables used.
- * @return the variables used
*/
- public List getUsedVariable() {
- final ArrayList list = new ArrayList();
+ public final void getUsedVariable(final List list) {
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
+ initialization.getUsedVariable(list);
}
- return list;
}
}