aboutsummaryrefslogtreecommitdiffstats
path: root/org.aspectj.ajdt.core
diff options
context:
space:
mode:
authoracolyer <acolyer>2005-10-04 13:56:38 +0000
committeracolyer <acolyer>2005-10-04 13:56:38 +0000
commitb305f9ee512015657cad0ea722b8180d884b1f72 (patch)
tree1b9c2696672575838f39cc58bd86ba61eecaba79 /org.aspectj.ajdt.core
parent32a02ec2a3e15651249d5d7cc5f63fa409468b2a (diff)
downloadaspectj-b305f9ee512015657cad0ea722b8180d884b1f72.tar.gz
aspectj-b305f9ee512015657cad0ea722b8180d884b1f72.zip
itd support in the MAP
Diffstat (limited to 'org.aspectj.ajdt.core')
-rw-r--r--org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/AddAtAspectJAnnotationsVisitor.java2
-rw-r--r--org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/AtAspectJAnnotationFactory.java19
-rw-r--r--org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/InterTypeDeclaration.java10
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.