aboutsummaryrefslogtreecommitdiffstats
path: root/weaver
diff options
context:
space:
mode:
authoraclement <aclement>2008-06-11 18:24:25 +0000
committeraclement <aclement>2008-06-11 18:24:25 +0000
commit3b13e9b46e82001b285bbc61634ec1c446e84343 (patch)
treeb0ec2abf8a7786336304b7b446a77925208e286e /weaver
parent7ceeb0b26a83c56bee579aed4e42b458f1f3469c (diff)
downloadaspectj-3b13e9b46e82001b285bbc61634ec1c446e84343.tar.gz
aspectj-3b13e9b46e82001b285bbc61634ec1c446e84343.zip
197719: test and fix: advising protected method calls from inner classes
Diffstat (limited to 'weaver')
-rw-r--r--weaver/src/org/aspectj/weaver/bcel/BcelShadow.java16
1 files changed, 12 insertions, 4 deletions
diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java b/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java
index 99cb6f387..dbf68b730 100644
--- a/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java
+++ b/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java
@@ -3448,15 +3448,23 @@ public class BcelShadow extends Shadow {
}
ResolvedMember resolvedMember = getSignature().resolve(world);
- // pr230075
+ // pr230075, pr197719
if (resolvedMember != null && Modifier.isProtected(resolvedMember.getModifiers()) &&
!samePackage(resolvedMember.getDeclaringType().getPackageName(), getEnclosingType().getPackageName()) &&
!resolvedMember.getName().equals("clone"))
{
- if (!targetType.resolve(world).isAssignableFrom(getThisType().resolve(world))) {
- throw new BCException("bad bytecode");
+ if (!hasThis()) { // pr197719 - static accessor has been created to handle the call
+ if (Modifier.isStatic(enclosingMethod.getAccessFlags()) && enclosingMethod.getName().startsWith("access$")) {
+ targetType = BcelWorld.fromBcel(enclosingMethod.getArgumentTypes()[0]);
+ } else {
+ throw new BCException("unexpectedly found static context at shadow "+toString()+": accessor method involved?");
+ }
+ } else {
+ if (!targetType.resolve(world).isAssignableFrom(getThisType().resolve(world))) {
+ throw new BCException("bad bytecode");
+ }
+ targetType = getThisType();
}
- targetType = getThisType();
}
parameterTypes = addType(BcelWorld.makeBcelType(targetType), parameterTypes);
}