*** empty log message ***
authorkpouer <kpouer>
Sun, 3 Aug 2003 14:56:38 +0000 (14:56 +0000)
committerkpouer <kpouer>
Sun, 3 Aug 2003 14:56:38 +0000 (14:56 +0000)
57 files changed:
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/AbstractCase.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/AbstractPHPComment.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/AbstractSuffixExpression.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/AbstractVariableDeclaration.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/ArgumentDeclaration.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/ArrayDeclarator.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/ArrayInitializer.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/ArrayVariableDeclaration.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/AstNode.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/BinaryExpression.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/Block.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/BranchStatement.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/Break.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/Case.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/CastExpression.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/ClassAccess.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/ClassDeclaration.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/ConditionalExpression.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/ConstantIdentifier.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/Continue.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/DefaultCase.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/Define.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/DoStatement.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/EchoStatement.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/Else.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/ElseIf.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/EmptyStatement.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/Expression.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/FalseLiteral.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/FieldDeclaration.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/ForStatement.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/ForeachStatement.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/FunctionCall.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/GlobalStatement.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/HTMLBlock.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/HTMLCode.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/IfStatement.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/InclusionStatement.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/LabeledStatement.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/ListExpression.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/Literal.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/MagicLiteral.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/MethodDeclaration.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/NullLiteral.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/NumberLiteral.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/OperatorExpression.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/PHPDocument.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/PHPEchoBlock.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/PostfixedUnaryExpression.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/PrefixedUnaryExpression.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/PrintExpression.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/ReturnStatement.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/Statement.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/StaticStatement.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/StringLiteral.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/SwitchStatement.java
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/TrueLiteral.java

