diff options
author | acolyer <acolyer> | 2005-10-04 13:56:38 +0000 |
---|---|---|
committer | acolyer <acolyer> | 2005-10-04 13:56:38 +0000 |
commit | b305f9ee512015657cad0ea722b8180d884b1f72 (patch) | |
tree | 1b9c2696672575838f39cc58bd86ba61eecaba79 /org.aspectj.ajdt.core | |
parent | 32a02ec2a3e15651249d5d7cc5f63fa409468b2a (diff) | |
download | aspectj-b305f9ee512015657cad0ea722b8180d884b1f72.tar.gz aspectj-b305f9ee512015657cad0ea722b8180d884b1f72.zip |
itd support in the MAP
Diffstat (limited to 'org.aspectj.ajdt.core')
3 files changed, 31 insertions, 0 deletions
diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/AddAtAspectJAnnotationsVisitor.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/AddAtAspectJAnnotationsVisitor.java index 35ae2fb9b..bc709cc2b 100644 --- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/AddAtAspectJAnnotationsVisitor.java +++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/AddAtAspectJAnnotationsVisitor.java @@ -67,6 +67,8 @@ public class AddAtAspectJAnnotationsVisitor extends ASTVisitor { ((PointcutDeclaration)methodDeclaration).addAtAspectJAnnotations(); } else if (methodDeclaration instanceof DeclareDeclaration) { ((DeclareDeclaration)methodDeclaration).addAtAspectJAnnotations(); + } else if (methodDeclaration instanceof InterTypeDeclaration) { + ((InterTypeDeclaration)methodDeclaration).addAtAspectJAnnotations(); } return false; } diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/AtAspectJAnnotationFactory.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/AtAspectJAnnotationFactory.java index 79fdb87be..35fccc856 100644 --- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/AtAspectJAnnotationFactory.java +++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/AtAspectJAnnotationFactory.java @@ -13,6 +13,7 @@ package org.aspectj.ajdt.internal.compiler.ast; import org.aspectj.org.eclipse.jdt.internal.compiler.ast.Annotation; import org.aspectj.org.eclipse.jdt.internal.compiler.ast.Expression; +import org.aspectj.org.eclipse.jdt.internal.compiler.ast.IntLiteral; import org.aspectj.org.eclipse.jdt.internal.compiler.ast.MemberValuePair; import org.aspectj.org.eclipse.jdt.internal.compiler.ast.NormalAnnotation; import org.aspectj.org.eclipse.jdt.internal.compiler.ast.QualifiedTypeReference; @@ -49,6 +50,7 @@ public class AtAspectJAnnotationFactory { static final char[] declareSoft = "ajcDeclareSoft".toCharArray(); static final char[] declarePrecedence = "ajcDeclarePrecedence".toCharArray(); static final char[] declareAnnotation = "ajcDeclareAnnotation".toCharArray(); + static final char[] itdAnnotation = "ajcITD".toCharArray(); /** * Create an @Aspect annotation for a code style aspect declaration starting at @@ -210,6 +212,23 @@ public class AtAspectJAnnotationFactory { return ann; } + public static Annotation createITDAnnotation(char[] targetTypeName, int modifiers, char[] name, int pos) { + char[][] typeName = new char[][] {org,aspectj,internal,lang,annotation,itdAnnotation}; + long[] positions = new long[typeName.length]; + for (int i = 0; i < positions.length; i++) positions[i] = pos; + TypeReference annType = new QualifiedTypeReference(typeName,positions); + NormalAnnotation ann = new NormalAnnotation(annType,pos); + Expression targetExpr = new StringLiteral(targetTypeName,pos,pos); + Expression nameExpr = new StringLiteral(name,pos,pos); + Expression modsExpr = new IntLiteral(Integer.toString(modifiers).toCharArray(),pos,pos); + MemberValuePair[] mvps = new MemberValuePair[3]; + mvps[0] = new MemberValuePair("targetType".toCharArray(),pos,pos,targetExpr); + mvps[1] = new MemberValuePair("name".toCharArray(),pos,pos,nameExpr); + mvps[2] = new MemberValuePair("modifiers".toCharArray(),pos,pos,modsExpr); + ann.memberValuePairs = mvps; + return ann; + } + public static Annotation createDeclarePrecedenceAnnotation(String pointcutExpression, int pos) { char[][] typeName = new char[][] {org,aspectj,internal,lang,annotation,declarePrecedence}; return makeSingleStringMemberAnnotation(typeName, pos, pointcutExpression); diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/InterTypeDeclaration.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/InterTypeDeclaration.java index 81c47a4d9..bd159aa17 100644 --- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/InterTypeDeclaration.java +++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/InterTypeDeclaration.java @@ -26,6 +26,7 @@ import org.aspectj.bridge.context.ContextToken; import org.aspectj.org.eclipse.jdt.core.compiler.CharOperation; import org.aspectj.org.eclipse.jdt.internal.compiler.ClassFile; import org.aspectj.org.eclipse.jdt.internal.compiler.CompilationResult; +import org.aspectj.org.eclipse.jdt.internal.compiler.ast.Annotation; import org.aspectj.org.eclipse.jdt.internal.compiler.ast.ParameterizedSingleTypeReference; import org.aspectj.org.eclipse.jdt.internal.compiler.ast.SingleTypeReference; import org.aspectj.org.eclipse.jdt.internal.compiler.ast.TypeReference; @@ -93,6 +94,15 @@ public abstract class InterTypeDeclaration extends AjMethodDeclaration { // return the selector prefix for this itd that is to be used before resolution replaces it with a "proper" name protected abstract char[] getPrefix(); + + public void addAtAspectJAnnotations() { + if (munger == null) return; + Annotation ann = AtAspectJAnnotationFactory.createITDAnnotation( + munger.getSignature().getDeclaringType().getName().toCharArray(), + declaredModifiers,declaredSelector,declarationSourceStart); + AtAspectJAnnotationFactory.addAnnotation(this,ann,this.scope); + } + /** * 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. |