org.eclipse.jdt.internal.compiler.ast
Class TypeDeclaration

java.lang.Object
  extended by org.eclipse.jdt.internal.compiler.ast.ASTNode
      extended by org.eclipse.jdt.internal.compiler.ast.Statement
          extended by org.eclipse.jdt.internal.compiler.ast.TypeDeclaration
All Implemented Interfaces:
ReferenceContext, TypeConstants, TypeIds, ProblemSeverities

public class TypeDeclaration
extends Statement
implements ProblemSeverities, ReferenceContext


Field Summary
 QualifiedAllocationExpression allocation
           
static int ANNOTATION_TYPE_DECL
           
 Annotation[] annotations
           
static char[] ANONYMOUS_EMPTY_NAME
           
 SourceTypeBinding binding
           
 int bodyEnd
           
 int bodyStart
           
static int CLASS_DECL
           
 CompilationResult compilationResult
           
 int declarationSourceEnd
           
 int declarationSourceStart
           
 TypeDeclaration enclosingType
           
static int ENUM_DECL
           
 FieldBinding enumValuesSyntheticfield
           
 FieldDeclaration[] fields
           
protected  boolean hasBeenGenerated
           
 boolean ignoreFurtherInvestigation
           
 MethodScope initializerScope
           
static int INTERFACE_DECL
           
 Javadoc javadoc
           
 int maxFieldCount
           
 TypeDeclaration[] memberTypes
           
 AbstractMethodDeclaration[] methods
           
 MethodDeclaration[] missingAbstractMethods
           
 int modifiers
           
 int modifiersSourceStart
           
 char[] name
           
 ClassScope scope
           
 MethodScope staticInitializerScope
           
 TypeReference superclass
           
 TypeReference[] superInterfaces
           
 TypeParameter[] typeParameters
           
 
Fields inherited from class org.eclipse.jdt.internal.compiler.ast.ASTNode
Bit1, Bit10, Bit11, Bit12, Bit13, Bit14, Bit15, Bit16, Bit17, Bit18, Bit19, Bit2, Bit20, Bit21, Bit22, Bit23, Bit24, Bit25, Bit26, Bit27, Bit28, Bit29, Bit3, Bit30, Bit31, Bit32, Bit32L, Bit33L, Bit34L, Bit35L, Bit36L, Bit37L, Bit38L, Bit39L, Bit4, Bit40L, Bit41L, Bit42L, Bit43L, Bit44L, Bit45L, Bit46L, Bit47L, Bit48L, Bit49L, Bit5, Bit50L, Bit51L, Bit52L, Bit53L, Bit54L, Bit55L, Bit56L, Bit57L, Bit58L, Bit59L, Bit6, Bit60L, Bit61L, Bit62L, Bit63L, Bit64L, Bit7, Bit8, Bit9, bits, ContainsAssertion, DepthMASK, DepthSHIFT, DisableUnnecessaryCastCheck, DocumentedFallthrough, FirstAssignmentToLocal, GenerateCheckcast, HasAbstractMethods, HasAllMethodBodies, HasLocalType, IgnoreRawTypeCheck, InsideJavadoc, IsAnnotationDefaultValue, IsAnonymousType, IsCompoundAssigned, IsElseIfStatement, IsImplicitThis, IsLocalDeclarationReachable, IsLocalType, IsMemberType, IsNonNull, IsReachable, IsReturnedValue, IsSecondaryType, IsStrictlyAssigned, IsSubRoutineEscaping, IsSuperType, IsTryBlockExiting, IsUsefulEmptyStatement, IsVarArgs, LabelUsed, OperatorMASK, OperatorSHIFT, ParenthesizedMASK, ParenthesizedSHIFT, RestrictiveFlagMASK, ReturnTypeIDMASK, sourceEnd, sourceStart, UndocumentedEmptyBlock, UnnecessaryCast, UnsafeCast
 
Fields inherited from interface org.eclipse.jdt.internal.compiler.problem.ProblemSeverities
Abort, AbortCompilation, AbortCompilationUnit, AbortMethod, AbortType, Error, Fatal, Ignore, Optional, SecondaryError, Warning
 
