From: aclement Date: Thu, 29 Apr 2010 19:49:26 +0000 (+0000) Subject: 307009: test and fix: declare soft and call joinpoint (matching on annotations) X-Git-Tag: V1_6_9M2~26 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=616df116630470ff93b2a6c5cfdae7cc6386f38a;p=aspectj.git 307009: test and fix: declare soft and call joinpoint (matching on annotations) --- diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/EclipseResolvedMember.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/EclipseResolvedMember.java index b5031766c..a2c219aea 100644 --- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/EclipseResolvedMember.java +++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/EclipseResolvedMember.java @@ -33,6 +33,7 @@ import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding; import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeBinding; import org.aspectj.weaver.AnnotationAJ; import org.aspectj.weaver.BCException; +import org.aspectj.weaver.Member; import org.aspectj.weaver.MemberKind; import org.aspectj.weaver.ReferenceType; import org.aspectj.weaver.ResolvedMember; @@ -75,12 +76,14 @@ public class EclipseResolvedMember extends ResolvedMemberImpl { public boolean hasAnnotation(UnresolvedType ofType) { ResolvedType[] annotationTypes = getAnnotationTypes(); - if (annotationTypes == null) + if (annotationTypes == null) { return false; + } for (int i = 0; i < annotationTypes.length; i++) { ResolvedType type = annotationTypes[i]; - if (type.equals(ofType)) + if (type.equals(ofType)) { return true; + } } return false; } @@ -101,12 +104,12 @@ public class EclipseResolvedMember extends ResolvedMemberImpl { } else { UnresolvedType declaringType = this.getDeclaringType(); if (declaringType instanceof ReferenceType) { - ReferenceType referenceDeclaringType = (ReferenceType)declaringType; + ReferenceType referenceDeclaringType = (ReferenceType) declaringType; if (referenceDeclaringType.getDelegate() instanceof BcelObjectType) { // worth a look! - ResolvedMember field = ((ResolvedType)declaringType).lookupField(this); - if (field!=null) { - return field.getAnnotations(); + ResolvedMember field = ((ResolvedType) declaringType).lookupField(this); + if (field != null) { + return field.getAnnotations(); } } } @@ -119,8 +122,9 @@ public class EclipseResolvedMember extends ResolvedMemberImpl { // long abits = realBinding.getAnnotationTagBits(); // ensure resolved Annotation[] annos = getEclipseAnnotations(); - if (annos == null) + if (annos == null) { return null; + } for (int i = 0; i < annos.length; i++) { Annotation anno = annos[i]; UnresolvedType ut = UnresolvedType.forSignature(new String(anno.resolvedType.signature())); @@ -129,15 +133,15 @@ public class EclipseResolvedMember extends ResolvedMemberImpl { return EclipseAnnotationConvertor.convertEclipseAnnotation(anno, w, eclipseFactory); } } - } else { + } else { UnresolvedType declaringType = this.getDeclaringType(); if (declaringType instanceof ReferenceType) { - ReferenceType referenceDeclaringType = (ReferenceType)declaringType; + ReferenceType referenceDeclaringType = (ReferenceType) declaringType; if (referenceDeclaringType.getDelegate() instanceof BcelObjectType) { // worth a look! - ResolvedMember field = ((ResolvedType)declaringType).lookupField(this); - if (field!=null) { - return field.getAnnotationOfType(ofType); + ResolvedMember field = ((ResolvedType) declaringType).lookupField(this); + if (field != null) { + return field.getAnnotationOfType(ofType); } } } @@ -147,10 +151,10 @@ public class EclipseResolvedMember extends ResolvedMemberImpl { public String getAnnotationDefaultValue() { // Andy, if you are debugging in here and your problem is some kind of incremental build failure where a match on - // a member annotation value is failing then you should look at bug 307120. Under that bug you discovered that + // a member annotation value is failing then you should look at bug 307120. Under that bug you discovered that // for privileged field accesses from ITDs, an EclipseResolvedMember may be created (inside the privileged munger - see // PrivilegedHandler) and then later when the annotations are looked up on it, that fails because we can't find the - // declaration for the member. This is because on the incremental build the member will likely represent something + // declaration for the member. This is because on the incremental build the member will likely represent something // inside a binary type (BinaryTypeBinding) - and when that happens we should not look on the type declaration but // instead on the delegate for the declaringClass because it will likely be a BcelObjectType with the right stuff // in it - see the other checks on BcelObjectType in this class. @@ -159,8 +163,9 @@ public class EclipseResolvedMember extends ResolvedMemberImpl { if (methodDecl instanceof AnnotationMethodDeclaration) { AnnotationMethodDeclaration annoMethodDecl = (AnnotationMethodDeclaration) methodDecl; Expression e = annoMethodDecl.defaultValue; - if (e.resolvedType == null) + if (e.resolvedType == null) { e.resolve(methodDecl.scope); + } // TODO does not cope with many cases... if (e instanceof QualifiedNameReference) { @@ -219,12 +224,19 @@ public class EclipseResolvedMember extends ResolvedMemberImpl { cachedAnnotationTypes = ResolvedType.EMPTY_RESOLVED_TYPE_ARRAY; UnresolvedType declaringType = this.getDeclaringType(); if (declaringType instanceof ReferenceType) { - ReferenceType referenceDeclaringType = (ReferenceType)declaringType; + ReferenceType referenceDeclaringType = (ReferenceType) declaringType; if (referenceDeclaringType.getDelegate() instanceof BcelObjectType) { // worth a look! - ResolvedMember field = ((ResolvedType)declaringType).lookupField(this); - if (field!=null) { - cachedAnnotationTypes = field.getAnnotationTypes(); + if (this.getKind() == Member.METHOD) { + ResolvedMember method = ((ResolvedType) declaringType).lookupMethod(this); + if (method != null) { + cachedAnnotationTypes = method.getAnnotationTypes(); + } + } else { + ResolvedMember field = ((ResolvedType) declaringType).lookupField(this); + if (field != null) { + cachedAnnotationTypes = field.getAnnotationTypes(); + } } } } @@ -234,8 +246,9 @@ public class EclipseResolvedMember extends ResolvedMemberImpl { } public String[] getParameterNames() { - if (argumentNames != null) + if (argumentNames != null) { return argumentNames; + } if (realBinding instanceof FieldBinding) { argumentNames = NO_ARGS; } else { @@ -265,8 +278,8 @@ public class EclipseResolvedMember extends ResolvedMemberImpl { } /** - * Discover the (eclipse form) annotations on this resolved member. This is done by going to the type declaration, - * looking up the member (field/method) then grabbing the annotations. + * Discover the (eclipse form) annotations on this resolved member. This is done by going to the type declaration, looking up + * the member (field/method) then grabbing the annotations. * * @return an array of (eclipse form) annotations on this member */ @@ -308,14 +321,14 @@ public class EclipseResolvedMember extends ResolvedMemberImpl { } return null; } - + private boolean isTypeDeclarationAvailable() { - return getTypeDeclaration()!=null; + return getTypeDeclaration() != null; } /** * @return the type declaration that contained this member, or NULL if it is not available (eg. this isn't currently related to - * a SOURCE-FORM artifact, it is instead related to a BINARY-FORM artifact) + * a SOURCE-FORM artifact, it is instead related to a BINARY-FORM artifact) */ private TypeDeclaration getTypeDeclaration() { if (realBinding instanceof MethodBinding) { @@ -324,8 +337,9 @@ public class EclipseResolvedMember extends ResolvedMemberImpl { SourceTypeBinding stb = (SourceTypeBinding) mb.declaringClass; if (stb != null) { ClassScope cScope = stb.scope; - if (cScope != null) + if (cScope != null) { return cScope.referenceContext; + } } } } else if (realBinding instanceof FieldBinding) { @@ -334,8 +348,9 @@ public class EclipseResolvedMember extends ResolvedMemberImpl { SourceTypeBinding stb = (SourceTypeBinding) fb.declaringClass; if (stb != null) { ClassScope cScope = stb.scope; - if (cScope != null) + if (cScope != null) { return cScope.referenceContext; + } } } }