X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/Variable.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/Variable.java index bd3c0fd..3cced48 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/Variable.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/Variable.java @@ -1,17 +1,15 @@ package net.sourceforge.phpdt.internal.compiler.ast; -import net.sourceforge.phpdt.internal.compiler.ast.declarations.VariableUsage; - import java.util.List; -import java.util.ArrayList; -import java.util.Arrays; + +import net.sourceforge.phpdt.internal.compiler.ast.declarations.VariableUsage; /** * A variable. * It could be a simple variable, or contains another variable. * @author Matthieu Casanova */ -public class Variable extends AbstractVariable { +public final class Variable extends AbstractVariable { /** The name of the variable. */ private String name; @@ -19,16 +17,19 @@ public class Variable extends AbstractVariable { /** A variable inside ($$varname). */ private AbstractVariable variable; - public static final String _GET = "_GET"; - public static final String _POST = "_POST"; - public static final String _REQUEST = "_REQUEST"; - public static final String _SERVER = "_SERVER"; - public static final String _SESSION = "_SESSION"; - public static final String _this = "this"; - public static final String GLOBALS = "GLOBALS"; - public static final String _COOKIE = "_COOKIE"; - public static final String _FILES = "_FILES"; - public static final String _ENV = "_ENV"; + /** the variable is defined like this ${expression} */ + private Expression expression; + + private static final String _GET = "_GET"; + private static final String _POST = "_POST"; + private static final String _REQUEST = "_REQUEST"; + private static final String _SERVER = "_SERVER"; + private static final String _SESSION = "_SESSION"; + private static final String _this = "this"; + private static final String GLOBALS = "GLOBALS"; + private static final String _COOKIE = "_COOKIE"; + private static final String _FILES = "_FILES"; + private static final String _ENV = "_ENV"; /** Here is an array of all superglobals variables and the special "this". */ public static final String[] SPECIAL_VARS = {_GET, @@ -69,52 +70,62 @@ public class Variable extends AbstractVariable { } /** + * Create a special variable ($$toto for example). + * @param expression the variable contained + * @param sourceStart the starting position + * @param sourceEnd the ending position + */ + public Variable(final Expression expression, + final int sourceStart, + final int sourceEnd) { + super(sourceStart, sourceEnd); + this.expression = expression; + } + + /** * Return the expression as String. * @return the expression */ public String toStringExpression() { - return "$" + getName(); + return '$' + getName(); } public String getName() { - if (variable == null) { + if (name != null) { return name; } - return variable.toStringExpression(); + if (variable != null) { + return variable.toStringExpression(); + } + return '{' + expression.toStringExpression() + '}'; } /** * Get the variables from outside (parameters, globals ...) - * @return the variables from outside */ - public List getOutsideVariable() { - return new ArrayList(1); + public void getOutsideVariable(final List list) { } /** * get the modified variables. - * @return the variables modified */ - public List getModifiedVariable() { - return new ArrayList(1); + public void getModifiedVariable(final List list) { } /** * Get the variables used. - * @return the variables used */ - public List getUsedVariable() { + public void getUsedVariable(final List list) { final String varName; - if (name == null) { + if (name != null) { + varName = name; + } else if (variable != null) { varName = variable.getName(); } else { - varName = name; + varName = expression.toStringExpression();//todo : do a better thing like evaluate this ?? } - if (arrayContains(SPECIAL_VARS, name)) { - return new ArrayList(1); + if (!arrayContains(SPECIAL_VARS, name)) { + list.add(new VariableUsage(varName, sourceStart)); } - final ArrayList list = new ArrayList(1); - list.add(new VariableUsage(varName, sourceStart)); - return list; } }