Fields inherited from interface org.eclipse.jdt.internal.compiler.lookup.TypeConstants
ANNOTATION, ANNOTATION_PREFIX, ANNOTATION_SUFFIX, ANONYM_PREFIX, ANONYM_SUFFIX, BOOLEAN, BYTE, CHAR, CharArray_JAVA_IO_OBJECTINPUTSTREAM, CharArray_JAVA_IO_OBJECTOUTPUTSTREAM, CharArray_JAVA_IO_OBJECTSTREAMFIELD, CharArray_JAVA_LANG_ANNOTATION_ANNOTATION, CharArray_JAVA_LANG_ENUM, CharArray_JAVA_LANG_OBJECT, CLINIT, CLONE, CONSTRAINT_EQUAL, CONSTRAINT_EXTENDS, CONSTRAINT_SUPER, DOUBLE, FLOAT, GETCLASS, INIT, INT, IO, JAVA, JAVA_IO, JAVA_IO_PRINTSTREAM, JAVA_IO_SERIALIZABLE, JAVA_LANG, JAVA_LANG_ANNOTATION_ANNOTATION, JAVA_LANG_ANNOTATION_DOCUMENTED, JAVA_LANG_ANNOTATION_ELEMENTTYPE, JAVA_LANG_ANNOTATION_INHERITED, JAVA_LANG_ANNOTATION_RETENTION, JAVA_LANG_ANNOTATION_RETENTIONPOLICY, JAVA_LANG_ANNOTATION_TARGET, JAVA_LANG_ASSERTIONERROR, JAVA_LANG_BOOLEAN, JAVA_LANG_BYTE, JAVA_LANG_CHARACTER, JAVA_LANG_CLASS, JAVA_LANG_CLASSNOTFOUNDEXCEPTION, JAVA_LANG_CLONEABLE, JAVA_LANG_DEPRECATED, JAVA_LANG_DOUBLE, JAVA_LANG_ENUM, JAVA_LANG_ERROR, JAVA_LANG_EXCEPTION, JAVA_LANG_FLOAT, JAVA_LANG_ILLEGALARGUMENTEXCEPTION, JAVA_LANG_INTEGER, JAVA_LANG_ITERABLE, JAVA_LANG_LONG, JAVA_LANG_NOCLASSDEFERROR, JAVA_LANG_OBJECT, JAVA_LANG_OVERRIDE, JAVA_LANG_REFLECT_CONSTRUCTOR, JAVA_LANG_REFLECT_FIELD, JAVA_LANG_REFLECT_METHOD, JAVA_LANG_RUNTIMEEXCEPTION, JAVA_LANG_SHORT, JAVA_LANG_STRING, JAVA_LANG_STRINGBUFFER, JAVA_LANG_STRINGBUILDER, JAVA_LANG_SUPPRESSWARNINGS, JAVA_LANG_SYSTEM, JAVA_LANG_THROWABLE, JAVA_LANG_VOID, JAVA_UTIL_ITERATOR, LANG, LENGTH, LONG, MAIN, MISMATCH, NULL, OBJECT, OK, PACKAGE_INFO_NAME, READOBJECT, READRESOLVE, REFLECT, SERIALPERSISTENTFIELDS, SERIALVERSIONUID, SHORT, SYNTHETIC_ACCESS_METHOD_PREFIX, SYNTHETIC_ASSERT_DISABLED, SYNTHETIC_CLASS, SYNTHETIC_ENCLOSING_INSTANCE_PREFIX, SYNTHETIC_ENUM_VALUES, SYNTHETIC_OUTER_LOCAL_PREFIX, SYNTHETIC_SWITCH_ENUM_TABLE, TYPE, UNCHECKED, UPPER_ANNOTATION_TYPE, UPPER_CLASS, UPPER_CONSTRUCTOR, UPPER_FIELD, UPPER_LOCAL_VARIABLE, UPPER_METHOD, UPPER_PACKAGE, UPPER_PARAMETER, UPPER_RUNTIME, UPPER_SOURCE, VALUE, VALUEOF, VALUES, VOID, WILDCARD_CAPTURE, WILDCARD_CAPTURE_NAME, WILDCARD_EXTENDS, WILDCARD_MINUS, WILDCARD_NAME, WILDCARD_PLUS, WILDCARD_STAR, WILDCARD_SUPER, WRITEOBJECT, WRITEREPLACE
 
