aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/WildTypePattern.java15
-rw-r--r--tests/bugs1919/github_24/FuzzilyMatchingAspect.aj26
2 files changed, 31 insertions, 10 deletions
diff --git a/org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/WildTypePattern.java b/org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/WildTypePattern.java
index e43b6ca94..212378bf7 100644
--- a/org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/WildTypePattern.java
+++ b/org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/WildTypePattern.java
@@ -1172,7 +1172,7 @@ public class WildTypePattern extends TypePattern {
StringBuilder buf = new StringBuilder();
if (annotationPattern != AnnotationTypePattern.ANY) {
buf.append('(');
- buf.append(annotationPattern.toString());
+ buf.append(annotationPattern);
buf.append(' ');
}
for (int i = 0, len = namePatterns.length; i < len; i++) {
@@ -1183,16 +1183,16 @@ public class WildTypePattern extends TypePattern {
if (i > 0) {
buf.append(".");
}
- buf.append(name.toString());
+ buf.append(name);
}
}
if (upperBound != null) {
buf.append(" extends ");
- buf.append(upperBound.toString());
+ buf.append(upperBound);
}
if (lowerBound != null) {
buf.append(" super ");
- buf.append(lowerBound.toString());
+ buf.append(lowerBound);
}
if (typeParameters != null && typeParameters.size() != 0) {
buf.append("<");
@@ -1202,6 +1202,9 @@ public class WildTypePattern extends TypePattern {
if (includeSubtypes) {
buf.append('+');
}
+ for (int i = 0; i < getDimensions(); i++) {
+ buf.append("[]");
+ }
if (isVarArgs) {
buf.append("...");
}
@@ -1271,7 +1274,11 @@ public class WildTypePattern extends TypePattern {
for (NamePattern namePattern : namePatterns) {
result = 37 * result + namePattern.hashCode();
}
+ result = 37 * result + (includeSubtypes ? 1 : 0);
+ result = 37 * result + dim;
+ result = 37 * result + (isVarArgs ? 1 : 0);
result = 37 * result + annotationPattern.hashCode();
+ result = 37 * result + typeParameters.hashCode();
if (upperBound != null) {
result = 37 * result + upperBound.hashCode();
}
diff --git a/tests/bugs1919/github_24/FuzzilyMatchingAspect.aj b/tests/bugs1919/github_24/FuzzilyMatchingAspect.aj
index d7c32a70a..b40c13c62 100644
--- a/tests/bugs1919/github_24/FuzzilyMatchingAspect.aj
+++ b/tests/bugs1919/github_24/FuzzilyMatchingAspect.aj
@@ -1,25 +1,39 @@
public aspect FuzzilyMatchingAspect {
- after() : execution(public MaybeMissing* MaybeMissing*.*()) {
+
+ pointcut returnRefTypeSimpleOrArray() : execution(public MaybeMissing* MaybeMissing*.*());
+ pointcut return1DimRefTypeArray() : execution(public MaybeMissing*[] MaybeMissing*.*());
+ pointcut return2DimRefTypeArray() : execution(public MaybeMissing*[][] MaybeMissing*.*());
+
+ // Return type 'MaybeMissing*' also matches array types due to the '*' at the end.
+ // Therefore, explicitly exclude array pointcuts in order to only match the method returning the simple type.
+ after() : returnRefTypeSimpleOrArray() && !return1DimRefTypeArray() && !return2DimRefTypeArray() {
System.out.println(thisJoinPoint);
}
- after() : execution(public MaybeMissing*[] MaybeMissing*.*()) {
+ after() : return1DimRefTypeArray() {
System.out.println(thisJoinPoint);
}
- after() : execution(public MaybeMissing*[][] MaybeMissing*.*()) {
+ after() : return2DimRefTypeArray() {
System.out.println(thisJoinPoint);
}
- after() : execution(public in* MaybeMissing*.*()) {
+ pointcut returnPrimitiveTypeSimpleOrArray() : execution(public in* MaybeMissing*.*());
+ pointcut return1DimPrimitiveTypeArray() : execution(public in*[] MaybeMissing*.*());
+ pointcut return2DimPrimitiveTypeArray() : execution(public in*[][] MaybeMissing*.*());
+
+ // Return type 'in*' also matches array types due to the '*' at the end.
+ // Therefore, explicitly exclude array pointcuts in order to only match the method returning the simple type.
+ after() : returnPrimitiveTypeSimpleOrArray() && !return1DimPrimitiveTypeArray() && !return2DimPrimitiveTypeArray() {
System.out.println(thisJoinPoint);
}
- after() : execution(public in*[] MaybeMissing*.*()) {
+ after() : return1DimPrimitiveTypeArray() {
System.out.println(thisJoinPoint);
}
- after() : execution(public in*[][] MaybeMissing*.*()) {
+ after() : return2DimPrimitiveTypeArray() {
System.out.println(thisJoinPoint);
}
+
}