the unknown variables should be reported only once
authorkpouer <kpouer>
Thu, 30 Oct 2003 16:17:04 +0000 (16:17 +0000)
committerkpouer <kpouer>
Thu, 30 Oct 2003 16:17:04 +0000 (16:17 +0000)
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/MethodDeclaration.java

index 6be74d7..f1220ab 100644 (file)
@@ -1,22 +1,22 @@
 package net.sourceforge.phpdt.internal.compiler.ast;
 
-import java.util.ArrayList;
-import java.util.List;
-
 import net.sourceforge.phpdt.internal.compiler.ast.declarations.VariableUsage;
 import net.sourceforge.phpdt.internal.compiler.parser.Outlineable;
 import net.sourceforge.phpdt.internal.compiler.parser.OutlineableWithChildren;
 import net.sourceforge.phpdt.internal.ui.PHPUiImages;
 import net.sourceforge.phpeclipse.PHPeclipsePlugin;
-
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.text.Position;
-
 import test.PHPParserSuperclass;
 
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+
 /**
  * A Method declaration.
+ * 
  * @author Matthieu Casanova
  */
 public final class MethodDeclaration extends Statement implements OutlineableWithChildren {
@@ -62,6 +62,7 @@ public final class MethodDeclaration extends Statement implements OutlineableWit
 
   /**
    * Return method into String, with a number of tabs
+   * 
    * @param tab the number of tabs
    * @return the String containing the method
    */
@@ -78,6 +79,7 @@ public final class MethodDeclaration extends Statement implements OutlineableWit
 
   /**
    * Return the statements of the method into Strings
+   * 
    * @param tab the number of tabs
    * @return the String containing the statements
    */
@@ -97,6 +99,7 @@ public final class MethodDeclaration extends Statement implements OutlineableWit
 
   /**
    * Get the image of a class.
+   * 
    * @return the image that represents a php class
    */
   public ImageDescriptor getImage() {
@@ -132,7 +135,7 @@ public final class MethodDeclaration extends Statement implements OutlineableWit
 
     if (arguments != null) {
       for (int i = 0; i < arguments.size(); i++) {
-        final VariableDeclaration o =  (VariableDeclaration) arguments.get(i);
+        final VariableDeclaration o = (VariableDeclaration) arguments.get(i);
         buff.append(o.toStringExpression());
         if (i != (arguments.size() - 1)) {
           buff.append(", "); //$NON-NLS-1$
@@ -151,11 +154,25 @@ public final class MethodDeclaration extends Statement implements OutlineableWit
     return children;
   }
 
-  /** no outside variables. */
+  /**
+   * Get the variables from outside (parameters, globals ...)
+   * 
+   * @param list the list where we will put variables
+   */
   public void getOutsideVariable(final List list) {}
 
+  /**
+   * get the modified variables.
+   * 
+   * @param list the list where we will put variables
+   */
   public void getModifiedVariable(final List list) {}
 
+  /**
+   * This method will analyze the code.
+   * 
+   * @param list the list where we will put variables
+   */
   public void getUsedVariable(final List list) {}
 
   /**
@@ -212,7 +229,9 @@ public final class MethodDeclaration extends Statement implements OutlineableWit
     return false;
   }
 
-  /** This method will analyze the code. */
+  /**
+   * This method will analyze the code.
+   */
   public void analyzeCode() {
     if (statements != null) {
       for (int i = 0; i < statements.length; i++) {
@@ -246,7 +265,8 @@ public final class MethodDeclaration extends Statement implements OutlineableWit
 
   /**
    * This method will add a warning on all unused parameters.
-   * @param vars the used variable list
+   * 
+   * @param vars       the used variable list
    * @param parameters the declared variable list
    */
   private static void findUnusedParameters(final List vars, final List parameters) {
@@ -267,6 +287,13 @@ public final class MethodDeclaration extends Statement implements OutlineableWit
     }
   }
 
+  /**
+   * Tell if the list of VariableUsage contains a variable named by the name given.
+   * 
+   * @param name the variable name
+   * @param list the list of VariableUsage
+   * @return true if the variable is in the list false otherwise
+   */
   private static boolean isVariableInList(final String name, final List list) {
     for (int i = 0; i < list.size(); i++) {
       if (((VariableUsage) list.get(i)).getName().equals(name)) {
@@ -278,14 +305,17 @@ public final class MethodDeclaration extends Statement implements OutlineableWit
 
   /**
    * This method will add a warning on all used variables in a method that aren't declared before.
-   * @param usedVars the used variable list
+   * 
+   * @param usedVars     the used variable list
    * @param declaredVars the declared variable list
    */
   private static void findUnknownUsedVars(final List usedVars, final List declaredVars) {
+    final HashSet list = new HashSet(usedVars.size());
     for (int i = 0; i < usedVars.size(); i++) {
       final VariableUsage variableUsage = (VariableUsage) usedVars.get(i);
       if ("this".equals(variableUsage.getName())) continue; // this is a special variable
-      if (!isVariableDeclaredBefore(declaredVars, variableUsage)) {
+      if (!list.contains(variableUsage.getName()) && !isVariableDeclaredBefore(declaredVars, variableUsage)) {
+        list.add(variableUsage.getName());
         try {
           PHPParserSuperclass.setMarker(
                   "warning, usage of a variable that seems to be unassigned yet : " + variableUsage.getName(),