X-Git-Url: http://secure.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 bbbf44c..fc4f236 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,39 +1,227 @@ 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 { +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; + 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 + * @param operator the assign operator + * @param sourceStart the start point + */ + 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 variable a variable (in case of $$variablename) * @param sourceStart the start point - * @param sourceEnd the end point */ - public VariableDeclaration(Expression initialization, - char[] name, - int sourceStart, - int 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 final void setReference(final boolean reference) { + this.reference = reference; + } + + /** + * Create a variable. + * + * @param initialization the initialization + * @param variable a variable (in case of $$variablename) + * @param sourceStart the start point + */ + 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.name = name; - //due to some declaration like - // int x, y = 3, z , x ; - //the sourceStart and the sourceEnd is ONLY on the name - this.sourceStart = sourceStart; - this.sourceEnd = sourceEnd; + this.operator = operator; + } + + /** + * Create a variable. + * + * @param variable a variable (in case of $$variablename) + * @param sourceStart the start point + */ + 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$ } - public String toString(int tab) { - String s = tabString(tab); + /** + * Return the variable into String. + * + * @return a String + */ + public String toStringExpression() { + final String variableString = variable.toStringExpression(); + if (initialization == null) { + if (reference) return '&' + variableString; else return variableString; + } else { + 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(); + } + } + + public final Object getParent() { + return parent; + } + + 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) { - s += " = " + initialization.toStringExpression(tab); //$NON-NLS-1$ + initialization.getUsedVariable(list); } - return s; } }