aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraclement <aclement>2009-09-08 20:58:00 +0000
committeraclement <aclement>2009-09-08 20:58:00 +0000
commitb7c2c83e419e9db51130e169acade68a7d0d0599 (patch)
treea90e07cdee13e89fd2cfb391b4f81ee12986e13e
parent577bbf481a306b859584e7c9f7a9905d77da4ab6 (diff)
downloadaspectj-b7c2c83e419e9db51130e169acade68a7d0d0599.tar.gz
aspectj-b7c2c83e419e9db51130e169acade68a7d0d0599.zip
288049: wrong message for wildcarded dec anno: fix
-rw-r--r--weaver/src/org/aspectj/weaver/bcel/BcelClassWeaver.java18
1 files changed, 12 insertions, 6 deletions
diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelClassWeaver.java b/weaver/src/org/aspectj/weaver/bcel/BcelClassWeaver.java
index fe2b6bb3d..56158a357 100644
--- a/weaver/src/org/aspectj/weaver/bcel/BcelClassWeaver.java
+++ b/weaver/src/org/aspectj/weaver/bcel/BcelClassWeaver.java
@@ -111,7 +111,7 @@ class BcelClassWeaver implements IClassWeaver {
// --------------------------------------------
private final LazyClassGen clazz;
- private final List shadowMungers;
+ private final List<ShadowMunger> shadowMungers;
private final List typeMungers;
private final List lateTypeMungers;
@@ -1394,8 +1394,15 @@ class BcelClassWeaver implements IClassWeaver {
DeclareAnnotation declA = (DeclareAnnotation) iter.next();
// Error if an exact type pattern was specified
- if ((declA.isExactPattern() || (declA.getSignaturePattern().getDeclaringType() instanceof ExactTypePattern))
- && (!declA.getSignaturePattern().getName().isAny() || (declA.getKind() == DeclareAnnotation.AT_CONSTRUCTOR))) {
+ boolean shouldCheck = declA.isExactPattern()
+ || declA.getSignaturePattern().getDeclaringType() instanceof ExactTypePattern;
+ if (shouldCheck && declA.getKind() != DeclareAnnotation.AT_CONSTRUCTOR) {
+ ExactTypePattern declaringTypePattern = (ExactTypePattern) declA.getSignaturePattern().getDeclaringType();
+ if (declA.getSignaturePattern().getName().isAny() || declaringTypePattern.isIncludeSubtypes()) {
+ shouldCheck = false;
+ }
+ }
+ if (shouldCheck) {
// Quickly check if an ITD supplies the 'missing' member
boolean itdMatch = false;
@@ -3032,8 +3039,7 @@ class BcelClassWeaver implements IClassWeaver {
ContextToken shadowMatchToken = CompilationAndWeavingContext.enteringPhase(
CompilationAndWeavingContext.MATCHING_SHADOW, shadow);
boolean isMatched = false;
- for (Iterator i = shadowMungers.iterator(); i.hasNext();) {
- ShadowMunger munger = (ShadowMunger) i.next();
+ for (ShadowMunger munger : shadowMungers) {
ContextToken mungerMatchToken = CompilationAndWeavingContext.enteringPhase(
CompilationAndWeavingContext.MATCHING_POINTCUT, munger.getPointcut());
if (munger.match(shadow, world)) {
@@ -3100,7 +3106,7 @@ class BcelClassWeaver implements IClassWeaver {
return clazz;
}
- public List getShadowMungers() {
+ public List<ShadowMunger> getShadowMungers() {
return shadowMungers;
}