summaryrefslogtreecommitdiffstats
path: root/weaver
diff options
context:
space:
mode:
authoracolyer <acolyer>2005-08-05 10:19:23 +0000
committeracolyer <acolyer>2005-08-05 10:19:23 +0000
commit8f4da67cd5008837d59c6a182558b8403cbff58a (patch)
tree39c01bf55124a4ff26345b4a085759a502a75e36 /weaver
parentc22c80074c9ef8876d758692815b9c100e51f7ed (diff)
downloadaspectj-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')
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/DeclareAnnotation.java2
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/KindedPointcut.java30
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/SignaturePattern.java10
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/WithincodePointcut.java2
-rw-r--r--weaver/testsrc/org/aspectj/weaver/patterns/SignaturePatternTestCase.java2
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);
}