Fields inherited from interface org.eclipse.jdt.internal.compiler.lookup.TypeIds
Boolean2Boolean, Boolean2Int, Boolean2String, BOXING, Byte2Byte, Byte2Char, Byte2Double, Byte2Float, Byte2Int, Byte2Long, Byte2Short, Byte2String, Char2Byte, Char2Char, Char2Double, Char2Float, Char2Int, Char2Long, Char2Short, Char2String, COMPILE_TYPE_MASK, Double2Byte, Double2Char, Double2Double, Double2Float, Double2Int, Double2Long, Double2Short, Double2String, Float2Byte, Float2Char, Float2Double, Float2Float, Float2Int, Float2Long, Float2Short, Float2String, IMPLICIT_CONVERSION_MASK, Int2Byte, Int2Char, Int2Double, Int2Float, Int2Int, Int2Long, Int2Short, Int2String, Long2Byte, Long2Char, Long2Double, Long2Float, Long2Int, Long2Long, Long2Short, Long2String, NoId, Null2String, Object2Object, Object2String, Short2Byte, Short2Char, Short2Double, Short2Float, Short2Int, Short2Long, Short2Short, Short2String, String2String, T_boolean, T_byte, T_char, T_double, T_float, T_int, T_JavaIoPrintStream, T_JavaIoSerializable, T_JavaLangAnnotationAnnotation, T_JavaLangAnnotationDocumented, T_JavaLangAnnotationElementType, T_JavaLangAnnotationInherited, T_JavaLangAnnotationRetention, T_JavaLangAnnotationRetentionPolicy, T_JavaLangAnnotationTarget, T_JavaLangAssertionError, T_JavaLangBoolean, T_JavaLangByte, T_JavaLangCharacter, T_JavaLangClass, T_JavaLangClassNotFoundException, T_JavaLangCloneable, T_JavaLangDeprecated, T_JavaLangDouble, T_JavaLangEnum, T_JavaLangError, T_JavaLangException, T_JavaLangFloat, T_JavaLangIllegalArgumentException, T_JavaLangInteger, T_JavaLangIterable, T_JavaLangLong, T_JavaLangNoClassDefError, T_JavaLangObject, T_JavaLangOverride, T_JavaLangReflectConstructor, T_JavaLangReflectField, T_JavaLangReflectMethod, T_JavaLangRuntimeException, T_JavaLangShort, T_JavaLangString, T_JavaLangStringBuffer, T_JavaLangStringBuilder, T_JavaLangSuppressWarnings, T_JavaLangSystem, T_JavaLangThrowable, T_JavaLangVoid, T_JavaUtilIterator, T_long, T_null, T_short, T_undefined, T_void, UNBOXING
 
Constructor Summary
TypeDeclaration(CompilationResult compilationResult)
           
 
Method Summary
 void abort(int abortLevel, CategorizedProblem problem)
           
 void addClinit()
          This method is responsible for adding a method declaration to the type method collections.
 MethodDeclaration addMissingAbstractMethodFor(MethodBinding methodBinding)
           
 FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo)
          Flow analysis for a local innertype
 void analyseCode(ClassScope enclosingClassScope)
          Flow analysis for a member innertype
 void analyseCode(ClassScope currentScope, FlowContext flowContext, FlowInfo flowInfo)
          Flow analysis for a local member innertype
 void analyseCode(CompilationUnitScope unitScope)
          Flow analysis for a package member type
 boolean checkConstructors(Parser parser)
          Check for constructor vs.
 CompilationResult compilationResult()
           
 ConstructorDeclaration createDefaultConstructor(boolean needExplicitConstructorCall, boolean needToInsert)
           
 MethodBinding createDefaultConstructorWithBinding(MethodBinding inheritedConstructorBinding)
           
 FieldDeclaration declarationOf(FieldBinding fieldBinding)
          Find the matching parse node, answers null if nothing found
 TypeDeclaration declarationOf(MemberTypeBinding memberTypeBinding)
          Find the matching parse node, answers null if nothing found
 AbstractMethodDeclaration declarationOf(MethodBinding methodBinding)
          Find the matching parse node, answers null if nothing found
 TypeDeclaration declarationOfType(char[][] typeName)
          Finds the matching type amoung this type's member types.
 void generateCode(BlockScope blockScope, CodeStream codeStream)
          Bytecode generation for a local inner type (API as a normal statement code gen)
 void generateCode(ClassFile enclosingClassFile)
          Generic bytecode generation for type
 void generateCode(ClassScope classScope, ClassFile enclosingClassFile)
          Bytecode generation for a member inner type
 void generateCode(CompilationUnitScope unitScope)
          Bytecode generation for a package member
 boolean hasErrors()
           
 boolean isSecondary()
          Returns whether the type is a secondary one or not.
