]> source.dussan.org Git - aspectj.git/commitdiff
333469
authoraclement <aclement>
Sat, 8 Jan 2011 01:17:40 +0000 (01:17 +0000)
committeraclement <aclement>
Sat, 8 Jan 2011 01:17:40 +0000 (01:17 +0000)
org.aspectj.matcher/src/org/aspectj/weaver/CrosscuttingMembers.java

index 0b514d6ca196b7765913fe81c7298ad2d007bad9..eb4b4444e39b618ea559e94ec6b39a5c3079db76 100644 (file)
@@ -209,9 +209,25 @@ public class CrosscuttingMembers {
                        // Looking it up ensures we get the annotations - the accessedMembers are just retrieved from the attribute and
                        // don't have that information
                        ResolvedMember resolvedMember = world.resolve(member);
+
+                       // pr333469
+                       // If the member is for an ITD (e.g. serialVersionUID) then during resolution we may resolve it on
+                       // a supertype because it doesn't yet exist on the target.
+                       // For example: MyList extends ArrayList<String> and the ITD is on MyList - after resolution it may be:
+                       // ArrayList<String>.serialVersionUID, we need to avoid that happening
+
                        if (resolvedMember == null) {
                                // can happen for ITDs - are there many privileged access ITDs??
                                resolvedMember = member;
+                               if (resolvedMember.hasBackingGenericMember()) {
+                                       resolvedMember = resolvedMember.getBackingGenericMember();
+                               }
+                       } else {
+                               UnresolvedType unresolvedDeclaringType = member.getDeclaringType().getRawType();
+                               UnresolvedType resolvedDeclaringType = resolvedMember.getDeclaringType().getRawType();
+                               if (!unresolvedDeclaringType.equals(resolvedDeclaringType)) {
+                                       resolvedMember = member;
+                               }
                        }
                        PrivilegedAccessMunger privilegedAccessMunger = new PrivilegedAccessMunger(resolvedMember,
                                        version >= WeaverVersionInfo.WEAVER_VERSION_AJ169);