aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraclement <aclement>2009-01-13 20:30:06 +0000
committeraclement <aclement>2009-01-13 20:30:06 +0000
commit2a58fc63d699f4be27bd81a5512b079e923e498d (patch)
tree2c15079c9a7603c718df60538d032a0504bfb46e
parentc081bf7f5f4f642e01cb99d930a64852a9c8232a (diff)
downloadaspectj-2a58fc63d699f4be27bd81a5512b079e923e498d.tar.gz
aspectj-2a58fc63d699f4be27bd81a5512b079e923e498d.zip
260384: Literal.FALSE and clone()
-rw-r--r--weaver/src/org/aspectj/weaver/bcel/BcelAdvice.java10
1 files changed, 9 insertions, 1 deletions
diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelAdvice.java b/weaver/src/org/aspectj/weaver/bcel/BcelAdvice.java
index 25a20746b..72e24c1ea 100644
--- a/weaver/src/org/aspectj/weaver/bcel/BcelAdvice.java
+++ b/weaver/src/org/aspectj/weaver/bcel/BcelAdvice.java
@@ -41,6 +41,7 @@ import org.aspectj.weaver.ShadowMunger;
import org.aspectj.weaver.UnresolvedType;
import org.aspectj.weaver.WeaverMessages;
import org.aspectj.weaver.World;
+import org.aspectj.weaver.Shadow.Kind;
import org.aspectj.weaver.ast.Literal;
import org.aspectj.weaver.ast.Test;
import org.aspectj.weaver.patterns.ExactTypePattern;
@@ -264,7 +265,14 @@ class BcelAdvice extends Advice {
// PerObjectInterfaceTypeMunger.registerAsAdvisedBy(s.getTargetVar().getType(), getConcreteAspect());
// }
// }
-
+ if (pointcutTest == Literal.FALSE) { // not usually allowed, except in one case (260384)
+ Member sig = shadow.getSignature();
+ if (sig.getArity() == 0 && shadow.getKind() == Shadow.MethodCall && sig.getName().charAt(0) == 'c'
+ && sig.getReturnType().equals(ResolvedType.OBJECT) && sig.getName().equals("clone")) {
+ return false;
+ }
+ }
+
if (getKind() == AdviceKind.Before) {
shadow.weaveBefore(this);
} else if (getKind() == AdviceKind.AfterReturning) {