static int kind(int flags)
           
 void manageEnclosingInstanceAccessIfNecessary(BlockScope currentScope, FlowInfo flowInfo)
           
 void manageEnclosingInstanceAccessIfNecessary(ClassScope currentScope, FlowInfo flowInfo)
          Access emulation for a local member type force to emulation of access to direct enclosing instance.
 boolean needClassInitMethod()
          A will be requested as soon as static fields or assertions are present.
 void parseMethod(Parser parser, CompilationUnitDeclaration unit)
           
 java.lang.StringBuffer print(int indent, java.lang.StringBuffer output)
           
 java.lang.StringBuffer printBody(int indent, java.lang.StringBuffer output)
           
 java.lang.StringBuffer printHeader(int indent, java.lang.StringBuffer output)
           
 java.lang.StringBuffer printStatement(int tab, java.lang.StringBuffer output)
           
 void resolve()
           
 void resolve(BlockScope blockScope)
           
 void resolve(ClassScope upperScope)
           
 void resolve(CompilationUnitScope upperScope)
           
 void tagAsHavingErrors()
           
 void traverse(ASTVisitor visitor, BlockScope blockScope)
          Iteration for a local innertype
 void traverse(ASTVisitor visitor, ClassScope classScope)
          Iteration for a member innertype
 void traverse(ASTVisitor visitor, CompilationUnitScope unitScope)
          Iteration for a package member type
 
Methods inherited from class org.eclipse.jdt.internal.compiler.ast.Statement
branchChainTo, complainIfUnreachable, generateArguments, isEmptyBlock, isValidJavaStatement, resolveCase
 
Methods inherited from class org.eclipse.jdt.internal.compiler.ast.ASTNode
checkInvocationArguments, concreteStatement, isFieldUseDeprecated, isImplicitThis, isMethodUseDeprecated, isSuper, isThis, isTypeUseDeprecated, printAnnotations, printIndent, printModifiers, resolveAnnotations, resolveDeprecatedAnnotations, sourceEnd, sourceStart, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

ANONYMOUS_EMPTY_NAME

public static final char[] ANONYMOUS_EMPTY_NAME

CLASS_DECL

public static final int CLASS_DECL
See Also:
Constant Field Values

INTERFACE_DECL

public static final int INTERFACE_DECL
See Also:
Constant Field Values

ENUM_DECL

public static final int ENUM_DECL
See Also:
Constant Field Values

ANNOTATION_TYPE_DECL

public static final int ANNOTATION_TYPE_DECL
See Also:
Constant Field Values

modifiers

public int modifiers

modifiersSourceStart

public int modifiersSourceStart

annotations

public Annotation[] annotations

name

public char[] name

superclass

public TypeReference superclass

superInterfaces

public TypeReference[] superInterfaces

fields

public FieldDeclaration[] fields

methods

public AbstractMethodDeclaration[] methods

memberTypes

public TypeDeclaration[] memberTypes

binding

public SourceTypeBinding binding

scope

public ClassScope scope

initializerScope

public MethodScope initializerScope

staticInitializerScope

public MethodScope staticInitializerScope

ignoreFurtherInvestigation

public boolean ignoreFurtherInvestigation

maxFieldCount

public int maxFieldCount

declarationSourceStart

public int declarationSourceStart

declarationSourceEnd

public int declarationSourceEnd

bodyStart

public int bodyStart

bodyEnd

public int bodyEnd

hasBeenGenerated

protected boolean hasBeenGenerated

compilationResult

public CompilationResult compilationResult

missingAbstractMethods

public MethodDeclaration[] missingAbstractMethods

javadoc

public Javadoc javadoc

allocation

public QualifiedAllocationExpression allocation

enclosingType

public TypeDeclaration enclosingType

enumValuesSyntheticfield

public FieldBinding enumValuesSyntheticfield

typeParameters

public TypeParameter[] typeParameters
Constructor Detail

TypeDeclaration

public TypeDeclaration(CompilationResult compilationResult)
Method Detail

abort

public void abort(int abortLevel,
                  CategorizedProblem problem)
Specified by:
abort in interface ReferenceContext

addClinit

public final void addClinit()
This method is responsible for adding a method declaration to the type method collections. Note that this implementation is inserting it in first place (as VAJ or javac), and that this impacts the behavior of the method ConstantPool.resetForClinit(int. int), in so far as the latter will have to reset the constant pool state accordingly (if it was added first, it does not need to preserve some of the method specific cached entries since this will be the first method). inserts the clinit method declaration in the first position.

See Also:
ConstantPool.resetForClinit(int, int)

addMissingAbstractMethodFor

public MethodDeclaration addMissingAbstractMethodFor(MethodBinding methodBinding)

analyseCode

public FlowInfo analyseCode(BlockScope currentScope,
                            FlowContext flowContext,
                            FlowInfo flowInfo)
Flow analysis for a local innertype

