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

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

public class AspectDeclaration
extends TypeDeclaration

Represents an aspect declaration.


Field Summary
 java.util.Map<ResolvedMember,Binding> accessForInline
           
 int adviceCounter
           
 ResolvedMember aspectOfMethod
           
 EclipseSourceType concreteName
           
 int declareCounter
           
 TypePattern dominatesPattern
           
 EclipseFactory factory
           
 ResolvedMember hasAspectMethod
           
 boolean isPrivileged
           
 PerClause perClause
           
 ResolvedMember ptwGetWithinTypeNameMethod
           
 java.util.Map<ResolvedMember,org.aspectj.ajdt.internal.compiler.ast.AccessForInlineVisitor.SuperAccessMethodPair> superAccessForInline
           
 ReferenceType typeX
           
 
Fields inherited from class org.aspectj.org.eclipse.jdt.internal.compiler.ast.TypeDeclaration
allocation, ANNOTATION_TYPE_DECL, annotations, binding, bodyEnd, bodyStart, CLASS_DECL, compilationResult, declarationSourceEnd, declarationSourceStart, enclosingType, ENUM_DECL, enumConstantsCounter, enumValuesSyntheticfield, fields, ignoreFurtherInvestigation, initializerScope, INTERFACE_DECL, javadoc, maxFieldCount, memberTypes, methods, missingAbstractMethods, modifiers, modifiersSourceStart, name, originalAnnotations, scope, staticInitializerScope, superclass, superInterfaces, typeParameters
 
Fields inherited from class org.aspectj.org.eclipse.jdt.internal.compiler.ast.Statement
COMPLAINED_FAKE_REACHABLE, COMPLAINED_UNREACHABLE, NOT_COMPLAINED
 
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
AspectDeclaration(CompilationResult compilationResult)
           
 
Method Summary
 void addAtAspectJAnnotations()
          AMC - this method is called by the AtAspectJVisitor during beforeCompilation processing in the AjCompiler adapter.
 void buildInterTypeAndPerClause(ClassScope classScope)
           
 void checkSpec(ClassScope scope)
           
protected  void generateAttributes(ClassFile classFile)
           
 void generateCode(ClassFile enclosingClassFile)
          Generic bytecode generation for type
 int getDeclaredModifiers()
          All aspects are made public after type checking etc.
 char[] getLocalTypeNameSuffix()
           
 boolean isAbstract()
           
protected  java.util.List<EclipseAttributeAdapter> makeEffectiveSignatureAttribute(ResolvedMember sig, Shadow.Kind kind, boolean weaveBody)
           
 boolean needClassInitMethod()
          A will be requested as soon as static fields or assertions are present.
 java.lang.StringBuffer printHeader(int indent, java.lang.StringBuffer output)
           
 void processIntertypeMemberTypes(ClassScope classScope)
           
 void resolve()
           
 
Methods inherited from class org.aspectj.org.eclipse.jdt.internal.compiler.ast.TypeDeclaration
abort, addClinit, addMissingAbstractMethodFor, alternativeName, analyseCode, analyseCode, analyseCode, analyseCode, checkConstructors, compilationResult, createDefaultConstructor, createDefaultConstructorWithBinding, declarationOf, declarationOf, declarationOf, declarationOfType, generateCode, generateCode, generateCode, hasErrors, isSecondary, kind, manageEnclosingInstanceAccessIfNecessary, manageEnclosingInstanceAccessIfNecessary, parseMethods, print, printBody, printStatement, rememberAnnotations, resolve, resolve, resolve, tagAsHavingErrors, traverse, traverse, traverse
 
Methods inherited from class org.aspectj.org.eclipse.jdt.internal.compiler.ast.Statement
branchChainTo, checkAgainstNullAnnotation, complainIfUnreachable, expectedType, generateArguments, isBoxingCompatible, isEmptyBlock, isKnowDeadCodePattern, isValidJavaStatement, resolveCase
 
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
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

perClause

public PerClause perClause

aspectOfMethod

public ResolvedMember aspectOfMethod

ptwGetWithinTypeNameMethod

public ResolvedMember ptwGetWithinTypeNameMethod

hasAspectMethod

public ResolvedMember hasAspectMethod

accessForInline

public java.util.Map<ResolvedMember,Binding> accessForInline

superAccessForInline

public java.util.Map<ResolvedMember,org.aspectj.ajdt.internal.compiler.ast.AccessForInlineVisitor.SuperAccessMethodPair> superAccessForInline

isPrivileged

public boolean isPrivileged

concreteName

public EclipseSourceType concreteName

typeX

public ReferenceType typeX

factory

public EclipseFactory factory

adviceCounter

public int adviceCounter

declareCounter

public int declareCounter

dominatesPattern

public TypePattern dominatesPattern
Constructor Detail

AspectDeclaration

public AspectDeclaration(CompilationResult compilationResult)
Method Detail

isAbstract

public boolean isAbstract()

resolve

public void resolve()
Overrides:
resolve in class TypeDeclaration

checkSpec

public void checkSpec(ClassScope scope)

addAtAspectJAnnotations

public void addAtAspectJAnnotations()
AMC - this method is called by the AtAspectJVisitor during beforeCompilation processing in the AjCompiler adapter. We use this hook to add in the @AspectJ annotations.


generateCode

public void generateCode(ClassFile enclosingClassFile)
Description copied from class: TypeDeclaration
Generic bytecode generation for type

Overrides:
generateCode in class TypeDeclaration

needClassInitMethod

public boolean needClassInitMethod()
Description copied from class: TypeDeclaration
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.

Overrides:
needClassInitMethod in class TypeDeclaration

generateAttributes

protected void generateAttributes(ClassFile classFile)
Overrides:
generateAttributes in class TypeDeclaration

makeEffectiveSignatureAttribute

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

processIntertypeMemberTypes

public void processIntertypeMemberTypes(ClassScope classScope)

buildInterTypeAndPerClause

public void buildInterTypeAndPerClause(ClassScope classScope)

printHeader

public java.lang.StringBuffer printHeader(int indent,
                                          java.lang.StringBuffer output)
Overrides:
printHeader in class TypeDeclaration

getDeclaredModifiers

public int getDeclaredModifiers()
All aspects are made public after type checking etc. and before generating code (so that the advice can be called!). This method returns the modifiers as specified in the original source code declaration so that the structure model sees the right thing.


getLocalTypeNameSuffix

public char[] getLocalTypeNameSuffix()
Overrides:
getLocalTypeNameSuffix in class TypeDeclaration