org.aspectj.ajdt.internal.compiler.ast
Class InterTypeDeclaration

java.lang.Object
  extended by org.aspectj.org.eclipse.jdt.internal.compiler.ast.ASTNode
      extended by org.aspectj.org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration
          extended by org.aspectj.org.eclipse.jdt.internal.compiler.ast.MethodDeclaration
              extended by org.aspectj.ajdt.internal.compiler.ast.AjMethodDeclaration
                  extended by org.aspectj.ajdt.internal.compiler.ast.InterTypeDeclaration
All Implemented Interfaces:
ReferenceContext, TypeConstants, TypeIds, ProblemSeverities
Direct Known Subclasses:
InterTypeConstructorDeclaration, InterTypeFieldDeclaration, InterTypeMethodDeclaration

public abstract class InterTypeDeclaration
extends AjMethodDeclaration

Base type for all inter-type declarations including methods, fields and constructors.


Field Summary
 int declaredModifiers
           
protected  char[] declaredSelector
           
protected  InterTypeScope interTypeScope
           
protected  ResolvedTypeMunger munger
           
protected  TypeReference onType
           
protected  ReferenceBinding onTypeBinding
           
protected  java.util.List typeVariableAliases
          If targetting a generic type and wanting to use its type variables, an ITD can use an alternative name for them.
 
Fields inherited from class org.aspectj.org.eclipse.jdt.internal.compiler.ast.MethodDeclaration
returnType, typeParameters
 
Fields inherited from class org.aspectj.org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration
annotations, arguments, binding, bodyEnd, bodyStart, compilationResult, declarationSourceEnd, declarationSourceStart, explicitDeclarations, ignoreFurtherInvestigation, javadoc, modifiers, modifiersSourceStart, scope, selector, statements, thrownExceptions
 
Fields inherited from class org.aspectj.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, BlockExit, CanBeStatic, ContainsAssertion, DepthMASK, DepthSHIFT, DidResolve, DisableUnnecessaryCastCheck, DiscardEnclosingInstance, DocumentedFallthrough, Empty, ErrorInSignature, FirstAssignmentToLocal, GenerateCheckcast, HasAbstractMethods, HasAllMethodBodies, HasBeenGenerated, HasBeenResolved, HasLocalType, HasSyntaxErrors, IgnoreNoEffectAssignCheck, IgnoreRawTypeCheck, InsideExpressionStatement, InsideJavadoc, INVOCATION_ARGUMENT_OK, INVOCATION_ARGUMENT_UNCHECKED, INVOCATION_ARGUMENT_WILDCARD, IsAnnotationDefaultValue, IsAnonymousType, IsAnySubRoutineEscaping, IsArgument, IsCompoundAssigned, IsDefaultConstructor, IsDiamond, IsElseIfStatement, IsElseStatementUnreachable, IsImplicitThis, IsImplicitUnit, IsLocalDeclarationReachable, IsLocalType, IsMemberType, IsNonNull, IsReachable, IsRecovered, IsReturnedValue, IsSecondaryType, IsStrictlyAssigned, IsSubRoutineEscaping, IsSuperType, IsSynchronized, IsThenStatementUnreachable, IsTryBlockExiting, IsUnionType, IsUsefulEmptyStatement, IsVarArgs, LabelUsed, NeededScope, NeedFreeReturn, NeedReceiverGenericCast, OnDemand, OperatorMASK, OperatorSHIFT, OverridingMethodWithSupercall, ParenthesizedMASK, ParenthesizedSHIFT, ResolveJavadoc, RestrictiveFlagMASK, ReturnTypeIDMASK, sourceEnd, sourceStart, SuperAccess, ThenExit, Unchecked, UndocumentedEmptyBlock, UnnecessaryCast, UnsafeCast, Used
 
Fields inherited from interface org.aspectj.org.eclipse.jdt.internal.compiler.problem.ProblemSeverities
Abort, AbortCompilation, AbortCompilationUnit, AbortMethod, AbortType, Error, Fatal, Ignore, Optional, SecondaryError, Warning
 