Specified by:
analyseCode in class Statement

analyseCode

public void analyseCode(ClassScope enclosingClassScope)
Flow analysis for a member innertype


analyseCode

public void analyseCode(ClassScope currentScope,
                        FlowContext flowContext,
                        FlowInfo flowInfo)
Flow analysis for a local member innertype


analyseCode

public void analyseCode(CompilationUnitScope unitScope)
Flow analysis for a package member type


checkConstructors

public boolean checkConstructors(Parser parser)
Check for constructor vs. method with no return type. Answers true if at least one constructor is defined


compilationResult

public CompilationResult compilationResult()
Specified by:
compilationResult in interface ReferenceContext

createDefaultConstructor

public ConstructorDeclaration createDefaultConstructor(boolean needExplicitConstructorCall,
                                                       boolean needToInsert)

createDefaultConstructorWithBinding

public MethodBinding createDefaultConstructorWithBinding(MethodBinding inheritedConstructorBinding)

declarationOf

public FieldDeclaration declarationOf(FieldBinding fieldBinding)
Find the matching parse node, answers null if nothing found


declarationOf

public TypeDeclaration declarationOf(MemberTypeBinding memberTypeBinding)
Find the matching parse node, answers null if nothing found


declarationOf

public AbstractMethodDeclaration declarationOf(MethodBinding methodBinding)
Find the matching parse node, answers null if nothing found


declarationOfType

public TypeDeclaration declarationOfType(char[][] typeName)
Finds the matching type amoung this type's member types. Returns null if no type with this name is found. The type name is a compound name relative to this type eg. if this type is X and we're looking for Y.X.A.B then a type name would be {X, A, B}


generateCode

public void generateCode(ClassFile enclosingClassFile)
Generic bytecode generation for type


generateCode

public void generateCode(BlockScope blockScope,
                         CodeStream codeStream)
Bytecode generation for a local inner type (API as a normal statement code gen)

Specified by:
generateCode in class Statement

generateCode

public void generateCode(ClassScope classScope,
                         ClassFile enclosingClassFile)
Bytecode generation for a member inner type


generateCode

public void generateCode(CompilationUnitScope unitScope)
Bytecode generation for a package member


hasErrors

public boolean hasErrors()
Specified by:
hasErrors in interface ReferenceContext

kind

public static final int kind(int flags)

manageEnclosingInstanceAccessIfNecessary

public void manageEnclosingInstanceAccessIfNecessary(BlockScope currentScope,
                                                     FlowInfo flowInfo)

manageEnclosingInstanceAccessIfNecessary

public void manageEnclosingInstanceAccessIfNecessary(ClassScope currentScope,
                                                     FlowInfo flowInfo)
Access emulation for a local member type force to emulation of access to direct enclosing instance. By using the initializer scope, we actually only request an argument emulation, the field is not added until actually used. However we will force allocations to be qualified with an enclosing instance. Local member cannot be static.


needClassInitMethod

public final boolean needClassInitMethod()
A will be requested as soon as static fields or assertions are present. It will be eliminated during classfile creation if no bytecode was actually produced based on some optimizations/compiler settings.


parseMethod

public void parseMethod(Parser parser,
                        CompilationUnitDeclaration unit)

print

public java.lang.StringBuffer print(int indent,
                                    java.lang.StringBuffer output)
Overrides:
print in class Statement

printBody

public java.lang.StringBuffer printBody(int indent,
                                        java.lang.StringBuffer output)

printHeader

public java.lang.StringBuffer printHeader(int indent,
                                          java.lang.StringBuffer output)

printStatement

public java.lang.StringBuffer printStatement(int tab,
                                             java.lang.StringBuffer output)
Specified by:
printStatement in class Statement

resolve

public void resolve()

resolve

public void resolve(BlockScope blockScope)
Specified by:
resolve in class Statement

resolve

public void resolve(ClassScope upperScope)

resolve

public void resolve(CompilationUnitScope upperScope)

tagAsHavingErrors

public void tagAsHavingErrors()
Specified by:
tagAsHavingErrors in interface ReferenceContext

traverse

public void traverse(ASTVisitor visitor,
                     CompilationUnitScope unitScope)
Iteration for a package member type


traverse

public void traverse(ASTVisitor visitor,
                     BlockScope blockScope)
Iteration for a local innertype

Overrides:
traverse in class ASTNode

traverse

public void traverse(ASTVisitor visitor,
                     ClassScope classScope)
Iteration for a member innertype


isSecondary

public boolean isSecondary()
Returns whether the type is a secondary one or not.