]> source.dussan.org Git - aspectj.git/commitdiff
229910 - dont generate bad code for around advice on fieldset for an inherited field
authoraclement <aclement>
Fri, 2 May 2008 02:20:22 +0000 (02:20 +0000)
committeraclement <aclement>
Fri, 2 May 2008 02:20:22 +0000 (02:20 +0000)
weaver/src/org/aspectj/weaver/bcel/BcelShadow.java

index 86c3ab39f4588e011febd98c15534fd20c7bc5b1..800097b3207c78a44d5cde22bb69c9d64308ae73 100644 (file)
@@ -3460,12 +3460,12 @@ public class BcelShadow extends Shadow {
         if (targetVar != null && targetVar != thisVar) {
             UnresolvedType targetType = getTargetType();
             targetType = ensureTargetTypeIsCorrect(targetType);
-            // see pr109728 - this fixes the case when the declaring class is sometype 'X' but the getfield
+            // see pr109728,pr229910 - this fixes the case when the declaring class is sometype 'X' but the (gs)etfield
             // in the bytecode refers to a subtype of 'X'.  This makes sure we use the type originally
             // mentioned in the fieldget instruction as the method parameter and *not* the type upon which the
             // field is declared because when the instructions are extracted into the new around body,
             // they will still refer to the subtype.
-            if (getKind()==FieldGet && getActualTargetType()!=null && 
+            if ((getKind()==FieldGet || getKind()==FieldSet) && getActualTargetType()!=null && 
                !getActualTargetType().equals(targetType.getName())) {
                        targetType =  UnresolvedType.forName(getActualTargetType()).resolve(world);
                }