blob: d92d99bd487ecb93b92a81246058c39de5fd1fde [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.wst.jsdt.internal.compiler.ast;
import org.eclipse.wst.jsdt.internal.compiler.CompilationResult;
import org.eclipse.wst.jsdt.internal.compiler.ASTVisitor;
import org.eclipse.wst.jsdt.internal.compiler.lookup.BlockScope;
import org.eclipse.wst.jsdt.internal.compiler.lookup.ClassScope;
import org.eclipse.wst.jsdt.internal.compiler.lookup.CompilationUnitScope;
import org.eclipse.wst.jsdt.internal.compiler.problem.AbortType;
/**
* Enum declaration
*/
public class EnumDeclaration extends TypeDeclaration {
public EnumConstant[] enumConstants;
/**
* @param compilationResult
*/
public EnumDeclaration(CompilationResult compilationResult) {
super(compilationResult);
}
public StringBuffer printBody(int indent, StringBuffer output) {
output.append(" {"); //$NON-NLS-1$
if (enumConstants != null) {
int length = enumConstants.length;
output.append('\n');
for (int i = 0; i < length - 1; i++) {
if (enumConstants[i] != null) {
enumConstants[i].print(indent + 1, output);
output.append(",\n");//$NON-NLS-1$
}
}
enumConstants[length - 1].print(indent + 1, output);
output.append("\n;\n");//$NON-NLS-1$
}
if (this.enums != null) {
for (int i = 0; i < this.enums.length; i++) {
if (this.enums[i] != null) {
output.append('\n');
this.enums[i].print(indent + 1, output);
}
}
}
if (memberTypes != null) {
for (int i = 0; i < memberTypes.length; i++) {
if (memberTypes[i] != null) {
output.append('\n');
memberTypes[i].print(indent + 1, output);
}
}
}
if (fields != null) {
for (int fieldI = 0; fieldI < fields.length; fieldI++) {
if (fields[fieldI] != null) {
output.append('\n');
fields[fieldI].print(indent + 1, output);
}
}
}
if (methods != null) {
for (int i = 0; i < methods.length; i++) {
if (methods[i] != null) {
output.append('\n');
methods[i].print(indent + 1, output);
}
}
}
output.append('\n');
return printIndent(indent, output).append('}');
}
public void traverse(ASTVisitor visitor, BlockScope blockScope) {
if (ignoreFurtherInvestigation)
return;
try {
if (visitor.visit(this, blockScope)) {
if (this.typeParameters != null) {
int length = this.typeParameters.length;
for (int i = 0; i < length; i++) {
this.typeParameters[i].traverse(visitor, scope);
}
}
if (this.superclass != null)
this.superclass.traverse(visitor, scope);
if (this.superInterfaces != null) {
int length = this.superInterfaces.length;
for (int i = 0; i < length; i++)
this.superInterfaces[i].traverse(visitor, scope);
}
if (this.memberTypes != null) {
int length = this.memberTypes.length;
for (int i = 0; i < length; i++)
this.memberTypes[i].traverse(visitor, scope);
}
if (this.enums != null) {
int length = this.enums.length;
for (int i = 0; i < length; i++) {
this.enums[i].traverse(visitor, scope);
}
}
if (this.fields != null) {
int length = this.fields.length;
for (int i = 0; i < length; i++) {
FieldDeclaration field;
if ((field = this.fields[i]).isStatic()) {
field.traverse(visitor, staticInitializerScope);
} else {
field.traverse(visitor, initializerScope);
}
}
}
if (this.methods != null) {
int length = methods.length;
for (int i = 0; i < length; i++)
this.methods[i].traverse(visitor, scope);
}
}
visitor.endVisit(this, blockScope);
} catch (AbortType e) {
// silent abort
}
}
public void traverse(ASTVisitor visitor, ClassScope classScope) {
if (ignoreFurtherInvestigation)
return;
try {
if (visitor.visit(this, classScope)) {
if (this.typeParameters != null) {
int typeParametersLength = this.typeParameters.length;
for (int i = 0; i < typeParametersLength; i++) {
this.typeParameters[i].traverse(visitor, scope);
}
}
if (this.superclass != null)
this.superclass.traverse(visitor, scope);
if (this.superInterfaces != null) {
int length = this.superInterfaces.length;
for (int i = 0; i < length; i++)
this.superInterfaces[i].traverse(visitor, scope);
}
if (this.memberTypes != null) {
int length = this.memberTypes.length;
for (int i = 0; i < length; i++)
this.memberTypes[i].traverse(visitor, scope);
}
if (this.enums != null) {
int length = this.enums.length;
for (int i = 0; i < length; i++) {
this.enums[i].traverse(visitor, scope);
}
}
if (this.fields != null) {
int length = this.fields.length;
for (int i = 0; i < length; i++) {
FieldDeclaration field;
if ((field = this.fields[i]).isStatic()) {
field.traverse(visitor, staticInitializerScope);
} else {
field.traverse(visitor, initializerScope);
}
}
}
if (this.methods != null) {
int length = this.methods.length;
for (int i = 0; i < length; i++)
this.methods[i].traverse(visitor, scope);
}
}
visitor.endVisit(this, classScope);
} catch (AbortType e) {
// silent abort
}
}
public void traverse(ASTVisitor visitor, CompilationUnitScope unitScope) {
if (ignoreFurtherInvestigation)
return;
try {
if (visitor.visit(this, unitScope)) {
if (this.typeParameters != null) {
int length = this.typeParameters.length;
for (int i = 0; i < length; i++) {
this.typeParameters[i].traverse(visitor, scope);
}
}
if (this.superclass != null)
this.superclass.traverse(visitor, scope);
if (this.superInterfaces != null) {
int length = this.superInterfaces.length;
for (int i = 0; i < length; i++)
this.superInterfaces[i].traverse(visitor, scope);
}
if (this.memberTypes != null) {
int length = this.memberTypes.length;
for (int i = 0; i < length; i++)
this.memberTypes[i].traverse(visitor, scope);
}
if (this.enums != null) {
int length = this.enums.length;
for (int i = 0; i < length; i++) {
this.enums[i].traverse(visitor, scope);
}
}
if (this.fields != null) {
int length = this.fields.length;
for (int i = 0; i < length; i++) {
FieldDeclaration field;
if ((field = this.fields[i]).isStatic()) {
field.traverse(visitor, staticInitializerScope);
} else {
field.traverse(visitor, initializerScope);
}
}
}
if (this.methods != null) {
int length = this.methods.length;
for (int i = 0; i < length; i++)
this.methods[i].traverse(visitor, scope);
}
}
visitor.endVisit(this, unitScope);
} catch (AbortType e) {
// silent abort
}
}
}