package net.sourceforge.phpdt.internal.compiler.ast;
+import net.sourceforge.phpdt.internal.compiler.ast.Block;
+import net.sourceforge.phpdt.internal.compiler.ast.ArgumentDeclaration;
+import net.sourceforge.phpdt.internal.compiler.parser.OutlineableWithChildren;
+import net.sourceforge.phpdt.internal.compiler.parser.Outlineable;
+import net.sourceforge.phpdt.internal.ui.PHPUiImages;
+import org.eclipse.jface.resource.ImageDescriptor;
+
+import java.util.Hashtable;
+import java.util.Enumeration;
+import java.util.ArrayList;
+
/**
* A Method declaration.
* @author Matthieu Casanova
*/
-public class MethodDeclaration extends Statement {
+public class MethodDeclaration extends Statement implements OutlineableWithChildren {
public char[] name;
- public ArgumentDeclaration[] arguments;
+ public Hashtable arguments;
public Statement[] statements;
public int bodyStart;
public int bodyEnd = -1;
public boolean isConstructor;
+ private Object parent;
+ /** The outlineable children (those will be in the node array too. */
+ private ArrayList children = new ArrayList();
+
+ public boolean reference;
+
+ public MethodDeclaration(Object parent,
+ char[] name,
+ Hashtable arguments,
+ boolean reference,
+ int sourceStart,
+ int sourceEnd) {
+ super(sourceStart, sourceEnd);
+ this.name = name;
+ this.arguments = arguments;
+ this.parent = parent;
+ this.reference = reference;
+ }
/**
* Return method into String, with a number of tabs
* @return the String containing the method
*/
public String toString(int tab) {
- String s = tabString(tab);
- StringBuffer buff = new StringBuffer(s);
+ StringBuffer buff = new StringBuffer(tabString(tab));
+ buff.append("function ");//$NON-NLS-1$
+ if (reference) {
+ buff.append('&');//$NON-NLS-1$
+ }
buff.append(name).append("(");//$NON-NLS-1$
if (arguments != null) {
- for (int i = 0; i < arguments.length; i++) {
- buff.append(arguments[i].toString(0));
- if (i != (arguments.length - 1)) {
+ Enumeration values = arguments.elements();
+ int i = 0;
+ while (values.hasMoreElements()) {
+ ArgumentDeclaration o = (ArgumentDeclaration) values.nextElement();
+ buff.append(o.toString(0));
+ if (i != (arguments.size() - 1)) {
buff.append(", "); //$NON-NLS-1$
}
+ i++;
}
}
buff.append(")"); //$NON-NLS-1$
- s += toStringStatements(tab + 1);
- return s;
+ buff.append(toStringStatements(tab + 1));
+ return buff.toString();
}
/**
buff.append("\n").append(tabString(tab == 0 ? 0 : tab - 1)).append("}"); //$NON-NLS-2$ //$NON-NLS-1$
return buff.toString();
}
+
+ /**
+ * Get the image of a class.
+ * @return the image that represents a php class
+ */
+ public ImageDescriptor getImage() {
+ return PHPUiImages.DESC_FUN;
+ }
+
+ public Object getParent() {
+ return parent;
+ }
+
+ public boolean add(Outlineable o) {
+ return children.add(o);
+ }
+
+ public Outlineable get(int index) {
+ return (Outlineable) children.get(index);
+ }
+
+ public int size() {
+ return children.size();
+ }
}