blob: 6ab0f0be82d58a3ac73b39d56eaca9ec84bb3f26 [file] [log] [blame]
/*
* (c) 2002, 2005 xored software and others all rights reserved. http://www.xored.com
*/
package org.eclipse.dltk.ast.declarations;
import org.eclipse.dltk.ast.ASTVisitor;
import org.eclipse.dltk.ast.DLTKToken;
import org.eclipse.dltk.ast.Modifiers;
import org.eclipse.dltk.ast.PositionInformation;
import org.eclipse.dltk.ast.statements.Statement;
import org.eclipse.dltk.core.ISourceRange;
import org.eclipse.dltk.internal.core.SourceRange;
import org.eclipse.dltk.utils.CorePrinter;
public abstract class Declaration extends Statement implements Modifiers {
public final static int D_ARGUMENT = 3000;
public final static int D_CLASS = 3001;
public final static int D_METHOD = 3002;
public final static int D_DECLARATOR = 3004;
protected int nameStart;
protected int nameEnd;
protected String name;
protected int modifiers;
protected Declaration() {
this.modifiers = 0;
this.nameStart = 0;
this.nameEnd = -1;
}
protected Declaration(int start, int end) {
super(start, end);
this.modifiers = 0;
}
protected Declaration(DLTKToken name, int start, int end) {
super(start, end);
if (name != null) {
this.name = name.getText();
this.nameStart = name.getColumn();
this.nameEnd = nameStart + this.name.length();
}
}
public final int getNameStart() {
return nameStart;
}
public final int getNameEnd() {
return nameEnd;
}
protected ISourceRange getNameSourceRange () {
return new SourceRange(getNameStart(), getNameEnd() - getNameStart() + 1);
}
public final String getName() {
return name;
}
public final int getModifiers() {
return modifiers;
}
public final PositionInformation getPositionInformation() {
return new PositionInformation(nameStart, nameEnd, sourceStart(),
sourceEnd());
}
public final void setModifier(int mods) {
modifiers |= mods;
}
public final void setModifiers(int mods) {
modifiers = mods;
}
public final void setName(String name) {
this.name = name;
}
protected void setNameEnd(int end) {
nameEnd = end;
}
protected void setNameStart(int start) {
nameStart = start;
}
public boolean isStatic() {
return (modifiers & AccStatic) != 0;
}
public boolean isPublic() {
return (modifiers & AccPublic) != 0;
}
public boolean isPrivate() {
return (modifiers & AccPrivate) != 0;
}
public boolean isProtected() {
return (modifiers & AccProtected) != 0;
}
public boolean isFinal() {
return (modifiers & AccFinal) != 0;
}
public boolean isAbstract() {
return (modifiers & AccAbstract) != 0;
}
public boolean isInterface() {
return (modifiers & AccInterface) != 0;
}
public String toString() {
String buf = "";
if (this.isStatic()) {
buf += "static ";
}
if (this.name != null) {
buf += " " + this.name;
}
return buf;
}
public int getKind() {
// TODO Auto-generated method stub
return 0;
}
public void printNode(CorePrinter output) {
// TODO Auto-generated method stub
}
public void traverse(ASTVisitor pVisitor) throws Exception {
if (pVisitor.visit(this))
pVisitor.endvisit(this);
}
public boolean equals(Object obj) {
if (!(obj instanceof Declaration)) {
return false;
}
Declaration d = (Declaration) obj;
// Only name.
return d.name.equals(this.name) && d.nameStart == this.nameStart
&& d.nameEnd == this.nameEnd && super.equals(obj);
}
public int hashCode() {
return this.name.hashCode();
}
public String debugString () {
return super.debugString() + this.getNameSourceRange().toString();
}
}