diff options
author | acolyer <acolyer> | 2005-08-05 10:19:23 +0000 |
---|---|---|
committer | acolyer <acolyer> | 2005-08-05 10:19:23 +0000 |
commit | 8f4da67cd5008837d59c6a182558b8403cbff58a (patch) | |
tree | 39c01bf55124a4ff26345b4a085759a502a75e36 /weaver | |
parent | c22c80074c9ef8876d758692815b9c100e51f7ed (diff) | |
download | aspectj-8f4da67cd5008837d59c6a182558b8403cbff58a.tar.gz aspectj-8f4da67cd5008837d59c6a182558b8403cbff58a.zip |
tests and implementation for calls to bridge methods. This completes the implementation of the call pointcut for generic and parameterized types.
Diffstat (limited to 'weaver')
5 files changed, 23 insertions, 23 deletions
diff --git a/weaver/src/org/aspectj/weaver/patterns/DeclareAnnotation.java b/weaver/src/org/aspectj/weaver/patterns/DeclareAnnotation.java index 730b30ee5..11fe5579f 100644 --- a/weaver/src/org/aspectj/weaver/patterns/DeclareAnnotation.java +++ b/weaver/src/org/aspectj/weaver/patterns/DeclareAnnotation.java @@ -214,7 +214,7 @@ public class DeclareAnnotation extends Declare { * For @constructor, @method, @field */ public boolean matches(ResolvedMember rm,World world) { - return sigPattern.matches(rm,world); + return sigPattern.matches(rm,world,false); } /** diff --git a/weaver/src/org/aspectj/weaver/patterns/KindedPointcut.java b/weaver/src/org/aspectj/weaver/patterns/KindedPointcut.java index 199f33085..655ed1bbd 100644 --- a/weaver/src/org/aspectj/weaver/patterns/KindedPointcut.java +++ b/weaver/src/org/aspectj/weaver/patterns/KindedPointcut.java @@ -108,11 +108,11 @@ public class KindedPointcut extends Pointcut { protected FuzzyBoolean matchInternal(Shadow shadow) { if (shadow.getKind() != kind) return FuzzyBoolean.NO; - if (!signature.matches(shadow.getSignature(), shadow.getIWorld())){ + if (!signature.matches(shadow.getSignature(), shadow.getIWorld(),this.kind == Shadow.MethodCall)){ if(kind == Shadow.MethodCall) { warnOnConfusingSig(shadow); - warnOnBridgeMethod(shadow); + //warnOnBridgeMethod(shadow); } return FuzzyBoolean.NO; } @@ -121,18 +121,18 @@ public class KindedPointcut extends Pointcut { } - private void warnOnBridgeMethod(Shadow shadow) { - if (shadow.getIWorld().getLint().noJoinpointsForBridgeMethods.isEnabled()) { - ResolvedMember rm = shadow.getSignature().resolve(shadow.getIWorld()); - if (rm!=null) { - int shadowModifiers = rm.getModifiers(); //shadow.getSignature().getModifiers(shadow.getIWorld()); - if (ResolvedType.hasBridgeModifier(shadowModifiers)) { - shadow.getIWorld().getLint().noJoinpointsForBridgeMethods.signal(new String[]{},getSourceLocation(), - new ISourceLocation[]{shadow.getSourceLocation()}); - } - } - } - } +// private void warnOnBridgeMethod(Shadow shadow) { +// if (shadow.getIWorld().getLint().noJoinpointsForBridgeMethods.isEnabled()) { +// ResolvedMember rm = shadow.getSignature().resolve(shadow.getIWorld()); +// if (rm!=null) { +// int shadowModifiers = rm.getModifiers(); //shadow.getSignature().getModifiers(shadow.getIWorld()); +// if (ResolvedType.hasBridgeModifier(shadowModifiers)) { +// shadow.getIWorld().getLint().noJoinpointsForBridgeMethods.signal(new String[]{},getSourceLocation(), +// new ISourceLocation[]{shadow.getSourceLocation()}); +// } +// } +// } +// } public FuzzyBoolean match(JoinPoint.StaticPart jpsp) { if (jpsp.getKind().equals(kind.getName())) { @@ -222,7 +222,7 @@ public class KindedPointcut extends Pointcut { signature.getAnnotationPattern()); if (nonConfusingPattern - .matches(shadow.getSignature(), shadow.getIWorld())) { + .matches(shadow.getSignature(), shadow.getIWorld(),true)) { shadow.getIWorld().getLint().unmatchedSuperTypeInCall.signal( new String[] { shadow.getSignature().getDeclaringType().toString(), diff --git a/weaver/src/org/aspectj/weaver/patterns/SignaturePattern.java b/weaver/src/org/aspectj/weaver/patterns/SignaturePattern.java index b1aad6e3b..122287329 100644 --- a/weaver/src/org/aspectj/weaver/patterns/SignaturePattern.java +++ b/weaver/src/org/aspectj/weaver/patterns/SignaturePattern.java @@ -121,7 +121,7 @@ public class SignaturePattern extends PatternNode { } } - public boolean matches(Member joinPointSignature, World world) { + public boolean matches(Member joinPointSignature, World world, boolean allowBridgeMethods) { // fail (or succeed!) fast tests... if (joinPointSignature == null) return false; if (kind != joinPointSignature.getKind()) return false; @@ -130,16 +130,16 @@ public class SignaturePattern extends PatternNode { // do the hard work then... JoinPointSignature[] candidateMatches = joinPointSignature.getJoinPointSignatures(world); for (int i = 0; i < candidateMatches.length; i++) { - if (matchesExactly(candidateMatches[i],world)) return true; + if (matchesExactly(candidateMatches[i],world,allowBridgeMethods)) return true; } return false; } // Does this pattern match this exact signature (no declaring type mucking about // or chasing up the hierarchy) - private boolean matchesExactly(JoinPointSignature aMember, World inAWorld) { - // Java5 introduces bridge methods, we don't want to match on them at all... - if (aMember.isBridgeMethod()) { + private boolean matchesExactly(JoinPointSignature aMember, World inAWorld, boolean allowBridgeMethods) { + // Java5 introduces bridge methods, we match a call to them but nothing else... + if (aMember.isBridgeMethod() && !allowBridgeMethods) { return false; } diff --git a/weaver/src/org/aspectj/weaver/patterns/WithincodePointcut.java b/weaver/src/org/aspectj/weaver/patterns/WithincodePointcut.java index 94e897610..7c134a220 100644 --- a/weaver/src/org/aspectj/weaver/patterns/WithincodePointcut.java +++ b/weaver/src/org/aspectj/weaver/patterns/WithincodePointcut.java @@ -72,7 +72,7 @@ public class WithincodePointcut extends Pointcut { //This will not match code in local or anonymous classes as if //they were withincode of the outer signature return FuzzyBoolean.fromBoolean( - signature.matches(shadow.getEnclosingCodeSignature(), shadow.getIWorld())); + signature.matches(shadow.getEnclosingCodeSignature(), shadow.getIWorld(), false)); } public FuzzyBoolean match(JoinPoint jp, JoinPoint.StaticPart encJP) { diff --git a/weaver/testsrc/org/aspectj/weaver/patterns/SignaturePatternTestCase.java b/weaver/testsrc/org/aspectj/weaver/patterns/SignaturePatternTestCase.java index d784afc70..935d3c262 100644 --- a/weaver/testsrc/org/aspectj/weaver/patterns/SignaturePatternTestCase.java +++ b/weaver/testsrc/org/aspectj/weaver/patterns/SignaturePatternTestCase.java @@ -147,7 +147,7 @@ public class SignaturePatternTestCase extends TestCase { } private void checkMatch(SignaturePattern p, Member member, boolean b) { - boolean matches = p.matches(member, world); + boolean matches = p.matches(member, world,false); assertEquals(p.toString() + " matches " + member.toString(), b, matches); } |