aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraclement <aclement>2008-05-30 17:27:47 +0000
committeraclement <aclement>2008-05-30 17:27:47 +0000
commitecde02265f5356d241b09037d2483b87e52bb876 (patch)
treef71b4b81dfde8d7d65711bfb069766268b294fae
parenta097fcf5eeadf46c03f0f487ba4419d452eaf693 (diff)
downloadaspectj-ecde02265f5356d241b09037d2483b87e52bb876.tar.gz
aspectj-ecde02265f5356d241b09037d2483b87e52bb876.zip
231396: reworked wildcard handling
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/WildTypePattern.java18
1 files changed, 10 insertions, 8 deletions
diff --git a/weaver/src/org/aspectj/weaver/patterns/WildTypePattern.java b/weaver/src/org/aspectj/weaver/patterns/WildTypePattern.java
index bb11d1156..34f8c8a50 100644
--- a/weaver/src/org/aspectj/weaver/patterns/WildTypePattern.java
+++ b/weaver/src/org/aspectj/weaver/patterns/WildTypePattern.java
@@ -255,23 +255,25 @@ public class WildTypePattern extends TypePattern {
// we've matched against the base (or raw) type, but if this type pattern specifies bounds because
// it is a ? extends or ? super deal then we have to match them too.
private boolean matchesBounds(ResolvedType aType, MatchKind staticOrDynamic) {
- if (upperBound == null && aType.getUpperBound() != null) {
+ if (!(aType instanceof BoundedReferenceType)) return true;
+ BoundedReferenceType boundedRT = (BoundedReferenceType) aType;
+ if (upperBound == null && boundedRT.getUpperBound() != null) {
// for upper bound, null can also match against Object - but anything else and we're out.
- if (!aType.getUpperBound().getName().equals(UnresolvedType.OBJECT.getName())) {
+ if (!boundedRT.getUpperBound().getName().equals(UnresolvedType.OBJECT.getName())) {
return false;
}
}
- if (lowerBound == null && aType.getLowerBound() != null) return false;
+ if (lowerBound == null && boundedRT.getLowerBound() != null) return false;
if (upperBound != null) {
// match ? extends
- if (aType.isGenericWildcard() && aType.isSuper()) return false;
- if (aType.getUpperBound() == null) return false;
- return upperBound.matches((ResolvedType)aType.getUpperBound(),staticOrDynamic).alwaysTrue();
+ if (aType.isGenericWildcard() && boundedRT.isSuper()) return false;
+ if (boundedRT.getUpperBound() == null) return false;
+ return upperBound.matches((ResolvedType) boundedRT.getUpperBound(), staticOrDynamic).alwaysTrue();
}
if (lowerBound != null) {
// match ? super
- if (!(aType.isGenericWildcard() && aType.isSuper())) return false;
- return lowerBound.matches((ResolvedType)aType.getLowerBound(),staticOrDynamic).alwaysTrue();
+ if (!(boundedRT.isGenericWildcard() && boundedRT.isSuper())) return false;
+ return lowerBound.matches((ResolvedType) boundedRT.getLowerBound(), staticOrDynamic).alwaysTrue();
}
return true;
}