X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/VariableDeclaration.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/VariableDeclaration.java index 46340d1..7f55b38 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/VariableDeclaration.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/VariableDeclaration.java @@ -1,36 +1,61 @@ package net.sourceforge.phpdt.internal.compiler.ast; -import net.sourceforge.phpdt.internal.compiler.ast.Expression; -import net.sourceforge.phpdt.internal.compiler.ast.AbstractVariableDeclaration; 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; +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 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 Variable 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 initialization the initialization - * @param name the name of the variable + * @param variable the name of the variable * @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 Variable 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); } /** @@ -38,15 +63,16 @@ public class VariableDeclaration extends AbstractVariableDeclaration implements * @param name the name of the variable * @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 Variable variable, + final int sourceStart, + final int sourceEnd) { + super(sourceStart, sourceEnd); + this.variable = variable; this.parent = parent; } - public void setReference(boolean reference) { + public void setReference(final boolean reference) { this.reference = reference; } @@ -56,11 +82,14 @@ public class VariableDeclaration extends AbstractVariableDeclaration implements * @param name the name of the variable * @param sourceStart the start point */ - public VariableDeclaration(char[] name, - Expression initialization, - int sourceStart) { - super(name, sourceStart, initialization.sourceEnd); + public VariableDeclaration(final Variable variable, + final Expression initialization, + final int operator, + final int sourceStart) { + super(sourceStart, initialization.sourceEnd); + this.variable = variable; this.initialization = initialization; + this.operator = operator; } /** @@ -68,9 +97,46 @@ public class VariableDeclaration extends AbstractVariableDeclaration implements * @param name the name of the variable * @param sourceStart the start point */ - public VariableDeclaration(char[] name, - int sourceStart) { - super(name, sourceStart, sourceStart + name.length); + public VariableDeclaration(final Variable 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$ } /** @@ -80,13 +146,13 @@ public class VariableDeclaration extends AbstractVariableDeclaration implements public String toStringExpression() { final StringBuffer buff; if (reference) { - buff = new StringBuffer('&'); + buff = new StringBuffer("&"); //$NON-NLS-1$ } else { - buff = new StringBuffer(); + buff = new StringBuffer();//$NON-NLS-1$ } - buff.append(name); + buff.append(variable.toStringExpression()); if (initialization != null) { - buff.append(" = "); //$NON-NLS-1$ + buff.append(operatorToString()); //$NON-NLS-1$ buff.append(initialization.toStringExpression()); } return buff.toString(); @@ -96,11 +162,60 @@ public class VariableDeclaration extends AbstractVariableDeclaration implements return parent; } - /** - * Get the image of a variable. - * @return the image that represents a php variable - */ - public ImageDescriptor getImage() { - return PHPUiImages.DESC_VAR; + 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 ...) + * @return the variables from outside + */ + public List getOutsideVariable() { + return new ArrayList(); + } + + /** + * get the modified variables. + * @return the variables from we change value + */ + public List getModifiedVariable() { + final ArrayList list = new ArrayList(); + list.addAll(variable.getModifiedVariable()); + if (initialization != null) { + list.addAll(initialization.getModifiedVariable()); } + return list; + } + + /** + * Get the variables used. + * @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 list; + } }