Fields inherited from interface org.aspectj.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, EQUALS, FLOAT, GETCLASS, HASHCODE, INIT, INT, INVOKE, IO, JAVA, JAVA_IO, JAVA_IO_EXTERNALIZABLE, JAVA_IO_IOEXCEPTION, JAVA_IO_OBJECTINPUTSTREAM, JAVA_IO_OBJECTOUTPUTSTREAM, JAVA_IO_OBJECTSTREAMEXCEPTION, 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_AUTOCLOSEABLE, 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_INVOKE_METHODHANDLE_$_POLYMORPHICSIGNATURE, JAVA_LANG_INVOKE_METHODHANDLE_POLYMORPHICSIGNATURE, 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_SAFEVARARGS, 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_COLLECTION, JAVA_UTIL_ITERATOR, JAVAX_RMI_CORBA_STUB, 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_CONSTANT_INITIALIZATION_METHOD_PREFIX, SYNTHETIC_ENUM_VALUES, SYNTHETIC_OUTER_LOCAL_PREFIX, SYNTHETIC_STATIC_FACTORY, 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, UTIL, VALUE, VALUEOF, VALUES, VOID, WILDCARD_CAPTURE, WILDCARD_CAPTURE_NAME_PREFIX, WILDCARD_CAPTURE_NAME_SUFFIX, WILDCARD_EXTENDS, WILDCARD_MINUS, WILDCARD_NAME, WILDCARD_PLUS, WILDCARD_STAR, WILDCARD_SUPER, WRITEOBJECT, WRITEREPLACE
 
Fields inherited from interface org.aspectj.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, Null2Null, Null2String, Object2boolean, Object2byte, Object2char, Object2double, Object2float, Object2int, Object2long, Object2Object, Object2short, Object2String, Short2Byte, Short2Char, Short2Double, Short2Float, Short2Int, Short2Long, Short2Short, Short2String, String2String, T_boolean, T_byte, T_char, T_double, T_float, T_int, T_JavaIoException, T_JavaIoExternalizable, T_JavaIoObjectStreamException, T_JavaIoPrintStream, T_JavaIoSerializable, T_JavaLangAnnotationAnnotation, T_JavaLangAnnotationDocumented, T_JavaLangAnnotationElementType, T_JavaLangAnnotationInherited, T_JavaLangAnnotationRetention, T_JavaLangAnnotationRetentionPolicy, T_JavaLangAnnotationTarget, T_JavaLangAssertionError, T_JavaLangAutoCloseable, 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_JavaLangInvokeMethodHandlePolymorphicSignature, T_JavaLangIterable, T_JavaLangLong, T_JavaLangNoClassDefError, T_JavaLangObject, T_JavaLangOverride, T_JavaLangReflectConstructor, T_JavaLangReflectField, T_JavaLangReflectMethod, T_JavaLangRuntimeException, T_JavaLangSafeVarargs, T_JavaLangShort, T_JavaLangString, T_JavaLangStringBuffer, T_JavaLangStringBuilder, T_JavaLangSuppressWarnings, T_JavaLangSystem, T_JavaLangThrowable, T_JavaLangVoid, T_JavaUtilCollection, T_JavaUtilIterator, T_long, T_null, T_short, T_undefined, T_void, UNBOXING
 
Constructor Summary
InterTypeDeclaration(CompilationResult result, TypeReference onType)
           
 
Method Summary
 void addAtAspectJAnnotations()
           
abstract  EclipseTypeMunger build(ClassScope classScope)
          Called from AspectDeclarations.buildInterTypeAndPerClause
protected  void checkSpec()
           
 void determineTypeVariableAliases()
          Create the list of aliases based on what was supplied as parameters for the ontype.
 void ensureScopeSetup()
          Called just before the compiler is going to start resolving elements of a declaration, this method adds an intertypescope between the methodscope and classscope so that elements of the type targetted by the ITD can be resolved.
 void fixSuperCallsInBody()
           
protected  int generateInfoAttributes(ClassFile classFile)
          Generates my info attributes, hook for subclasses
 char[] getDeclaredSelector()
           
 TypeReference getOnType()
           
protected abstract  char[] getPrefix()
           
protected abstract  Shadow.Kind getShadowKindForBody()
           
 ResolvedMember getSignature()
           
 boolean isTargetAnnotation(ClassScope classScope, java.lang.String kind)
          Checks that the target for the ITD is not an annotation.
 boolean isTargetEnum(ClassScope classScope, java.lang.String kind)
          Checks that the target for the ITD is not an enum.
protected  java.util.List makeEffectiveSignatureAttribute(ResolvedMember sig, Shadow.Kind kind, boolean weaveBody)
           
 void resolve(ClassScope upperScope)
           
protected  void resolveOnType(ClassScope classScope)
           
 void setDeclaredModifiers(int modifiers)
           
protected  void setMunger(ResolvedTypeMunger munger)
           
 void setOnType(TypeReference onType)
           
 void setSelector(char[] selector)
           
 
