Changes:
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / compiler / parser / PHPFunctionDeclaration.java
index 31e473c..1c86a3f 100644 (file)
@@ -1,5 +1,8 @@
 package net.sourceforge.phpdt.internal.compiler.parser;
 
+import java.util.Enumeration;
+import java.util.Hashtable;
+
 import net.sourceforge.phpdt.internal.ui.PHPUiImages;
 
 import org.eclipse.jface.resource.ImageDescriptor;
@@ -10,6 +13,18 @@ import org.eclipse.jface.resource.ImageDescriptor;
  */
 public class PHPFunctionDeclaration extends PHPSegmentWithChildren {
 
+  /** The parameters of the function. */
+  private final Hashtable parameters;
+
+  /** The parameters of the function. */
+  private final Hashtable declaredVariables;
+
+  /**
+   * A String representation of the function (it's generated once because it needs to iterate
+   * a hashtable == long.
+   */
+  private String stringRepresentation;
+
   /**
    * Create a function declaration.
    * @param parent the parent object (it should be a php class)
@@ -18,8 +33,24 @@ public class PHPFunctionDeclaration extends PHPSegmentWithChildren {
    */
   public PHPFunctionDeclaration(Object parent, String name, int index) {
     super(parent, name, index);
+    parameters = null;
+    declaredVariables = null;
   }
-  
+
+  /**
+   * Create a function declaration.
+   * @param parent the parent object (it should be a php class)
+   * @param name the name of the function
+   * @param index where the function is in the file
+   * @param parameters the list of parameters (it should contains only PHPVar)
+   */
+  public PHPFunctionDeclaration(Object parent, String name, int index, Hashtable parameters) {
+    super(parent, name, index);
+    this.parameters = parameters;
+    declaredVariables = (Hashtable) parameters.clone();
+    createStringView();
+  }
+
   /**
    * Get the image of a class.
    * @return the image that represents a php class
@@ -27,4 +58,73 @@ public class PHPFunctionDeclaration extends PHPSegmentWithChildren {
   public ImageDescriptor getImage() {
     return PHPUiImages.DESC_FUN;
   }
+
+  /**
+   * Return the string representation of the function.
+   * @return the string representation of the function
+   */
+  public String toString() {
+    if (parameters == null) {
+      return super.toString();
+    }
+    return stringRepresentation;
+  }
+
+  /**
+   * Create the String representation of the function.
+   */
+  private void createStringView() {
+    StringBuffer buff = new StringBuffer(name).append("(");
+    Enumeration vars = parameters.elements();
+    boolean first = false;
+    while (vars.hasMoreElements()) {
+      PHPVarDeclaration o = (PHPVarDeclaration) vars.nextElement();
+      if (first) {
+        buff.append(",");
+      } else {
+        first = true;
+      }
+      buff.append(o.toString());
+    }
+    buff.append(")");
+    stringRepresentation = buff.toString();
+  }
+
+  /**
+   * Return a parameter of the function
+   * @param parameterName the name of the parameter
+   * @return it will return the PHPVarDeclaration of the parameter asked, or null
+   */
+  public PHPVarDeclaration getParameter(String parameterName) {
+    return (PHPVarDeclaration) parameters.get(parameterName);
+  }
+
+  /**
+   * Return all parameters of the function.
+   * @return a hashtable containing all PHPVarDeclaration
+   */
+  public Hashtable getParameters() {
+    return parameters;
+  }
+
+  /**
+   * Return a variable of the function
+   * @param variableName the name of the parameter
+   * @return it will return the PHPVarDeclaration of the parameter asked, or null
+   */
+  public PHPVarDeclaration getVariable(String variableName) {
+    return (PHPVarDeclaration) declaredVariables.get(variableName);
+  }
+
+  /**
+   * Return all declared variables of the function.
+   * @return a hashtable containing all PHPVarDeclaration
+   */
+  public Hashtable getVariables() {
+    return declaredVariables;
+  }
+
+  public Object addVariable(PHPVarDeclaration var) {
+    return declaredVariables.put(var.getVariable().getName(),var);
+  }
 }