package net.sourceforge.phpdt.internal.compiler.ast;
+import java.util.ArrayList;
+import java.util.List;
+
import net.sourceforge.phpdt.internal.compiler.parser.Outlineable;
import net.sourceforge.phpdt.internal.compiler.parser.OutlineableWithChildren;
import net.sourceforge.phpdt.internal.ui.PHPUiImages;
-import org.eclipse.jface.resource.ImageDescriptor;
-import java.util.ArrayList;
-import java.util.Enumeration;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.text.Position;
/**
* It directly extends AstNode because a class cannot appear anywhere in php
* @author Matthieu Casanova
*/
-public class ClassDeclaration extends Statement implements OutlineableWithChildren {
+public final class ClassDeclaration extends Statement implements OutlineableWithChildren {
/** The name of the class. */
- public char[] name;
+ private final String name;
/** The superclass. */
- public char[] superclass;
+ private String superclass;
public int declarationSourceStart;
public int declarationSourceEnd;
public int bodyStart;
public int bodyEnd;
/** The methods of the class. */
- private ArrayList methods = new ArrayList();
+ private final ArrayList methods = new ArrayList();
/** The constructor of the class. */
- public MethodDeclaration constructor;
+ private MethodDeclaration constructor;
/** The fields of the class. */
- private ArrayList fields = new ArrayList();
+ private final ArrayList fields = new ArrayList();
- private Object parent;
+ private final Object parent;
/** The outlineable children (those will be in the node array too. */
- private ArrayList children = new ArrayList();
+ private final ArrayList children = new ArrayList();
+
+ private final Position position;
/**
- * Create a class giving starting and ending offset
+ * 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 String name,
+ final String superclass,
+ final int sourceStart,
+ final int sourceEnd) {
super(sourceStart, sourceEnd);
this.parent = parent;
this.name = name;
this.superclass = superclass;
+ position = new Position(sourceStart, name.length());
}
- /**
- * Create a class giving starting and ending offset
+ /**
+ * Create a class giving starting and ending offset.
* @param sourceStart starting offset
* @param sourceEnd ending offset
*/
- public ClassDeclaration(Object parent,
- char[] name,
- int sourceStart,
- int sourceEnd) {
+ public ClassDeclaration(final Object parent,
+ final String 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) {
- method.add(method);
- children.add(method);
+ /**
+ * Add a method to the class.
+ * @param method the method declaration
+ */
+ public void addMethod(final MethodDeclaration method) {
+ methods.add(method);
+ add(method);
if (method.name.equals(name)) {
constructor = method;
}
}
- public void addVariable(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(final Outlineable o) {
+ return children.add(o);
+ }
+
/**
* Tell if the class has a constructor.
* @return a boolean
* @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);
}
/**
- * Return the body of the class as String
+ * Return the body of the class as String.
* @param tab how many tabs before the body of the class
* @return the body as String
*/
- public String toStringBody(int tab) {
+ private 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$
}
}
- if (methods != null) {
- for (int i = 0; i < methods.size(); i++) {
- MethodDeclaration o = (MethodDeclaration) methods.get(i);
- buff.append("\n");//$NON-NLS-1$
- buff.append(o.toString(tab + 1));
- }
+ for (int i = 0; i < methods.size(); i++) {
+ final MethodDeclaration o = (MethodDeclaration) methods.get(i);
+ buff.append("\n");//$NON-NLS-1$
+ buff.append(o.toString(tab + 1));
}
buff.append("\n").append(tabString(tab)).append("}"); //$NON-NLS-2$ //$NON-NLS-1$
return buff.toString();
* Return the header of the class as String.
* @return the header of the class
*/
- public String toStringHeader() {
- final StringBuffer buff = new StringBuffer("class").append(name);//$NON-NLS-1$
+ private String toStringHeader() {
+ final StringBuffer buff = new StringBuffer("class ").append(name);//$NON-NLS-1$
if (superclass != null) {
buff.append(" extends "); //$NON-NLS-1$
buff.append(superclass);
return parent;
}
- public boolean add(Outlineable o) {
- return children.add(o);
- }
-
- public Outlineable get(int index) {
+ public Outlineable get(final int index) {
return (Outlineable) children.get(index);
}
public int size() {
return children.size();
}
+
+ public String toString() {
+ final StringBuffer buff = new StringBuffer(name);
+ if (superclass != null) {
+ buff.append(":"); //$NON-NLS-1$
+ buff.append(superclass);
+ }
+ return buff.toString();
+ }
+
+ public Position getPosition() {
+ return position;
+ }
+
+ public List getList() {
+ return children;
+ }
+
+ /**
+ * 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) {}
+
+ /**
+ * Get the variables used.
+ *
+ * @param list the list where we will put variables
+ */
+ public void getUsedVariable(final List list) {}
}