Methods inherited from class org.aspectj.ajdt.internal.compiler.ast.AjMethodDeclaration
addAttribute, addDeclarationStartLineAttribute, generateInfoAttributes
 
Methods inherited from class org.aspectj.org.eclipse.jdt.internal.compiler.ast.MethodDeclaration
analyseCode, isMethod, parseStatements, printReturnType, resolveStatements, traverse, typeParameters
 
Methods inherited from class org.aspectj.org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration
abort, bindArguments, bindThrownExceptions, compilationResult, finishResolveTypes, generateCode, generateCode, hasErrors, isAbstract, isAnnotationMethod, isClinit, isConstructor, isDefaultConstructor, isInitializationMethod, isNative, isStatic, postParse, print, printBody, resolveJavadoc, tagAsHavingErrors
 
Methods inherited from class org.aspectj.org.eclipse.jdt.internal.compiler.ast.ASTNode
checkInvocationArguments, concreteStatement, isFieldUseDeprecated, isImplicitThis, isMethodUseDeprecated, isSuper, isThis, isTypeUseDeprecated, printAnnotations, printIndent, printModifiers, resolveAnnotations, resolveDeprecatedAnnotations, sourceEnd, sourceStart, toString, traverse
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

onType

protected TypeReference onType

onTypeBinding

protected ReferenceBinding onTypeBinding

munger

protected ResolvedTypeMunger munger

declaredModifiers

public int declaredModifiers

declaredSelector

protected char[] declaredSelector

typeVariableAliases

protected java.util.List typeVariableAliases
If targetting a generic type and wanting to use its type variables, an ITD can use an alternative name for them. This is a list of strings representing the alternative names - the position in the list is used to match it to the real type variable in the target generic type.


interTypeScope

protected InterTypeScope interTypeScope
Constructor Detail

InterTypeDeclaration

public InterTypeDeclaration(CompilationResult result,
                            TypeReference onType)
Method Detail

setOnType

public void setOnType(TypeReference onType)

setDeclaredModifiers

public void setDeclaredModifiers(int modifiers)

setSelector

public void setSelector(char[] selector)

getPrefix

protected abstract char[] getPrefix()

addAtAspectJAnnotations

public void addAtAspectJAnnotations()

isTargetAnnotation

public boolean isTargetAnnotation(ClassScope classScope,
                                  java.lang.String kind)
Checks that the target for the ITD is not an annotation. If it is, an error message is signaled. We return true if it is annotation so the caller knows to stop processing. kind is 'constructor', 'field', 'method'


isTargetEnum

public boolean isTargetEnum(ClassScope classScope,
                            java.lang.String kind)
Checks that the target for the ITD is not an enum. If it is, an error message is signaled. We return true if it is enum so the caller knows to stop processing.


resolve

public void resolve(ClassScope upperScope)
Overrides:
resolve in class AbstractMethodDeclaration

build

public abstract EclipseTypeMunger build(ClassScope classScope)
Called from AspectDeclarations.buildInterTypeAndPerClause


fixSuperCallsInBody

public void fixSuperCallsInBody()

resolveOnType

protected void resolveOnType(ClassScope classScope)

checkSpec

protected void checkSpec()

makeEffectiveSignatureAttribute

protected java.util.List makeEffectiveSignatureAttribute(ResolvedMember sig,
                                                         Shadow.Kind kind,
                                                         boolean weaveBody)

setMunger

protected void setMunger(ResolvedTypeMunger munger)

generateInfoAttributes

protected int generateInfoAttributes(ClassFile classFile)
Description copied from class: AbstractMethodDeclaration
Generates my info attributes, hook for subclasses

Overrides:
generateInfoAttributes in class AjMethodDeclaration

getShadowKindForBody

protected abstract Shadow.Kind getShadowKindForBody()

getSignature

public ResolvedMember getSignature()

getDeclaredSelector

public char[] getDeclaredSelector()

getOnType

public TypeReference getOnType()

determineTypeVariableAliases

public void determineTypeVariableAliases()
Create the list of aliases based on what was supplied as parameters for the ontype. For example, if the declaration is 'List SomeType.foo' then the alias list will simply contain 'N' and 'N' will mean 'the first type variable declared for type SomeType'


ensureScopeSetup

public void ensureScopeSetup()
Called just before the compiler is going to start resolving elements of a declaration, this method adds an intertypescope between the methodscope and classscope so that elements of the type targetted by the ITD can be resolved. For example, if type variables are referred to in the ontype for the ITD, they have to be resolved against the ontype, not the aspect containing the ITD.

Overrides:
ensureScopeSetup in class AbstractMethodDeclaration