index e31da6b..0af2440 100644 (file)
@@ -1,13 +1,64 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import java.util.List;
+import java.util.ArrayList;
+
 /**
+ * Superclass of case statement that we can find in a switch.
  * @author Matthieu Casanova
  */
 public abstract class AbstractCase extends Statement {
+
+  /** The statements in the case. */
   public Statement[] statements;
 
-  public AbstractCase(Statement[] statements, int sourceStart, int sourceEnd) {
+  /**
+   * Create a case statement
+   * @param statements the statements array
+   * @param sourceStart the beginning source offset
+   * @param sourceEnd the ending offset
+   */
+  public AbstractCase(final Statement[] statements,
+                      final int sourceStart,
+                      final int sourceEnd) {
     super(sourceStart, sourceEnd);
     this.statements = statements;
   }
+
+
+  /**
+   * Get the variables from outside (parameters, globals ...)
+   * @return the variables from outside
+   */
+  public List getOutsideVariable() {
+    final ArrayList list = new ArrayList();
+    for (int i = 0; i < statements.length; i++) {
+      list.addAll(statements[i].getOutsideVariable());
+    }
+    return list;
+  }
+
+  /**
+   * get the modified variables.
+   * @return the variables from we change value
+   */
+  public List getModifiedVariable() {
+    final ArrayList list = new ArrayList();
+    for (int i = 0; i < statements.length; i++) {
+      list.addAll(statements[i].getModifiedVariable());
+    }
+    return list;
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public List getUsedVariable() {
+    final ArrayList list = new ArrayList();
+    for (int i = 0; i < statements.length; i++) {
+      list.addAll(statements[i].getUsedVariable());
+    }
+    return list;
+  }
 }
index 0d3f2f0..9eee781 100644 (file)
@@ -1,5 +1,10 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import net.sourceforge.phpdt.internal.compiler.ast.declarations.VariableUsage;
+
+import java.util.List;
+import java.util.ArrayList;
+
 /**
  * Here are php comment.
  * @author Matthieu Casanova
@@ -7,11 +12,35 @@ package net.sourceforge.phpdt.internal.compiler.ast;
 public abstract class AbstractPHPComment extends AstNode {
 
   /**
-   * Create a comment giving starting and ending offset
+   * Create a comment giving starting and ending offset.
    * @param sourceStart starting offset
    * @param sourceEnd ending offset
    */
-  public AbstractPHPComment(int sourceStart, int sourceEnd) {
+  public AbstractPHPComment(final int sourceStart, final int sourceEnd) {
     super(sourceStart, sourceEnd);
   }
+
+  /**
+   * Get the variables from outside (parameters, globals ...)
+   * @return an empty list
+   */
+  public List getOutsideVariable() {
+    return new ArrayList();
+  }
+
+  /**
+   * get the modified variables.
+   * @return an empty list
+   */
+  public List getModifiedVariable() {
+    return new ArrayList();
+  }
+
+  /**
+   * Get the variables used.
+   * @return an empty list
+   */
+  public List getUsedVariable() {
+    return new ArrayList();
+  }
 }
index b429e48..316d271 100644 (file)
@@ -8,7 +8,7 @@ package net.sourceforge.phpdt.internal.compiler.ast;
  */
 public abstract class AbstractSuffixExpression extends Expression {
 
-  public AbstractSuffixExpression(int sourceStart, int sourceEnd) {
+  public AbstractSuffixExpression(final int sourceStart, final int sourceEnd) {
     super(sourceStart, sourceEnd);
   }
 }
index 9fbe9ae..cde0daf 100644 (file)
@@ -1,5 +1,10 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import net.sourceforge.phpdt.internal.compiler.ast.declarations.VariableUsage;
+
+import java.util.List;
+import java.util.ArrayList;
+
 
 /**
  * An abstract variable declaration.
@@ -15,16 +20,10 @@ public abstract class AbstractVariableDeclaration extends Expression {
    * @param sourceEnd ending offset
    * @param name the name of the variable
    */
-  public AbstractVariableDeclaration(char[] name, int sourceStart, int sourceEnd) {
+  public AbstractVariableDeclaration(final char[] name, final int sourceStart, final int sourceEnd) {
     super(sourceStart, sourceEnd);
     this.name = name;
   }
 
-  /**
-   * Get the name of the field as String.
-   * @return the name of the String
-   */
-  public String name() {
-    return new String(name);
-  }
+
 }
index 2d6f723..be35c1d 100644 (file)
@@ -17,11 +17,11 @@ public class ArgumentDeclaration extends VariableDeclaration {
    * @param initialization the initialization
    * @param sourceStart the start point
    */
-  public ArgumentDeclaration(char[] name,
-                             boolean reference,
-                             Expression initialization,
-                             int sourceStart) {
-    super(name, initialization, sourceStart);
+  public ArgumentDeclaration(final char[] name,
+                             final boolean reference,
+                             final Expression initialization,
+                             final int sourceStart) {
+    super(name, initialization,VariableDeclaration.EQUAL, sourceStart);
     this.reference = reference;
   }
 
@@ -31,9 +31,9 @@ public class ArgumentDeclaration extends VariableDeclaration {
    * @param reference the variable is a reference ?
    * @param sourceStart the start point
    */
-  public ArgumentDeclaration(char[] name,
-                             boolean reference,
-                             int sourceStart) {
+  public ArgumentDeclaration(final char[] name,
+                             final boolean reference,
+                             final int sourceStart) {
     super(name, sourceStart);
     this.reference = reference;
   }
index 9b8fd9d..3f3e474 100644 (file)
@@ -1,5 +1,8 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import java.util.List;
+import java.util.ArrayList;
+
 /**
  * @author Matthieu Casanova
  */
@@ -8,9 +11,9 @@ public class ArrayDeclarator extends AbstractSuffixExpression {
   public Expression prefix;
   public Expression vars;
 
-  public ArrayDeclarator(Expression prefix,
-                         Expression vars,
-                         int sourceEnd) {
+  public ArrayDeclarator(final Expression prefix,
+                         final Expression vars,
+                         final int sourceEnd) {
     super(prefix.sourceStart, sourceEnd);
     this.prefix = prefix;
     this.vars = vars;
@@ -29,4 +32,34 @@ public class ArrayDeclarator extends AbstractSuffixExpression {
     buff.append(']');
     return buff.toString();
   }
+
+              /**
+   * 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(prefix.getModifiedVariable());
+    list.addAll(vars.getModifiedVariable());
+    return list;
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public List getUsedVariable() {
+    final ArrayList list = new ArrayList();
+    list.addAll(prefix.getUsedVariable());
+    list.addAll(vars.getUsedVariable());
+    return list;
+  }
 }
index 0979b23..9f3160f 100644 (file)
@@ -1,5 +1,10 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import net.sourceforge.phpdt.internal.compiler.ast.declarations.VariableUsage;
+
+import java.util.List;
+import java.util.ArrayList;
+
 /**
  * @author Matthieu Casanova
  */
@@ -7,9 +12,9 @@ public class ArrayInitializer extends Expression {
 
   public ArrayVariableDeclaration[] vars;
 
-  public ArrayInitializer(ArrayVariableDeclaration[] vars,
-                          int sourceStart,
-                          int sourceEnd) {
+  public ArrayInitializer(final ArrayVariableDeclaration[] vars,
+                          final int sourceStart,
+                          final int sourceEnd) {
     super(sourceStart, sourceEnd);
     this.vars = vars;
   }
@@ -21,7 +26,7 @@ public class ArrayInitializer extends Expression {
   public String toStringExpression() {
     final StringBuffer buff = new StringBuffer("array(");
     for (int i = 0; i < vars.length; i++) {
-      ArrayVariableDeclaration var = vars[i];
+      final ArrayVariableDeclaration var = vars[i];
       if (i != 0) {
         buff.append(",");
       }
@@ -30,4 +35,36 @@ public class ArrayInitializer extends Expression {
     buff.append(")");
     return buff.toString();
   }
+
+             /**
+   * 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();
+    for (int i = 0; i < vars.length; i++) {
+      list.addAll(vars[i].getModifiedVariable());
+    }
+    return list;
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public List getUsedVariable() {
+    final ArrayList list = new ArrayList();
+    for (int i = 0; i < vars.length; i++) {
+      list.addAll(vars[i].getUsedVariable());
+    }
+    return list;
+  }
 }
index 38d3527..c213bd3 100644 (file)
@@ -1,5 +1,8 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import java.util.List;
+import java.util.ArrayList;
+
 /**
  * This variable declaration do not extend AbstractVariableDeclaration because
  * it could take Expression as key.
@@ -9,13 +12,13 @@ public class ArrayVariableDeclaration extends Expression {
 
   public Expression key,value;
 
-  public ArrayVariableDeclaration(Expression key,Expression value) {
+  public ArrayVariableDeclaration(final Expression key,final Expression value) {
     super(key.sourceStart, value.sourceEnd);
     this.key = key;
     this.value = value;
   }
 
-  public ArrayVariableDeclaration(Expression key,int sourceEnd) {
+  public ArrayVariableDeclaration(final Expression key,final int sourceEnd) {
     super(key.sourceStart, sourceEnd);
     this.key = key;
   }
@@ -32,4 +35,35 @@ public class ArrayVariableDeclaration extends Expression {
     }
     return buff.toString();
   }
+
+
+
+             /**
+   * 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(key.getModifiedVariable());
+    list.addAll(value.getModifiedVariable());
+    return list;
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public List getUsedVariable() {
+    final ArrayList list = new ArrayList();
+    list.addAll(value.getUsedVariable());
+    return list;
+  }
 }
index 9eabb41..237ce92 100644 (file)
@@ -1,5 +1,7 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import java.util.List;
+
 /**
  * It will be the mother of our own ast tree for php just like the ast tree of Eclipse.
  * @author Matthieu Casanova
@@ -14,7 +16,7 @@ public abstract class AstNode {
    * @param sourceStart starting offset
    * @param sourceEnd ending offset
    */
-  public AstNode(int sourceStart, int sourceEnd) {
+  public AstNode(final int sourceStart, final int sourceEnd) {
     this.sourceStart = sourceStart;
     this.sourceEnd = sourceEnd;
   }
@@ -24,10 +26,11 @@ public abstract class AstNode {
    * @param tab the number of tabulations
    * @return a String containing some spaces
    */
-  public static String tabString(int tab) {
-    StringBuffer s = new StringBuffer();
-    for (int i = tab; i > 0; i--)
+  public static String tabString(final int tab) {
+    final StringBuffer s = new StringBuffer(2 * tab);
+    for (int i = tab; i > 0; i--) {
       s.append("  "); //$NON-NLS-1$
+    }
     return s.toString();
   }
 
@@ -46,4 +49,22 @@ public abstract class AstNode {
    * @return a String
    */
   public abstract String toString(int tab);
+
+  /**
+   * Get the variables from outside (parameters, globals ...)
+   * @return the variables from outside
+   */
+  public abstract List getOutsideVariable();
+
+  /**
+   * get the modified variables.
+   * @return the variables modified
+   */
+  public abstract List getModifiedVariable();
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public abstract List getUsedVariable();
 }
index 5f54d9e..3455363 100644 (file)
@@ -1,5 +1,8 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import java.util.List;
+import java.util.ArrayList;
+
 /**
  * @author Matthieu Casanova
  */
@@ -8,9 +11,9 @@ public class BinaryExpression extends OperatorExpression {
   /** The two expressions. */
   public Expression left,right;
 
-  public BinaryExpression(Expression left,
-                          Expression right,
-                          int operator) {
+  public BinaryExpression(final Expression left,
+                          final Expression right,
+                          final int operator) {
     super(operator, left.sourceStart, right.sourceEnd);
     this.left = left;
     this.right = right;
@@ -22,4 +25,35 @@ public class BinaryExpression extends OperatorExpression {
     buff.append(right.toStringExpression());
     return buff.toString();
   }
+
+  /**
+   * 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(left.getModifiedVariable());
+    list.addAll(right.getModifiedVariable());
+    return list;
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public List getUsedVariable() {
+    final ArrayList list = new ArrayList();
+    list.addAll(left.getUsedVariable());
+    list.addAll(right.getUsedVariable());
+    return list;
+  }
+
 }
index b3ef5d1..d2371be 100644 (file)
@@ -1,7 +1,10 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import java.util.List;
+import java.util.ArrayList;
+
 /**
- * A Block is
+ * A Block.
  * {
  * statements
  * }.
@@ -18,30 +21,72 @@ public class Block extends Statement {
    * @param sourceStart starting offset
    * @param sourceEnd ending offset
    */
-  public Block(Statement[] statements,int sourceStart, int sourceEnd) {
+  public Block(final Statement[] statements,
+               final int sourceStart,
+               final int sourceEnd) {
     super(sourceStart, sourceEnd);
     this.statements = statements;
   }
 
+  /**
+   * tell if the block is empty.
+   * @return the block is empty if there are no statements in it
+   */
   public boolean isEmptyBlock() {
     return statements == null;
   }
 
   /**
    * Return the block as String.
-    * @param tab how many tabs
+   * @param tab how many tabs
    * @return the string representation of the block
    */
-  public String toString(int tab) {
+  public String toString(final int tab) {
     final String s = AstNode.tabString(tab);
     final StringBuffer buff = new StringBuffer(s);
     buff.append("{\n"); //$NON-NLS-1$
     if (this.statements != null) {
       for (int i = 0; i < statements.length; i++) {
-          buff.append(statements[i].toString(tab+1)).append(";\n");//$NON-NLS-1$
+        buff.append(statements[i].toString(tab + 1)).append(";\n");//$NON-NLS-1$
       }
     }
     buff.append("}\n"); //$NON-NLS-1$
     return buff.toString();
   }
+
+  /**
+   * Get the variables from outside (parameters, globals ...)
+   * @return the variables from outside
+   */
+  public List getOutsideVariable() {
+    final ArrayList list = new ArrayList();
+    for (int i = 0; i < statements.length; i++) {
+      list.addAll(statements[i].getOutsideVariable());
+    }
+    return list;
+  }
+
+  /**
+   * get the modified variables.
+   * @return the variables from we change value
+   */
+  public List getModifiedVariable() {
+    final ArrayList list = new ArrayList();
+    for (int i = 0; i < statements.length; i++) {
+      list.addAll(statements[i].getModifiedVariable());
+    }
+    return list;
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public List getUsedVariable() {
+    final ArrayList list = new ArrayList();
+    for (int i = 0; i < statements.length; i++) {
+      list.addAll(statements[i].getUsedVariable());
+    }
+    return list;
+  }
 }
index f38d816..2c164c4 100644 (file)
@@ -1,5 +1,8 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import java.util.List;
+import java.util.ArrayList;
+
 /**
  * Here is a branchstatement : break or continue
  * @author Matthieu Casanova
@@ -8,8 +11,41 @@ public abstract class BranchStatement extends Statement {
 
   public Expression expression;
 
-  public BranchStatement(Expression expression,int sourceStart, int sourceEnd) {
+  public BranchStatement(final Expression expression, final int sourceStart, final int sourceEnd) {
     super(sourceStart, sourceEnd);
     this.expression = expression;
   }
+
+  /**
+   * Get the variables from outside (parameters, globals ...)
+   * @return the variables from outside
+   */
+  public List getOutsideVariable() {
+    if (expression == null) {
+      return new ArrayList();
+    }
+    return expression.getOutsideVariable();
+  }
+
+  /**
+   * get the modified variables.
+   * @return the variables from we change value
+   */
+  public List getModifiedVariable() {
+    if (expression == null) {
+      return new ArrayList();
+    }
+    return expression.getModifiedVariable();
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public List getUsedVariable() {
+    if (expression == null) {
+      return new ArrayList();
+    }
+    return expression.getUsedVariable();
+  }
 }
index 08b273b..158cb3d 100644 (file)
@@ -6,12 +6,12 @@ package net.sourceforge.phpdt.internal.compiler.ast;
  */
 public class Break extends BranchStatement {
 
-  public Break(Expression expression, int sourceStart, int sourceEnd) {
+  public Break(final Expression expression, final int sourceStart, final int sourceEnd) {
     super(expression, sourceStart, sourceEnd);
   }
 
-  public String toString(int tab) {
-    String s = tabString(tab);
+  public String toString(final int tab) {
+    final String s = tabString(tab);
     if (expression != null) {
       return s + "break " + expression.toString();//$NON-NLS-1$
     }
index a66d3f1..1428b25 100644 (file)
@@ -1,5 +1,7 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import java.util.List;
+
 /**
  * A Case statement for a Switch.
  * @author Matthieu Casanova
@@ -7,12 +9,11 @@ package net.sourceforge.phpdt.internal.compiler.ast;
 public class Case extends AbstractCase {
 
   public Expression value;
-  public Statement[] statements;
 
-  public Case(Expression value,
-              Statement[] statements,
-              int sourceStart,
-              int sourceEnd) {
+  public Case(final Expression value,
+              final Statement[] statements,
+              final int sourceStart,
+              final int sourceEnd) {
     super(statements, sourceStart, sourceEnd);
     this.value = value;
   }
@@ -22,17 +23,37 @@ public class Case extends AbstractCase {
    * @param tab how many tabs (not used here
    * @return a String
    */
-  public String toString(int tab) {
+  public String toString(final int tab) {
     final StringBuffer buff = new StringBuffer(tabString(tab));
     buff.append("case ");
     buff.append(value.toStringExpression());
     buff.append(" :\n");
     if (statements != null) {
       for (int i = 0; i < statements.length; i++) {
-        Statement statement = statements[i];
+        final Statement statement = statements[i];
         buff.append(statement.toString(tab + 1));
       }
     }
     return buff.toString();
   }
+
+  /**
+   * get the modified variables.
+   * @return the variables from we change value
+   */
+  public List getModifiedVariable() {
+    final List list = super.getModifiedVariable();
+    list.addAll(value.getModifiedVariable());
+    return list;
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public List getUsedVariable() {
+    final List list = super.getUsedVariable();
+    list.addAll(value.getUsedVariable());
+    return list;
+  }
 }
index 9c7da62..8291f62 100644 (file)
@@ -1,5 +1,8 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import java.util.List;
+import java.util.ArrayList;
+
 /**
  * This is a cast expression.
  * @author Matthieu Casanova
@@ -19,10 +22,10 @@ public class CastExpression extends Expression {
    * @param sourceStart starting offset
    * @param sourceEnd ending offset
    */
-  public CastExpression(ConstantIdentifier type,
-                        Expression expression,
-                        int sourceStart,
-                        int sourceEnd) {
+  public CastExpression(final ConstantIdentifier type,
+                        final Expression expression,
+                        final int sourceStart,
+                        final int sourceEnd) {
     super(sourceStart, sourceEnd);
     this.type = type;
     this.expression = expression;
@@ -39,4 +42,28 @@ public class CastExpression extends Expression {
     buff.append(expression.toStringExpression());
     return buff.toString();
   }
+
+      /**
+   * 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() {
+    return expression.getModifiedVariable();
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public List getUsedVariable() {
+    return expression.getUsedVariable();
+  }
 }
index b46e802..8e332c8 100644 (file)
@@ -1,5 +1,8 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import java.util.List;
+import java.util.ArrayList;
+
 /**
  * Any class access.
  * @author Matthieu Casanova
@@ -13,9 +16,9 @@ public class ClassAccess extends AbstractSuffixExpression {
   public Expression suffix;
   public int type;
 
-  public ClassAccess(Expression prefix,
-                     Expression suffix,
-                     int type) {
+  public ClassAccess(final Expression prefix,
+                     final Expression suffix,
+                     final int type) {
     super(prefix.sourceStart, suffix.sourceEnd);
     this.prefix = prefix;
     this.suffix = suffix;
@@ -41,4 +44,28 @@ public class ClassAccess extends AbstractSuffixExpression {
     buff.append(suffix.toStringExpression());
     return buff.toString();
   }
+
+          /**
+   * 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() {
+    return new ArrayList();
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public List getUsedVariable() {
+    return prefix.getUsedVariable();
+  }
 }
index 000afb9..5bdc3c6 100644 (file)
@@ -2,12 +2,14 @@ package net.sourceforge.phpdt.internal.compiler.ast;
 
 import net.sourceforge.phpdt.internal.compiler.parser.Outlineable;
 import net.sourceforge.phpdt.internal.compiler.parser.OutlineableWithChildren;
+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.ArrayList;
 import java.util.List;
+import java.util.Enumeration;
 
 
 /**
@@ -39,16 +41,17 @@ public class ClassDeclaration extends Statement implements OutlineableWithChildr
   private ArrayList children = new ArrayList();
 
   private Position position;
+
   /**
    * Create a class giving starting and ending offset
    * @param sourceStart starting offset
    * @param sourceEnd ending offset
    */
-  public ClassDeclaration(Object parent,
-                          char[] name,
-                          char[] superclass,
-                          int sourceStart,
-                          int sourceEnd) {
+  public ClassDeclaration(final Object parent,
+                          final char[] name,
+                          final char[] superclass,
+                          final int sourceStart,
+                          final int sourceEnd) {
     super(sourceStart, sourceEnd);
     this.parent = parent;
     this.name = name;
@@ -61,17 +64,17 @@ public class ClassDeclaration extends Statement implements OutlineableWithChildr
    * @param sourceStart starting offset
    * @param sourceEnd ending offset
    */
-  public ClassDeclaration(Object parent,
-                          char[] name,
-                          int sourceStart,
-                          int sourceEnd) {
+  public ClassDeclaration(final Object parent,
+                          final char[] name,
+                          final int sourceStart,
+                          final int sourceEnd) {
     super(sourceStart, sourceEnd);
     this.parent = parent;
     this.name = name;
     position = new Position(sourceStart, name.length);
   }
 
-  public void addMethod(MethodDeclaration method) {
+  public void addMethod(final MethodDeclaration method) {
     methods.add(method);
     add(method);
     if (method.name.equals(name)) {
@@ -79,15 +82,15 @@ public class ClassDeclaration extends Statement implements OutlineableWithChildr
     }
   }
 
-  public void addField(FieldDeclaration var) {
+  public void addField(final FieldDeclaration var) {
     for (int i = 0; i < var.vars.length; i++) {
-      VariableDeclaration c = var.vars[i];
+      final VariableDeclaration c = var.vars[i];
       children.add(c);
     }
     fields.add(var);
   }
 
-  public boolean add(Outlineable o) {
+  public boolean add(final Outlineable o) {
     return children.add(o);
   }
 
@@ -104,7 +107,7 @@ public class ClassDeclaration extends Statement implements OutlineableWithChildr
    * @param tab how many tabs before the class
    * @return the code of this class into String
    */
-  public String toString(int tab) {
+  public String toString(final int tab) {
     return tabString(tab) + toStringHeader() + toStringBody(tab);
   }
 
@@ -113,18 +116,18 @@ public class ClassDeclaration extends Statement implements OutlineableWithChildr
    * @param tab how many tabs before the body of the class
    * @return the body as String
    */
-  public String toStringBody(int tab) {
+  public String toStringBody(final int tab) {
     final StringBuffer buff = new StringBuffer(" {");//$NON-NLS-1$
     if (fields != null) {
       for (int i = 0; i < fields.size(); i++) {
-        FieldDeclaration field = (FieldDeclaration) fields.get(i);
+        final FieldDeclaration field = (FieldDeclaration) fields.get(i);
         buff.append("\n"); //$NON-NLS-1$
         buff.append(field.toString(tab + 1));
         buff.append(";");//$NON-NLS-1$
       }
     }
     for (int i = 0; i < methods.size(); i++) {
-      MethodDeclaration o = (MethodDeclaration) methods.get(i);
+      final MethodDeclaration o = (MethodDeclaration) methods.get(i);
       buff.append("\n");//$NON-NLS-1$
       buff.append(o.toString(tab + 1));
     }
@@ -157,7 +160,7 @@ public class ClassDeclaration extends Statement implements OutlineableWithChildr
     return parent;
   }
 
-  public Outlineable get(int index) {
+  public Outlineable get(final int index) {
     return (Outlineable) children.get(index);
   }
 
@@ -181,4 +184,28 @@ public class ClassDeclaration extends Statement implements OutlineableWithChildr
   public List getList() {
     return children;
   }
+
+  /**
+   * 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() {
+    return new ArrayList();
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public List getUsedVariable() {
+    return new ArrayList();
+  }
 }
index b2e39fb..121a158 100644 (file)
@@ -1,5 +1,8 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import java.util.List;
+import java.util.ArrayList;
+
 /**
  * A ConditionalExpression is like that : booleanExpression ? trueValue : falseValue;
  * @author Matthieu Casanova
@@ -8,9 +11,9 @@ public class ConditionalExpression extends OperatorExpression {
 
   public Expression condition, valueIfTrue, valueIfFalse;
 
-  public ConditionalExpression(Expression condition,
-                               Expression valueIfTrue,
-                               Expression valueIfFalse) {
+  public ConditionalExpression(final Expression condition,
+                               final Expression valueIfTrue,
+                               final Expression valueIfFalse) {
     super(-1, condition.sourceStart, valueIfFalse.sourceEnd);
     this.condition = condition;
     this.valueIfTrue = valueIfTrue;
@@ -26,4 +29,36 @@ public class ConditionalExpression extends OperatorExpression {
     buff.append(valueIfFalse.toStringExpression());
     return buff.toString();
   }
+
+  /**
+   * 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(condition.getModifiedVariable());
+    list.addAll(valueIfTrue.getModifiedVariable());
+    list.addAll(valueIfFalse.getModifiedVariable());
+    return list;
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public List getUsedVariable() {
+    final ArrayList list = new ArrayList();
+    list.addAll(condition.getUsedVariable());
+    list.addAll(valueIfTrue.getUsedVariable());
+    list.addAll(valueIfFalse.getUsedVariable());
+    return list;
+  }
 }
index dec383e..a157522 100644 (file)
@@ -1,5 +1,8 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import java.util.List;
+import java.util.ArrayList;
+
 /**
  * @author Matthieu Casanova
  */
@@ -7,9 +10,9 @@ public class ConstantIdentifier extends Expression {
 
   public char[] name;
 
-  public ConstantIdentifier(char[] name,
-                            int sourceStart,
-                            int sourceEnd) {
+  public ConstantIdentifier(final char[] name,
+                            final int sourceStart,
+                            final int sourceEnd) {
     super(sourceStart, sourceEnd);
     this.name = name;
   }
@@ -21,4 +24,28 @@ public class ConstantIdentifier extends Expression {
   public String toStringExpression() {
     return new String(name);
   }
+
+        /**
+   * 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() {
+    return new ArrayList();
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public List getUsedVariable() {
+    return new ArrayList();
+  }
 }
index c862a2f..16c3fcd 100644 (file)
@@ -6,12 +6,12 @@ package net.sourceforge.phpdt.internal.compiler.ast;
  */
 public class Continue extends BranchStatement {
 
-  public Continue(Expression expression, int sourceStart, int sourceEnd) {
+  public Continue(final Expression expression, final int sourceStart, final int sourceEnd) {
     super(expression, sourceStart, sourceEnd);
   }
 
-  public String toString(int tab) {
-    String s = tabString(tab);
+  public String toString(final int tab) {
+    final String s = tabString(tab);
     if (expression == null) {
       return s + "continue";//$NON-NLS-1$
     }
index 7d08200..758c404 100644 (file)
@@ -5,7 +5,7 @@ package net.sourceforge.phpdt.internal.compiler.ast;
  */
 public class DefaultCase extends AbstractCase {
 
-  public DefaultCase(Statement[] statements, int sourceStart, int sourceEnd) {
+  public DefaultCase(final Statement[] statements, final int sourceStart, final int sourceEnd) {
     super(statements, sourceStart, sourceEnd);
   }
 
@@ -14,11 +14,11 @@ public class DefaultCase extends AbstractCase {
    * @param tab how many tabs (not used here
    * @return a String
    */
-  public String toString(int tab) {
+  public String toString(final int tab) {
     final StringBuffer buff = new StringBuffer(tabString(tab));
     buff.append("default : \n"); //$NON-NLS-1$
     for (int i = 0; i < statements.length; i++) {
-      Statement statement = statements[i];
+      final Statement statement = statements[i];
       buff.append(statement.toString(tab + 9));
     }
     return buff.toString();
index 8a85495..669f90d 100644 (file)
@@ -3,8 +3,12 @@ package net.sourceforge.phpdt.internal.compiler.ast;
 import org.eclipse.jface.text.Position;
 import org.eclipse.jface.resource.ImageDescriptor;
 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 java.util.List;
+import java.util.ArrayList;
+
 /**
  * a Define.
  * define(expression,expression)
@@ -57,4 +61,30 @@ public class Define extends Statement implements Outlineable {
   public Position getPosition() {
     return position;
   }
+
+  /**
+   * Get the variables from outside (parameters, globals ...)
+   * @return the variables from outside
+   */
+  public List getOutsideVariable() {
+    final ArrayList list = new ArrayList(1);
+    list.add(new VariableUsage(defineName.toStringExpression(),sourceStart));//todo: someday : evaluate the defineName
+    return list;
+  }
+
+  /**
+   * get the modified variables.
+   * @return the variables modified
+   */
+  public List getModifiedVariable() {
+    return new ArrayList();
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public List getUsedVariable() {
+    return new ArrayList();
+  }
 }
index 1a80333..f3ee853 100644 (file)
@@ -1,6 +1,10 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import java.util.List;
+import java.util.ArrayList;
+
 /**
+ * A do statement.
  * @author Matthieu Casanova
  */
 public class DoStatement extends Statement {
@@ -11,10 +15,10 @@ public class DoStatement extends Statement {
   /** The action of the while. (it could be a block) */
   public Statement action;
 
-  public DoStatement(Expression condition,
-                     Statement action,
-                     int sourceStart,
-                     int sourceEnd) {
+  public DoStatement(final Expression condition,
+                     final Statement action,
+                     final int sourceStart,
+                     final int sourceEnd) {
     super(sourceStart, sourceEnd);
     this.condition = condition;
     this.action = action;
@@ -25,16 +29,49 @@ public class DoStatement extends Statement {
    * @param tab how many tabs (not used here
    * @return a String
    */
-  public String toString(int tab) {
+  public String toString(final int tab) {
     final String s = tabString(tab);
-    final StringBuffer buff = new StringBuffer("do "); //$NON-NLS-1$
+    final StringBuffer buff = new StringBuffer("do ");//$NON-NLS-1$
     if (action == null) {
       buff.append(" {} ;"); //$NON-NLS-1$
     } else {
-      buff.append("\n").append(action.toString(tab + 1)); //$NON-NLS-1$
+      buff.append("\n").append(action.toString(tab + 1));//$NON-NLS-1$
     }
-    buff.append(s).append(" while (");
-    buff.append(condition.toStringExpression()).append(")");   //$NON-NLS-1$
+    buff.append(s).append(" while (");//$NON-NLS-1$
+    buff.append(condition.toStringExpression()).append(")");//$NON-NLS-1$
     return buff.toString();
   }
+
+  /**
+   * Get the variables from outside (parameters, globals ...)
+   * @return the variables from outside
+   */
+  public List getOutsideVariable() {
+    final ArrayList list = new ArrayList();
+    list.addAll(condition.getOutsideVariable()); // todo: check if unuseful
+    list.addAll(action.getOutsideVariable());
+    return list;
+  }
+
+  /**
+   * get the modified variables.
+   * @return the variables from we change value
+   */
+  public List getModifiedVariable() {
+    final ArrayList list = new ArrayList();
+    list.addAll(condition.getModifiedVariable());
+    list.addAll(action.getModifiedVariable());
+    return list;
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public List getUsedVariable() {
+    final ArrayList list = new ArrayList();
+    list.addAll(condition.getUsedVariable());
+    list.addAll(action.getUsedVariable());
+    return list;
+  }
 }
index 11f5ee0..c5f3e98 100644 (file)
@@ -1,6 +1,11 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import java.util.List;
+import java.util.ArrayList;
+
 /**
+ * an echo statement.
+ * echo something;
  * @author Matthieu Casanova
  */
 public class EchoStatement extends Statement {
@@ -8,16 +13,16 @@ public class EchoStatement extends Statement {
   /** An array of expressions in this echo statement. */
   public Expression[] expressions;
 
-  public EchoStatement (Expression[] expressions, int sourceStart) {
+  public EchoStatement (final Expression[] expressions, final int sourceStart) {
     super(sourceStart, expressions[expressions.length-1].sourceEnd);
     this.expressions = expressions;
   }
 
   public String toString() {
-    StringBuffer buff = new StringBuffer("echo ");
+    final StringBuffer buff = new StringBuffer("echo ");//$NON-NLS-1$
     for (int i = 0; i < expressions.length; i++) {
       if (i != 0) {
-        buff.append(", ");
+        buff.append(", ");//$NON-NLS-1$
       }
       buff.append(expressions[i].toStringExpression());
     }
@@ -29,7 +34,46 @@ public class EchoStatement extends Statement {
    * @param tab how many tabs (not used here
    * @return a String
    */
-  public String toString(int tab) {
-    return tabString(tab) + toString();
+  public String toString(final int tab) {
+    final String tabs = tabString(tab);
+    final String str = toString();
+    final StringBuffer buff = new StringBuffer(tabs.length()+str.length());
+    return buff.toString();
+  }
+
+  /**
+   * Get the variables from outside (parameters, globals ...)
+   * @return the variables from outside
+   */
+  public List getOutsideVariable() {
+    final ArrayList list = new ArrayList();
+    for (int i = 0; i < expressions.length; i++) {
+      list.addAll(expressions[i].getOutsideVariable());
+    }
+    return list;
+  }
+
+  /**
+   * get the modified variables.
+   * @return the variables from we change value
+   */
+  public List getModifiedVariable() {
+    final ArrayList list = new ArrayList();
+    for (int i = 0; i < expressions.length; i++) {
+      list.addAll(expressions[i].getModifiedVariable());
+    }
+    return list;
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public List getUsedVariable() {
+    final ArrayList list = new ArrayList();
+    for (int i = 0; i < expressions.length; i++) {
+      list.addAll(expressions[i].getUsedVariable());
+    }
+    return list;
   }
 }
index d0e1ea6..302d650 100644 (file)
@@ -1,18 +1,40 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
+ * an else statement.
+ * it's else
  * @author Matthieu Casanova
  */
 public class Else extends Statement {
 
+  /** the statements. */
   public Statement[] statements;
 
-  public Else(Statement[] statements, int sourceStart, int sourceEnd) {
+  /**
+   * An else statement bad version ( : endif).
+   * @param statements the statements
+   * @param sourceStart the starting offset
+   * @param sourceEnd the ending offset
+   */
+  public Else(final Statement[] statements,
+              final int sourceStart,
+              final int sourceEnd) {
     super(sourceStart, sourceEnd);
     this.statements = statements;
   }
 
-  public Else(Statement statement, int sourceStart, int sourceEnd) {
+  /**
+   * An else statement good version
+   * @param statement the statement (it could be a block)
+   * @param sourceStart the starting offset
+   * @param sourceEnd the ending offset
+   */
+  public Else(final Statement statement,
+              final int sourceStart,
+              final int sourceEnd) {
     super(sourceStart, sourceEnd);
     this.statements = new Statement[1];
     this.statements[0] = statement;
@@ -23,13 +45,50 @@ public class Else extends Statement {
    * @param tab how many tabs (not used here
    * @return a String
    */
-  public String toString(int tab) {
+  public String toString(final int tab) {
     final StringBuffer buff = new StringBuffer(tabString(tab));
-    buff.append("else \n");
+    buff.append("else \n");//$NON-NLS-1$
+    Statement statement;
     for (int i = 0; i < statements.length; i++) {
-      Statement statement = statements[i];
-      buff.append(statement.toString(tab + 1)).append('\n');
+      statement = statements[i];
+      buff.append(statement.toString(tab + 1)).append("\n");//$NON-NLS-1$
     }
     return buff.toString();
   }
+
+  /**
+   * Get the variables from outside (parameters, globals ...)
+   * @return the variables from outside
+   */
+  public List getOutsideVariable() {
+    final ArrayList list = new ArrayList();
+    for (int i = 0; i < statements.length; i++) {
+      list.addAll(statements[i].getOutsideVariable());
+    }
+    return list;
+  }
+
+  /**
+   * get the modified variables.
+   * @return the variables from outside
+   */
+  public List getModifiedVariable() {
+    final ArrayList list = new ArrayList();
+    for (int i = 0; i < statements.length; i++) {
+      list.addAll(statements[i].getModifiedVariable());
+    }
+    return list;
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables from outside
+   */
+  public List getUsedVariable() {
+    final ArrayList list = new ArrayList();
+    for (int i = 0; i < statements.length; i++) {
+      list.addAll(statements[i].getUsedVariable());
+    }
+    return list;
+  }
 }
index a6aff20..3602231 100644 (file)
@@ -1,5 +1,10 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import net.sourceforge.phpdt.internal.compiler.ast.declarations.VariableUsage;
+
+import java.util.List;
+import java.util.ArrayList;
+
 /**
  * An elseif statement.
  * @author Matthieu Casanova
@@ -12,7 +17,7 @@ public class ElseIf extends Statement {
   /** The statements. */
   public Statement[] statements;
 
-  public ElseIf(Expression condition, Statement[] statements, int sourceStart, int sourceEnd) {
+  public ElseIf(final Expression condition, final Statement[] statements, final int sourceStart, final int sourceEnd) {
     super(sourceStart, sourceEnd);
     this.condition = condition;
     this.statements = statements;
@@ -23,15 +28,53 @@ public class ElseIf extends Statement {
    * @param tab how many tabs (not used here
    * @return a String
    */
-  public String toString(int tab) {
+  public String toString(final int tab) {
     final StringBuffer buff = new StringBuffer(tabString(tab));
     buff.append("elseif (");
     buff.append(condition.toStringExpression());
     buff.append(") \n");
     for (int i = 0; i < statements.length; i++) {
-      Statement statement = statements[i];
-      buff.append(statement.toString(tab+1)).append('\n');
+      final Statement statement = statements[i];
+      buff.append(statement.toString(tab + 1)).append('\n');
     }
     return buff.toString();
   }
+
+  /**
+   * Get the variables from outside (parameters, globals ...)
+   * @return the variables from outside
+   */
+  public List getOutsideVariable() {
+    final ArrayList list = new ArrayList();
+    for (int i = 0; i < statements.length; i++) {
+      list.addAll(statements[i].getModifiedVariable());
+    }
+    return list;
+  }
+
+  /**
+   * get the modified variables.
+   * @return the variables modified
+   */
+  public List getModifiedVariable() {
+    final ArrayList list = new ArrayList();
+    for (int i = 0; i < statements.length; i++) {
+      list.addAll(statements[i].getModifiedVariable());
+    }
+    list.addAll(condition.getModifiedVariable());
+    return list;
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public List getUsedVariable() {
+     final ArrayList list = new ArrayList();
+    for (int i = 0; i < statements.length; i++) {
+      list.addAll(statements[i].getUsedVariable());
+    }
+    list.addAll(condition.getUsedVariable());
+    return list;
+  }
 }
index 780c841..1585fc4 100644 (file)
@@ -1,16 +1,43 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import java.util.List;
+import java.util.ArrayList;
+
 /**
  * An empty statement.
  * @author Matthieu Casanova
  */
 public class EmptyStatement extends Statement {
 
-  public EmptyStatement(int sourceStart, int sourceEnd) {
+  public EmptyStatement(final int sourceStart, final int sourceEnd) {
     super(sourceStart, sourceEnd);
   }
 
-  public String toString(int tab) {
+  public String toString(final int tab) {
     return tabString(tab) + ";"; //$NON-NLS-1$
   }
+
+  /**
+   * Get the variables from outside (parameters, globals ...)
+   * @return an empty list
+   */
+  public List getOutsideVariable() {
+    return new ArrayList();
+  }
+
+  /**
+   * get the modified variables.
+   * @return an empty list
+   */
+  public List getModifiedVariable() {
+    return new ArrayList();
+  }
+
+  /**
+   * Get the variables used.
+   * @return an empty list
+   */
+  public List getUsedVariable() {
+    return new ArrayList();
+  }
 }
index b5b5947..d935982 100644 (file)
@@ -12,7 +12,7 @@ public abstract class Expression extends Statement {
    * @param sourceStart starting offset
    * @param sourceEnd ending offset
    */
-  public Expression(int sourceStart, int sourceEnd) {
+  public Expression(final int sourceStart, final int sourceEnd) {
     super(sourceStart, sourceEnd);
   }
 
@@ -21,7 +21,7 @@ public abstract class Expression extends Statement {
    * @param tab how many spaces before the expression
    * @return a string representing the expression
    */
-  public String toString(int tab) {
+  public String toString(final int tab) {
     return tabString(tab) + toStringExpression();
   }
 
index 8d63fb8..af7dd86 100644 (file)
@@ -1,5 +1,8 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import java.util.List;
+import java.util.ArrayList;
+
 /**
  * @author Matthieu Casanova
  */
@@ -7,7 +10,7 @@ public class FalseLiteral extends MagicLiteral {
 
   public static final char[] source = {'f', 'a', 'l', 's', 'e'};
 
-  public FalseLiteral(int sourceStart, int sourceEnd) {
+  public FalseLiteral(final int sourceStart, final int sourceEnd) {
     super(sourceStart, sourceEnd);
   }
 
@@ -16,7 +19,7 @@ public class FalseLiteral extends MagicLiteral {
    * @return the expression
    */
   public String toStringExpression() {
-    return "false";
+    return "false";//$NON-NLS-1$
   }
 
   public char[] source() {
index 69b3616..4981987 100644 (file)
@@ -5,10 +5,13 @@ 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 Field declaration.
  * This is a variable declaration for a php class
- * In fact it's an array of VariableDeclaration, since a field could contains
+ * In fact it's an array of VariableUsage, since a field could contains
  * several vars :
  * var $toto,$tata;
  * @author Matthieu Casanova
@@ -26,7 +29,10 @@ public class FieldDeclaration extends Statement implements Outlineable {
    * @param sourceStart the starting offset
    * @param sourceEnd   the ending offset
    */
-  public FieldDeclaration(VariableDeclaration[] vars, int sourceStart, int sourceEnd, Object parent) {
+  public FieldDeclaration(final VariableDeclaration[] vars,
+                          final int sourceStart,
+                          final int sourceEnd,
+                          final Object parent) {
     super(sourceStart, sourceEnd);
     this.vars = vars;
     this.parent = parent;
@@ -38,15 +44,14 @@ public class FieldDeclaration extends Statement implements Outlineable {
    * @param tab how many tabs (not used here
    * @return a String
    */
-  public String toString(int tab) {
+  public String toString(final int tab) {
     final StringBuffer buff = new StringBuffer(tabString(tab));
     buff.append("var ");//$NON-NLS-1$
     for (int i = 0; i < vars.length; i++) {
-      VariableDeclaration var = vars[i];
       if (i != 0) {
-        buff.append(',');//$NON-NLS-1$
+        buff.append(",");//$NON-NLS-1$
       }
-      buff.append(var.toStringExpression());
+      buff.append(vars[i].toStringExpression());
     }
     return buff.toString();
   }
@@ -66,4 +71,28 @@ public class FieldDeclaration extends Statement implements Outlineable {
   public Position getPosition() {
     return position;
   }
+
+    /**
+   * 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() {
+    return new ArrayList();
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public List getUsedVariable() {
+    return new ArrayList();
+  }
 }
index f808542..212d451 100644 (file)
@@ -1,5 +1,8 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import java.util.List;
+import java.util.ArrayList;
+
 /**
  * A For statement.
  * for(initializations;condition;increments) action
@@ -17,12 +20,12 @@ public class ForStatement extends Statement {
 
   public Statement action;
 
-  public ForStatement(Expression[] initializations,
-                      Expression condition,
-                      Expression[] increments,
-                      Statement action,
-                      int sourceStart,
-                      int sourceEnd) {
+  public ForStatement(final Expression[] initializations,
+                      final Expression condition,
+                      final Expression[] increments,
+                      final Statement action,
+                      final int sourceStart,
+                      final int sourceEnd) {
     super(sourceStart, sourceEnd);
     this.initializations = initializations;
     this.condition = condition;
@@ -30,7 +33,7 @@ public class ForStatement extends Statement {
     this.action = action;
   }
 
-  public String toString(int tab) {
+  public String toString(final int tab) {
     final StringBuffer buff = new StringBuffer(tabString(tab));
     buff.append("for (");  //$NON-NLS-1$
     //inits
@@ -41,12 +44,12 @@ public class ForStatement extends Statement {
           buff.append(" , "); //$NON-NLS-1$
       }
     }
-    buff.append( "; "); //$NON-NLS-1$
+    buff.append("; "); //$NON-NLS-1$
     //cond
-    if (condition != null)           {
+    if (condition != null) {
       buff.append(condition.toStringExpression());
     }
-    buff.append( "; "); //$NON-NLS-1$
+    buff.append("; "); //$NON-NLS-1$
     //updates
     if (increments != null) {
       for (int i = 0; i < increments.length; i++) {
@@ -64,4 +67,55 @@ public class ForStatement extends Statement {
       buff.append(action.toString(tab + 1)); //$NON-NLS-1$
     return buff.toString();
   }
+
+  /**
+   * Get the variables from outside (parameters, globals ...)
+   * @return the variables from outside
+   */
+  public List getOutsideVariable() {
+    final ArrayList list = new ArrayList();
+    list.addAll(condition.getOutsideVariable());
+    list.addAll(action.getOutsideVariable());
+    for (int i = 0; i < initializations.length; i++) {
+      list.addAll(initializations[i].getOutsideVariable());
+    }
+    for (int i = 0; i < increments.length; i++) {
+      list.addAll(increments[i].getOutsideVariable());
+    }
+    return list;
+  }
+
+  /**
+   * get the modified variables.
+   * @return the variables from we change value
+   */
+  public List getModifiedVariable() {
+    final ArrayList list = new ArrayList();
+    list.addAll(condition.getModifiedVariable());
+    list.addAll(action.getModifiedVariable());
+    for (int i = 0; i < initializations.length; i++) {
+      list.addAll(initializations[i].getModifiedVariable());
+    }
+    for (int i = 0; i < increments.length; i++) {
+      list.addAll(increments[i].getModifiedVariable());
+    }
+    return list;
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public List getUsedVariable() {
+    final ArrayList list = new ArrayList();
+    list.addAll(condition.getUsedVariable());
+    list.addAll(action.getUsedVariable());
+    for (int i = 0; i < initializations.length; i++) {
+      list.addAll(initializations[i].getUsedVariable());
+    }
+    for (int i = 0; i < increments.length; i++) {
+      list.addAll(increments[i].getUsedVariable());
+    }
+    return list;
+  }
 }
index be4229a..827c2aa 100644 (file)
@@ -1,5 +1,8 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import java.util.List;
+import java.util.ArrayList;
+
 /**
  * @author Matthieu Casanova
  */
@@ -9,11 +12,11 @@ public class ForeachStatement extends Statement {
   public Expression variable;
   public Statement  statement;
 
-  public ForeachStatement(Expression expression,
-                          Expression variable,
-                          Statement statement,
-                          int sourceStart,
-                          int sourceEnd) {
+  public ForeachStatement(final Expression expression,
+                          final Expression variable,
+                          final Statement statement,
+                          final int sourceStart,
+                          final int sourceEnd) {
     super(sourceStart, sourceEnd);
     this.expression = expression;
     this.variable = variable;
@@ -25,7 +28,7 @@ public class ForeachStatement extends Statement {
    * @param tab how many tabs (not used here
    * @return a String
    */
-  public String toString(int tab) {
+  public String toString(final int tab) {
     final StringBuffer buff = new StringBuffer(tabString(tab));
     buff.append("foreach (");
     buff.append(expression.toStringExpression());
@@ -36,4 +39,39 @@ public class ForeachStatement extends Statement {
     buff.append("\n}");
     return buff.toString();
   }
+
+  /**
+   * Get the variables from outside (parameters, globals ...)
+   * @return the variables from outside
+   */
+  public List getOutsideVariable() {
+    final ArrayList list = new ArrayList();
+    list.addAll(expression.getOutsideVariable());
+    list.addAll(variable.getOutsideVariable());
+    list.addAll(statement.getOutsideVariable());
+    return list;
+  }
+
+  /**
+   * get the modified variables.
+   * @return the variables from we change value
+   */
+  public List getModifiedVariable() {
+    final ArrayList list = new ArrayList();
+    list.addAll(expression.getModifiedVariable());
+    list.addAll(variable.getModifiedVariable());
+    list.addAll(statement.getModifiedVariable());
+    return list;
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public List getUsedVariable() {
+    final ArrayList list = new ArrayList();
+    list.addAll(expression.getUsedVariable());
+    list.addAll(statement.getUsedVariable());
+    return list;
+  }
 }
index c91788d..cb0b5dd 100644 (file)
@@ -1,5 +1,8 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import java.util.List;
+import java.util.ArrayList;
+
 /**
  * @author Matthieu Casanova
  */
@@ -8,9 +11,9 @@ public class FunctionCall extends AbstractSuffixExpression {
   public Expression prefix;
   public Expression[] args;
 
-  public FunctionCall(Expression prefix,
-                      Expression[] args,
-                      int sourceEnd) {
+  public FunctionCall(final Expression prefix,
+                      final Expression[] args,
+                      final int sourceEnd) {
     super(prefix.sourceStart, sourceEnd);
     this.prefix = prefix;
     this.args = args;
@@ -25,7 +28,7 @@ public class FunctionCall extends AbstractSuffixExpression {
     buff.append('(');
     if (args != null) {
       for (int i = 0; i < args.length; i++) {
-        Expression arg = args[i];
+        final Expression arg = args[i];
         if (i != 0) {
           buff.append(',');
         }
@@ -35,4 +38,37 @@ public class FunctionCall extends AbstractSuffixExpression {
     buff.append(')');
     return buff.toString();
   }
+
+            /**
+   * 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();
+    for (int i = 0; i < args.length; i++) {
+      list.addAll(args[i].getModifiedVariable());
+    }
+    return list;
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public List getUsedVariable() {
+    final ArrayList list = new ArrayList();
+    list.addAll(prefix.getUsedVariable());
+    for (int i = 0; i < args.length; i++) {
+      list.addAll(args[i].getUsedVariable());
+    }
+    return list;
+  }
 }
index 6bb61fe..d50bafe 100644 (file)
@@ -1,10 +1,14 @@
 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 GlobalStatement statement in php.
  * @author Matthieu Casanova
@@ -18,7 +22,10 @@ public class GlobalStatement extends Statement implements Outlineable {
 
   private Position position;
 
-  public GlobalStatement(Object parent, String[] variables, int sourceStart, int sourceEnd) {
+  public GlobalStatement(final Object parent,
+                         final String[] variables,
+                         final int sourceStart,
+                         final int sourceEnd) {
     super(sourceStart, sourceEnd);
     this.variables = variables;
     this.parent = parent;
@@ -26,17 +33,17 @@ public class GlobalStatement extends Statement implements Outlineable {
   }
 
   public String toString() {
-    StringBuffer buff = new StringBuffer("global ");
+    final StringBuffer buff = new StringBuffer("global ");//$NON-NLS-1$
     for (int i = 0; i < variables.length; i++) {
       if (i != 0) {
-        buff.append(", ");
+        buff.append(", ");//$NON-NLS-1$
       }
       buff.append(variables[i]);
     }
     return buff.toString();
   }
 
-  public String toString(int tab) {
+  public String toString(final int tab) {
     return tabString(tab) + toString();
   }
 
@@ -55,4 +62,32 @@ public class GlobalStatement extends Statement implements Outlineable {
   public Position getPosition() {
     return position;
   }
+
+  /**
+   * Get the variables from outside (parameters, globals ...)
+   * @return the variables from outside
+   */
+  public List getOutsideVariable() {
+    final ArrayList list = new ArrayList(variables.length);
+    for (int i = 0; i < variables.length; i++) {
+      list.add(new VariableUsage(variables[i],sourceStart));
+    }
+    return list;
+  }
+
+  /**
+   * get the modified variables.
+   * @return the variables modified
+   */
+  public List getModifiedVariable() {
+    return new ArrayList();
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public List getUsedVariable() {
+    return new ArrayList();
+  }
 }
index 4dae9eb..27d93fa 100644 (file)
@@ -1,5 +1,8 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import java.util.List;
+import java.util.ArrayList;
+
 /**
  * @author Matthieu Casanova
  */
@@ -7,7 +10,7 @@ public class HTMLBlock extends Statement {
 
   public AstNode[] nodes;
 
-  public HTMLBlock(AstNode[] nodes) {
+  public HTMLBlock(final AstNode[] nodes) {
     super(nodes[0].sourceStart, nodes[nodes.length-1].sourceEnd);
     this.nodes = nodes;
   }
@@ -17,14 +20,37 @@ public class HTMLBlock extends Statement {
    * @param tab how many tabs (not used here
    * @return a String
    */
-  public String toString(int tab) {
+  public String toString(final int tab) {
     final StringBuffer buff = new StringBuffer(tabString(tab));
     buff.append("?>");
     for (int i = 0; i < nodes.length; i++) {
-      AstNode node = nodes[i];
-      buff.append(node.toString(tab +1));
+      buff.append(nodes[i].toString(tab +1));
     }
     buff.append("<?php\n");
     return buff.toString();
   }
+
+  /**
+   * Get the variables from outside (parameters, globals ...)
+   * @return an empty list
+   */
+  public List getOutsideVariable() {
+    return new ArrayList();
+  }
+
+  /**
+   * get the modified variables.
+   * @return an empty list
+   */
+  public List getModifiedVariable() {
+    return new ArrayList();
+  }
+
+  /**
+   * Get the variables used.
+   * @return an empty list
+   */
+  public List getUsedVariable() {
+    return new ArrayList();
+  }
 }
index decd393..7c324b8 100644 (file)
@@ -1,5 +1,8 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import java.util.List;
+import java.util.ArrayList;
+
 
 /**
  * It's html code.
@@ -17,7 +20,9 @@ public class HTMLCode extends AstNode {
    * @param sourceStart the starting offset
    * @param sourceEnd the ending offset
    */
-  public HTMLCode(char[] htmlCode, int sourceStart, int sourceEnd) {
+  public HTMLCode(final char[] htmlCode,
+                  final int sourceStart,
+                  final int sourceEnd) {
     super(sourceStart, sourceEnd);
     this.htmlCode = htmlCode;
   }
@@ -35,7 +40,31 @@ public class HTMLCode extends AstNode {
    * @param tab how many tabs before this html
    * @return the text of the block
    */
-  public String toString(int tab) {
-    return new String(htmlCode)+" ";
+  public String toString(final int tab) {
+    return new String(htmlCode) + " ";//$NON-NLS-1$
+  }
+
+  /**
+   * Get the variables from outside (parameters, globals ...)
+   * @return an empty list
+   */
+  public List getOutsideVariable() {
+    return new ArrayList();
+  }
+
+  /**
+   * get the modified variables.
+   * @return an empty list
+   */
+  public List getModifiedVariable() {
+    return new ArrayList();
+  }
+
+  /**
+   * Get the variables used.
+   * @return an empty list
+   */
+  public List getUsedVariable() {
+    return new ArrayList();
   }
 }
index e424d23..c61c049 100644 (file)
@@ -1,5 +1,8 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import java.util.List;
+import java.util.ArrayList;
+
 /**
  * This is a if statement.
  * if (condition)
@@ -24,12 +27,12 @@ public class IfStatement extends Statement {
    * @param sourceStart the starting position
    * @param sourceEnd the ending offset
    */
-  public IfStatement(Expression condition,
-                     Statement statement,
-                     ElseIf[] elseifs,
-                     Else els,
-                     int sourceStart,
-                     int sourceEnd) {
+  public IfStatement(final Expression condition,
+                     final Statement statement,
+                     final ElseIf[] elseifs,
+                     final Else els,
+                     final int sourceStart,
+                     final int sourceEnd) {
     super(sourceStart, sourceEnd);
     this.condition = condition;
     this.statement = statement;
@@ -42,19 +45,70 @@ public class IfStatement extends Statement {
    * @param tab how many tabs (not used here
    * @return a String
    */
-  public String toString(int tab) {
+  public String toString(final int tab) {
     final StringBuffer buff = new StringBuffer(tabString(tab));
-    buff.append("if (");
-    buff.append(condition.toStringExpression()).append(") ");
-    buff.append(statement.toString(tab+1));
+    buff.append("if (");//$NON-NLS-1$
+    buff.append(condition.toStringExpression()).append(") ");//$NON-NLS-1$
+    buff.append(statement.toString(tab + 1));
     for (int i = 0; i < elseifs.length; i++) {
-      buff.append(elseifs[i].toString(tab+1));
-      buff.append("\n");
+      buff.append(elseifs[i].toString(tab + 1));
+      buff.append("\n");//$NON-NLS-1$
     }
     if (els != null) {
-      buff.append(els.toString(tab+1));
-      buff.append('\n');
+      buff.append(els.toString(tab + 1));
+      buff.append("\n");//$NON-NLS-1$
     }
     return buff.toString();
   }
+
+  /**
+   * Get the variables from outside (parameters, globals ...)
+   * @return the variables from outside
+   */
+  public List getOutsideVariable() {
+    final ArrayList list = new ArrayList();
+    list.addAll(condition.getOutsideVariable()); // todo: check if unuseful
+    list.addAll(statement.getOutsideVariable());
+    for (int i = 0; i < elseifs.length; i++) {
+      list.addAll(elseifs[i].getOutsideVariable());
+    }
+    if (els != null) {
+      list.addAll(els.getOutsideVariable());
+    }
+    return list;
+  }
+
+  /**
+   * get the modified variables.
+   * @return the variables from we change value
+   */
+  public List getModifiedVariable() {
+    final ArrayList list = new ArrayList();
+    list.addAll(condition.getModifiedVariable());
+    list.addAll(statement.getModifiedVariable());
+    for (int i = 0; i < elseifs.length; i++) {
+      list.addAll(elseifs[i].getModifiedVariable());
+    }
+    if (els != null) {
+      list.addAll(els.getModifiedVariable());
+    }
+    return list;
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public List getUsedVariable() {
+    final ArrayList list = new ArrayList();
+    list.addAll(condition.getUsedVariable());
+    list.addAll(statement.getUsedVariable());
+    for (int i = 0; i < elseifs.length; i++) {
+      list.addAll(elseifs[i].getUsedVariable());
+    }
+    if (els != null) {
+      list.addAll(els.getUsedVariable());
+    }
+    return list;
+  }
 }
index 3a403a2..ddb2cb2 100644 (file)
@@ -5,6 +5,9 @@ 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;
+
 /**
  * @author Matthieu Casanova
  */
@@ -22,10 +25,11 @@ public class InclusionStatement extends Statement implements Outlineable {
   private Object parent;
 
   private Position position;
-  public InclusionStatement(Object parent,
-                            int keyword,
-                            Expression expression,
-                            int sourceStart) {
+
+  public InclusionStatement(final Object parent,
+                            final int keyword,
+                            final Expression expression,
+                            final int sourceStart) {
     super(sourceStart, expression.sourceEnd);
     this.keyword = keyword;
     this.expression = expression;
@@ -52,7 +56,7 @@ public class InclusionStatement extends Statement implements Outlineable {
    * @param tab how many tabs (not used here
    * @return a String
    */
-  public String toString(int tab) {
+  public String toString(final int tab) {
     final StringBuffer buffer = new StringBuffer(tabString(tab));
     buffer.append(toString());
     return buffer.toString();
@@ -84,4 +88,28 @@ public class InclusionStatement extends Statement implements Outlineable {
   public Position getPosition() {
     return position;
   }
+
+  /**
+   * Get the variables from outside (parameters, globals ...)
+   * @return the variables from outside
+   */
+  public List getOutsideVariable() {
+    return expression.getOutsideVariable();
+  }
+
+  /**
+   * get the modified variables.
+   * @return the variables from we change value
+   */
+  public List getModifiedVariable() {
+    return expression.getModifiedVariable();
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public List getUsedVariable() {
+    return expression.getUsedVariable();
+  }
 }
index 89838a8..ea7a95c 100644 (file)
@@ -1,5 +1,7 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import java.util.List;
+
 /**
  * @author Matthieu Casanova
  */
@@ -9,7 +11,7 @@ public class LabeledStatement extends Statement {
 
   public Statement statement;
 
-  public LabeledStatement(char[] label, Statement statement, int sourceStart, int sourceEnd) {
+  public LabeledStatement(final char[] label, final Statement statement, final int sourceStart, final int sourceEnd) {
     super(sourceStart, sourceEnd);
     this.label = label;
     this.statement = statement;
@@ -29,7 +31,31 @@ public class LabeledStatement extends Statement {
    * @param tab how many tabs (not used here
    * @return a String
    */
-  public String toString(int tab) {
+  public String toString(final int tab) {
     return tabString(tab) + toString();
   }
+
+    /**
+   * Get the variables from outside (parameters, globals ...)
+   * @return the variables from outside
+   */
+  public List getOutsideVariable() {
+    return statement.getOutsideVariable();
+  }
+
+  /**
+   * get the modified variables.
+   * @return the variables modified
+   */
+  public List getModifiedVariable() {
+    return statement.getModifiedVariable();
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public List getUsedVariable() {
+    return statement.getUsedVariable();
+  }
 }
index b176568..80f1887 100644 (file)
@@ -1,5 +1,10 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import net.sourceforge.phpdt.internal.compiler.ast.declarations.VariableUsage;
+
+import java.util.List;
+import java.util.ArrayList;
+
 /**
  * A list expression.
  * it could be list($v1,$v2), list(,$v2) ...
@@ -10,18 +15,18 @@ public class ListExpression extends Expression {
   public String[] vars;
   public Expression expression;
 
-  public ListExpression(String[] vars,
-                        Expression expression,
-                        int sourceStart,
-                        int sourceEnd) {
+  public ListExpression(final String[] vars,
+                        final Expression expression,
+                        final int sourceStart,
+                        final int sourceEnd) {
     super(sourceStart, sourceEnd);
     this.vars = vars;
     this.expression = expression;
   }
 
-  public ListExpression(String[] vars,
-                        int sourceStart,
-                        int sourceEnd) {
+  public ListExpression(final String[] vars,
+                        final int sourceStart,
+                        final int sourceEnd) {
     super(sourceStart, sourceEnd);
     this.vars = vars;
   }
@@ -33,7 +38,7 @@ public class ListExpression extends Expression {
   public String toStringExpression() {
     final StringBuffer buff = new StringBuffer("list(");
     for (int i = 0; i < vars.length; i++) {
-      String var = vars[i];
+      final String var = vars[i];
       if (i != 0) {
         buff.append(", ");
       }
@@ -47,4 +52,39 @@ public class ListExpression extends Expression {
     }
     return buff.toString();
   }
+
+           /**
+   * 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();
+    for (int i = 0; i < vars.length; i++) {
+      list.add(new VariableUsage(vars[i],sourceStart));
+    }
+    if (expression != null) {
+      list.addAll(expression.getModifiedVariable());
+    }
+    return list;
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public List getUsedVariable() {
+    final ArrayList list = new ArrayList();
+    if (expression != null) {
+      list.addAll(expression.getUsedVariable());
+    }
+    return list;
+  }
 }
index 72571ba..9ab2ad8 100644 (file)
@@ -1,5 +1,8 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import java.util.List;
+import java.util.ArrayList;
+
 /**
  * Here is the Superclass of the Literal expressions.
  * @author Matthieu Casanova
@@ -11,9 +14,33 @@ public abstract class Literal extends Expression {
    * @param sourceStart starting offset
    * @param sourceEnd ending offset
    */
-  public Literal(int sourceStart, int sourceEnd) {
+  public Literal(final int sourceStart, final int sourceEnd) {
     super(sourceStart, sourceEnd);
   }
 
   public abstract char[] source();
+
+  /**
+   * Get the variables from outside (parameters, globals ...)
+   * @return an empty list
+   */
+  public List getOutsideVariable() {
+    return new ArrayList();
+  }
+
+  /**
+   * get the modified variables.
+   * @return an empty list
+   */
+  public List getModifiedVariable() {
+    return new ArrayList();
+  }
+
+  /**
+   * Get the variables used.
+   * @return an empty list
+   */
+  public List getUsedVariable() {
+    return new ArrayList();
+  }
 }
index 399f0aa..71b1e01 100644 (file)
@@ -5,7 +5,7 @@ package net.sourceforge.phpdt.internal.compiler.ast;
  */
 public abstract class MagicLiteral extends Literal {
 
-  public MagicLiteral(int sourceStart, int sourceEnd) {
+  public MagicLiteral(final int sourceStart, final int sourceEnd) {
     super(sourceStart, sourceEnd);
   }
 }
index 5c3a64e..93b8758 100644 (file)
@@ -2,15 +2,20 @@ package net.sourceforge.phpdt.internal.compiler.ast;
 
 import net.sourceforge.phpdt.internal.compiler.parser.OutlineableWithChildren;
 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 net.sourceforge.phpeclipse.PHPeclipsePlugin;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.text.Position;
+import org.eclipse.core.runtime.CoreException;
 
 import java.util.Hashtable;
 import java.util.Enumeration;
 import java.util.ArrayList;
 import java.util.List;
 
+import test.PHPParserSuperclass;
+
 /**
  * A Method declaration.
  * @author Matthieu Casanova
@@ -38,12 +43,12 @@ public class MethodDeclaration extends Statement implements OutlineableWithChild
 
   private Position position;
 
-  public MethodDeclaration(Object parent,
-                           char[] name,
-                           Hashtable arguments,
-                           boolean reference,
-                           int sourceStart,
-                           int sourceEnd) {
+  public MethodDeclaration(final Object parent,
+                           final char[] name,
+                           final Hashtable arguments,
+                           final boolean reference,
+                           final int sourceStart,
+                           final int sourceEnd) {
     super(sourceStart, sourceEnd);
     this.name = name;
     this.arguments = arguments;
@@ -57,8 +62,8 @@ public class MethodDeclaration extends Statement implements OutlineableWithChild
    * @param tab the number of tabs
    * @return the String containing the method
    */
-  public String toString(int tab) {
-    StringBuffer buff = new StringBuffer(tabString(tab));
+  public String toString(final int tab) {
+    final StringBuffer buff = new StringBuffer(tabString(tab));
     buff.append(toStringHeader());
     buff.append(toStringStatements(tab + 1));
     return buff.toString();
@@ -73,8 +78,8 @@ public class MethodDeclaration extends Statement implements OutlineableWithChild
    * @param tab the number of tabs
    * @return the String containing the statements
    */
-  public String toStringStatements(int tab) {
-    StringBuffer buff = new StringBuffer(" {"); //$NON-NLS-1$
+  public String toStringStatements(final int tab) {
+    final StringBuffer buff = new StringBuffer(" {"); //$NON-NLS-1$
     if (statements != null) {
       for (int i = 0; i < statements.length; i++) {
         buff.append("\n").append(statements[i].toString(tab)); //$NON-NLS-1$
@@ -95,7 +100,7 @@ public class MethodDeclaration extends Statement implements OutlineableWithChild
     return PHPUiImages.DESC_FUN;
   }
 
-  public void setParent(Object parent) {
+  public void setParent(final Object parent) {
     this.parent = parent;
   }
 
@@ -103,11 +108,11 @@ public class MethodDeclaration extends Statement implements OutlineableWithChild
     return parent;
   }
 
-  public boolean add(Outlineable o) {
+  public boolean add(final Outlineable o) {
     return children.add(o);
   }
 
-  public Outlineable get(int index) {
+  public Outlineable get(final int index) {
     return (Outlineable) children.get(index);
   }
 
@@ -116,17 +121,17 @@ public class MethodDeclaration extends Statement implements OutlineableWithChild
   }
 
   public String toString() {
-    StringBuffer buff = new StringBuffer();
+    final StringBuffer buff = new StringBuffer();
     if (reference) {
       buff.append("&");//$NON-NLS-1$
     }
     buff.append(name).append("(");//$NON-NLS-1$
 
     if (arguments != null) {
-      Enumeration values = arguments.elements();
+      final Enumeration values = arguments.elements();
       int i = 0;
       while (values.hasMoreElements()) {
-        VariableDeclaration o = (VariableDeclaration) values.nextElement();
+        final VariableDeclaration o = (VariableDeclaration) values.nextElement();
         buff.append(o.toStringExpression());
         if (i != (arguments.size() - 1)) {
           buff.append(", "); //$NON-NLS-1$
@@ -145,4 +150,111 @@ public class MethodDeclaration extends Statement implements OutlineableWithChild
   public List getList() {
     return children;
   }
+
+  /**
+   * Get the variables from outside (parameters, globals ...)
+   * @return the variables from outside
+   */
+  public List getOutsideVariable() {
+    final ArrayList list = new ArrayList();
+    if (arguments != null) {
+      final Enumeration vars = arguments.keys();
+      while (vars.hasMoreElements()) {
+        list.add(new VariableUsage((String) vars.nextElement(), sourceStart));
+      }
+    }
+
+    if (statements != null) {
+      for (int i = 0; i < statements.length; i++) {
+        list.addAll(statements[i].getOutsideVariable());
+      }
+    }
+    return list;
+  }
+
+  /**
+   * get the modified variables.
+   * @return the variables from we change value
+   */
+  public List getModifiedVariable() {
+    final ArrayList list = new ArrayList();
+    if (statements != null) {
+      for (int i = 0; i < statements.length; i++) {
+        list.addAll(statements[i].getModifiedVariable());
+      }
+    }
+    return list;
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public List getUsedVariable() {
+    final ArrayList list = new ArrayList();
+    if (statements != null) {
+      for (int i = 0; i < statements.length; i++) {
+        list.addAll(statements[i].getUsedVariable());
+      }
+    }
+    return list;
+  }
+
+  private boolean isVariableDeclaredBefore(List list, VariableUsage var) {
+    final String name = var.getName();
+    final int pos = var.getStartOffset();
+    for (int i = 0; i < list.size(); i++) {
+      VariableUsage variableUsage = (VariableUsage) list.get(i);
+      if (variableUsage.getName().equals(name) && variableUsage.getStartOffset() < pos) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  private void dumpList(List list, String name) {
+    StringBuffer buff = new StringBuffer(name).append("\n");
+    for (int i = 0; i < list.size(); i++) {
+      buff.append(list.get(i).toString()).append("\n");
+    }
+    if (PHPeclipsePlugin.DEBUG) {
+      PHPeclipsePlugin.log(1, buff.toString());
+    }
+  }
+
+  /**
+   * This method will analyze the code.
+   */
+  public void analyzeCode() {
+    final List outsideVars = getOutsideVariable();
+    final List modifiedVars = getModifiedVariable();
+
+    final List declaredVars = new ArrayList(outsideVars.size() + modifiedVars.size());
+    declaredVars.addAll(outsideVars);
+    declaredVars.addAll(modifiedVars);
+
+    final List usedVars = getUsedVariable();
+
+/*    dumpList(outsideVars, "outside");
+    dumpList(modifiedVars, "modified");
+    dumpList(usedVars, "used");  */
+
+
+    //look for used variables that were not declared before
+    for (int i = 0; i < usedVars.size(); i++) {
+      VariableUsage variableUsage = (VariableUsage) usedVars.get(i);
+      if (!isVariableDeclaredBefore(declaredVars, variableUsage)) {
+        try {
+          PHPParserSuperclass.setMarker("warning, usage of an unknown : " + variableUsage.getName(),
+                                        variableUsage.getStartOffset(),
+                                        variableUsage.getStartOffset() + variableUsage.getName().length(),
+                                        PHPParserSuperclass.WARNING,
+                                        "");
+        } catch (CoreException e) {
+          PHPeclipsePlugin.log(e);
+        }
+      }
+
+    }
+  }
 }
index 1d97940..52958ff 100644 (file)
@@ -7,7 +7,7 @@ public class NullLiteral extends MagicLiteral {
 
   public static final char[] source = {'n' , 'u' , 'l' , 'l'};
 
-  public NullLiteral(int sourceStart, int sourceEnd) {
+  public NullLiteral(final int sourceStart, final int sourceEnd) {
     super(sourceStart, sourceEnd);
   }
 
index 1295638..57bab53 100644 (file)
@@ -7,7 +7,9 @@ package net.sourceforge.phpdt.internal.compiler.ast;
 public class NumberLiteral extends Literal {
   public char[] source;
 
-  public NumberLiteral(char[] token, int sourceStart, int sourceEnd) {
+  public NumberLiteral(final char[] token,
+                       final int sourceStart,
+                       final int sourceEnd) {
     super(sourceStart, sourceEnd);
     source = token;
   }
index 9efa5fd..fc503ab 100644 (file)
@@ -10,7 +10,7 @@ public abstract class OperatorExpression
 
   public int operator;
 
-  public OperatorExpression(int operator, int sourceStart, int sourceEnd) {
+  public OperatorExpression(final int operator, final int sourceStart, final int sourceEnd) {
     super(sourceStart, sourceEnd);
     this.operator = operator;
   }
index d6a394d..92dccf0 100644 (file)
@@ -36,7 +36,8 @@ public class PHPDocument implements OutlineableWithChildren {
    * Create the PHPDocument.
    * @param parent the parent object (it should be null isn't it ?)
    */
-  public PHPDocument(Object parent, char[] name) {
+  public PHPDocument(final Object parent,
+                     final char[] name) {
     this.parent = parent;
     this.name = name;
     position = new Position(1,name.length);
@@ -58,9 +59,9 @@ public class PHPDocument implements OutlineableWithChildren {
         }
         buff.append(node.toString(0));
         if (node instanceof HTMLCode) {
-          buff.append("\n");
+          buff.append("\n");//$NON-NLS-1$
         } else {
-          buff.append(";\n");
+          buff.append(";\n");//$NON-NLS-1$
         }
       }
     }
@@ -72,7 +73,7 @@ public class PHPDocument implements OutlineableWithChildren {
    * @param o the new outlineable
    * @return does the addition worked ?
    */
-  public boolean add(Outlineable o) {
+  public boolean add(final Outlineable o) {
     return children.add(o);
   }
 
@@ -81,7 +82,7 @@ public class PHPDocument implements OutlineableWithChildren {
    * @param index the index
    * @return an outlineable object
    */
-  public Outlineable get(int index) {
+  public Outlineable get(final int index) {
     return (Outlineable) children.get(index);
   }
 
index 80da2cf..674f9d1 100644 (file)
@@ -1,13 +1,29 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import net.sourceforge.phpdt.internal.compiler.ast.declarations.VariableUsage;
+
+import java.util.List;
+import java.util.ArrayList;
+
 /**
+ * a php echo block.
+ * <?= someexpression ?>
  * @author Matthieu Casanova
  */
 public class PHPEchoBlock extends AstNode {
 
+  /** the expression. */
   public Expression expr;
 
-  public PHPEchoBlock(Expression expr,int sourceStart, int sourceEnd) {
+  /**
+   * Create a new php echo block.
+   * @param expr the expression
+   * @param sourceStart the starting offset
+   * @param sourceEnd the ending offset
+   */
+  public PHPEchoBlock(final Expression expr,
+                      final int sourceStart,
+                      final int sourceEnd) {
     super(sourceStart, sourceEnd);
     this.expr = expr;
   }
@@ -17,11 +33,40 @@ public class PHPEchoBlock extends AstNode {
    * @param tab how many tabs (not used here
    * @return a String
    */
-  public String toString(int tab) {
-    final StringBuffer buff = new StringBuffer(tabString(tab));
-    buff.append("<?=");
-    buff.append(expr.toStringExpression());
-    buff.append("?>");
+  public String toString(final int tab) {
+    final String tabs = tabString(tab);
+    final String expression = expr.toStringExpression();
+    final StringBuffer buff = new StringBuffer(tabs.length() +
+                                               expression.length() +
+                                               5);
+    buff.append(tabs);
+    buff.append("<?=");//$NON-NLS-1$
+    buff.append(expression);
+    buff.append("?>");//$NON-NLS-1$
     return buff.toString();
   }
+
+  /**
+   * Get the variables from outside (parameters, globals ...)
+   * @return an empty list
+   */
+  public List getOutsideVariable() {
+    return new ArrayList();
+  }
+
+  /**
+   * get the modified variables.
+   * @return an empty list
+   */
+  public List getModifiedVariable() {
+    return new ArrayList();
+  }
+
+  /**
+   * Get the variables used.
+   * @return the used variables are the used variables from the expression
+   */
+  public List getUsedVariable() {
+    return expr.getUsedVariable();
+  }
 }
index d95e08a..a358e25 100644 (file)
@@ -5,12 +5,12 @@ package net.sourceforge.phpdt.internal.compiler.ast;
  */
 public class PostfixedUnaryExpression extends UnaryExpression {
 
-  public PostfixedUnaryExpression(Expression expression, int operator, int sourceEnd) {
+  public PostfixedUnaryExpression(final Expression expression, final int operator, final int sourceEnd) {
     super(expression, operator, expression.sourceStart, sourceEnd);
   }
 
   public String toStringExpression() {
-    StringBuffer buff = new StringBuffer(expression.toStringExpression());
+    final StringBuffer buff = new StringBuffer(expression.toStringExpression());
     buff.append(operatorToString());
     return buff.toString();
   }
index 318d2c3..966ea88 100644 (file)
@@ -5,12 +5,12 @@ package net.sourceforge.phpdt.internal.compiler.ast;
  */
 public class PrefixedUnaryExpression extends UnaryExpression {
 
-  public PrefixedUnaryExpression(Expression expression, int operator, int sourceStart) {
+  public PrefixedUnaryExpression(final Expression expression, final int operator, final int sourceStart) {
     super(expression, operator, sourceStart, expression.sourceEnd);
   }
 
   public String toStringExpression() {
-    StringBuffer buff = new StringBuffer(operatorToString());
+    final StringBuffer buff = new StringBuffer(operatorToString());
     buff.append(expression.toStringExpression());
     return buff.toString();
   }
index 5f6f43e..86d5d7e 100644 (file)
@@ -1,5 +1,8 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import java.util.List;
+import java.util.ArrayList;
+
 /**
  * @author Matthieu Casanova
  */
@@ -7,7 +10,7 @@ public class PrintExpression extends Expression {
 
   public Expression expression;
 
-  public PrintExpression(Expression expression, int sourceStart, int sourceEnd) {
+  public PrintExpression(final Expression expression, final int sourceStart, final int sourceEnd) {
     super(sourceStart, sourceEnd);
     this.expression = expression;
   }
@@ -19,4 +22,28 @@ public class PrintExpression extends Expression {
   public String toStringExpression() {
     return "print " + expression.toStringExpression();
   }
+
+  /**
+   * Get the variables from outside (parameters, globals ...)
+   * @return the variables from outside
+   */
+  public List getOutsideVariable() {
+    return expression.getOutsideVariable();
+  }
+
+  /**
+   * get the modified variables.
+   * @return the variables from we change value
+   */
+  public List getModifiedVariable() {
+    return expression.getModifiedVariable();
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public List getUsedVariable() {
+    return expression.getUsedVariable();
+  }
 }
index 85d1867..a30be75 100644 (file)
@@ -1,5 +1,10 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import net.sourceforge.phpdt.internal.compiler.ast.declarations.VariableUsage;
+
+import java.util.List;
+import java.util.ArrayList;
+
 /**
  * A return statement.
  * @author Matthieu Casanova
@@ -8,16 +13,40 @@ public class ReturnStatement extends Statement {
 
   public Expression expression;
 
-  public ReturnStatement(Expression expression, int sourceStart, int sourceEnd) {
+  public ReturnStatement(final Expression expression, final int sourceStart, final int sourceEnd) {
     super(sourceStart, sourceEnd);
     this.expression = expression;
   }
 
-  public String toString(int tab) {
+  public String toString(final int tab) {
     final String s = tabString(tab);
     if (expression == null) {
       return s + "return";//$NON-NLS-1$
     }
     return s + "return " + expression.toStringExpression();//$NON-NLS-1$
   }
+
+    /**
+   * 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 modified
+   */
+  public List getModifiedVariable() {
+    return expression.getModifiedVariable();
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public List getUsedVariable() {
+    return expression.getUsedVariable();
+  }
 }
index a6afa57..bb6e49f 100644 (file)
@@ -8,14 +8,19 @@ package net.sourceforge.phpdt.internal.compiler.ast;
 public abstract class Statement extends AstNode {
 
   /**
-   * Create a node giving starting and ending offset
+   * Create a node giving starting and ending offset.
    * @param sourceStart starting offset
    * @param sourceEnd ending offset
    */
-  public Statement(int sourceStart, int sourceEnd) {
+  public Statement(final int sourceStart,
+                   final int sourceEnd) {
     super(sourceStart, sourceEnd);
   }
 
+  /**
+   * Tell if the block is empty.
+   * @return a statement is not empty by default
+   */
   public boolean isEmptyBlock() {
     return false;
   }
index b600511..9a9e409 100644 (file)
@@ -1,5 +1,10 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import net.sourceforge.phpdt.internal.compiler.ast.declarations.VariableUsage;
+
+import java.util.List;
+import java.util.ArrayList;
+
 /**
  * A GlobalStatement statement in php.
  * @author Matthieu Casanova
@@ -9,13 +14,13 @@ public class StaticStatement extends Statement {
   /** An array of the variables called by this global statement. */
   public String[] variables;
 
-  public StaticStatement(String[] variables, int sourceStart, int sourceEnd) {
+  public StaticStatement(final String[] variables, final int sourceStart, final int sourceEnd) {
     super(sourceStart, sourceEnd);
     this.variables = variables;
   }
 
   public String toString() {
-    StringBuffer buff = new StringBuffer("static ");
+    final StringBuffer buff = new StringBuffer("static ");
     for (int i = 0; i < variables.length; i++) {
       if (i != 0) {
         buff.append(", ");
@@ -25,7 +30,35 @@ public class StaticStatement extends Statement {
     return buff.toString();
   }
 
-  public String toString(int tab) {
+  public String toString(final int tab) {
     return tabString(tab) + toString();
   }
+
+  /**
+   * Get the variables from outside (parameters, globals ...)
+   * @return the variables from outside
+   */
+  public List getOutsideVariable() {
+    final ArrayList list = new ArrayList(variables.length);
+    for (int i = 0; i < variables.length; i++) {
+      list.add(new VariableUsage(variables[i], sourceStart));
+    }
+    return list;
+  }
+
+  /**
+   * get the modified variables.
+   * @return the variables modified
+   */
+  public List getModifiedVariable() {
+    return new ArrayList();
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public List getUsedVariable() {
+    return new ArrayList();
+  }
 }
index aced1b6..ca22a4c 100644 (file)
@@ -10,6 +10,9 @@
  ******************************************************************************/
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import java.util.List;
+import java.util.ArrayList;
+
 //import net.sourceforge.phpdt.internal.compiler.IAbstractSyntaxTreeVisitor;
 //import net.sourceforge.phpdt.internal.compiler.codegen.CodeStream;
 //import net.sourceforge.phpdt.internal.compiler.impl.Constant;
@@ -19,7 +22,7 @@ package net.sourceforge.phpdt.internal.compiler.ast;
 public class StringLiteral extends Literal {
   char[] source;
 
-  public StringLiteral(char[] token, int s) {
+  public StringLiteral(final char[] token, final int s) {
     super(s, s + token.length);
     source = token;
   }
@@ -31,12 +34,12 @@ public class StringLiteral extends Literal {
    * @param e sourceend
    * @deprecated
    */
-  public StringLiteral(char[] token, int s, int e) {
+  public StringLiteral(final char[] token, final int s, final int e) {
     super(s, e);
     source = token;
   }
 
-  public StringLiteral(int s, int e) {
+  public StringLiteral(final int s, final int e) {
     super(s, e);
   }
 
@@ -51,42 +54,42 @@ public class StringLiteral extends Literal {
    * Return the expression as String.
    * @return the expression
    */
- /* public String toStringExpression() {
-    // handle some special char.....
-    StringBuffer result = new StringBuffer("\""); //$NON-NLS-1$
-    for (int i = 0; i < source.length; i++) {
-      switch (source[i]) {
-        case '\b':
-          result.append("\\b"); //$NON-NLS-1$
-          break;
-        case '\t':
-          result.append("\\t"); //$NON-NLS-1$
-          break;
-        case '\n':
-          result.append("\\n"); //$NON-NLS-1$
-          break;
-        case '\f':
-          result.append("\\f"); //$NON-NLS-1$
-          break;
-        case '\r':
-          result.append("\\r"); //$NON-NLS-1$
-          break;
-        case '\"':
-          result.append("\\\""); //$NON-NLS-1$
-          break;
-        case '\'':
-          result.append("\\'"); //$NON-NLS-1$
-          break;
-        case '\\': //take care not to display the escape as a potential real char
-          result.append("\\\\"); //$NON-NLS-1$
-          break;
-        default :
-          result.append(source[i]);
-      }
-    }
-    result.append("\""); //$NON-NLS-1$
-    return result.toString();
-  } */
+  /* public String toStringExpression() {
+     // handle some special char.....
+     StringBuffer result = new StringBuffer("\""); //$NON-NLS-1$
+     for (int i = 0; i < source.length; i++) {
+       switch (source[i]) {
+         case '\b':
+           result.append("\\b"); //$NON-NLS-1$
+           break;
+         case '\t':
+           result.append("\\t"); //$NON-NLS-1$
+           break;
+         case '\n':
+           result.append("\\n"); //$NON-NLS-1$
+           break;
+         case '\f':
+           result.append("\\f"); //$NON-NLS-1$
+           break;
+         case '\r':
+           result.append("\\r"); //$NON-NLS-1$
+           break;
+         case '\"':
+           result.append("\\\""); //$NON-NLS-1$
+           break;
+         case '\'':
+           result.append("\\'"); //$NON-NLS-1$
+           break;
+         case '\\': //take care not to display the escape as a potential real char
+           result.append("\\\\"); //$NON-NLS-1$
+           break;
+         default :
+           result.append(source[i]);
+       }
+     }
+     result.append("\""); //$NON-NLS-1$
+     return result.toString();
+   } */
 
   /**
    * Return the expression as String.
index c13a386..e582ed8 100644 (file)
@@ -1,5 +1,10 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import net.sourceforge.phpdt.internal.compiler.ast.declarations.VariableUsage;
+
+import java.util.List;
+import java.util.ArrayList;
+
 /**
  * @author Matthieu Casanova
  */
@@ -8,10 +13,10 @@ public class SwitchStatement extends Statement {
   public Expression variable;
   public AbstractCase[] cases;
 
-  public SwitchStatement(Expression variable,
-                         AbstractCase[] cases,
-                         int sourceStart,
-                         int sourceEnd) {
+  public SwitchStatement(final Expression variable,
+                         final AbstractCase[] cases,
+                         final int sourceStart,
+                         final int sourceEnd) {
     super(sourceStart, sourceEnd);
     this.variable = variable;
     this.cases = cases;
@@ -22,15 +27,53 @@ public class SwitchStatement extends Statement {
    * @param tab how many tabs (not used here
    * @return a String
    */
-  public String toString(int tab) {
+  public String toString(final int tab) {
     final StringBuffer buff = new StringBuffer(tabString(tab));
     buff.append("switch (").append(variable.toStringExpression()).append(") {\n");
     for (int i = 0; i < cases.length; i++) {
-      AbstractCase cas = cases[i];
-      buff.append(cas.toString(tab +1));
+      final AbstractCase cas = cases[i];
+      buff.append(cas.toString(tab + 1));
       buff.append('\n');
     }
     buff.append('}');
     return buff.toString();
   }
+
+  /**
+   * Get the variables from outside (parameters, globals ...)
+   * @return the variables from outside
+   */
+  public List getOutsideVariable() {
+    final ArrayList list = new ArrayList();
+    for (int i = 0; i < cases.length; i++) {
+      list.addAll(cases[i].getOutsideVariable());
+    }
+    return list;
+  }
+
+  /**
+   * get the modified variables.
+   * @return the variables modified
+   */
+  public List getModifiedVariable() {
+    final ArrayList list = new ArrayList();
+    for (int i = 0; i < cases.length; i++) {
+      list.addAll(cases[i].getModifiedVariable());
+    }
+    list.addAll(variable.getModifiedVariable());
+    return list;
+  }
+
+  /**
+   * Get the variables used.
+   * @return the variables used
+   */
+  public List getUsedVariable() {
+    final ArrayList list = new ArrayList();
+    for (int i = 0; i < cases.length; i++) {
+      list.addAll(cases[i].getUsedVariable());
+    }
+    list.addAll(variable.getUsedVariable());
+    return list;
+  }
 }
index adb4b09..efc37a7 100644 (file)
@@ -1,13 +1,17 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
+import java.util.List;
+import java.util.ArrayList;
+
 /**
+ * the true literal.
  * @author Matthieu Casanova
  */
 public class TrueLiteral extends MagicLiteral {
 
   public static final char[] source = {'t', 'r', 'u', 'e'};
 
-  public TrueLiteral(int sourceStart, int sourceEnd) {
+  public TrueLiteral(final int sourceStart, final int sourceEnd) {
     super(sourceStart, sourceEnd);
   }
 
@@ -22,4 +26,8 @@ public class TrueLiteral extends MagicLiteral {
   public String toStringExpression() {
     return "true";//$NON-NLS-1$
   }
+
+  public String toString() {
+    return "true";//$NON-NLS-1$
+  }
 }