aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Clement <aclement@pivotal.io>2018-11-19 09:15:58 -0800
committerAndy Clement <aclement@pivotal.io>2018-11-19 09:15:58 -0800
commit450c1fe05731c1084bfabb22d7595f39ac19b8c6 (patch)
treea4e4248a781bceeeae26fe6c40572cbde94e5b7f
parent49ea3fa06fe01630938ccff53bfd2f83ea3d60c6 (diff)
downloadaspectj-450c1fe05731c1084bfabb22d7595f39ac19b8c6.tar.gz
aspectj-450c1fe05731c1084bfabb22d7595f39ac19b8c6.zip
Fix 541325 - Support is(AbstractType)
-rw-r--r--org.aspectj.matcher/src/org/aspectj/weaver/patterns/PatternParser.java2
-rw-r--r--org.aspectj.matcher/src/org/aspectj/weaver/patterns/TypeCategoryTypePattern.java3
-rw-r--r--tests/bugs193/isAbstractType/Code.java24
-rw-r--r--tests/bugs193/isAbstractType/Code2.java24
-rw-r--r--tests/src/org/aspectj/systemtest/ajc193/Ajc193Tests.java8
-rw-r--r--tests/src/org/aspectj/systemtest/ajc193/ajc193.xml19
6 files changed, 80 insertions, 0 deletions
diff --git a/org.aspectj.matcher/src/org/aspectj/weaver/patterns/PatternParser.java b/org.aspectj.matcher/src/org/aspectj/weaver/patterns/PatternParser.java
index 106376aad..f3bf08833 100644
--- a/org.aspectj.matcher/src/org/aspectj/weaver/patterns/PatternParser.java
+++ b/org.aspectj.matcher/src/org/aspectj/weaver/patterns/PatternParser.java
@@ -1066,6 +1066,8 @@ public class PatternParser {
typeIsPattern = new TypeCategoryTypePattern(TypeCategoryTypePattern.ANNOTATION);
} else if (category.equals("FinalType")) {
typeIsPattern = new TypeCategoryTypePattern(TypeCategoryTypePattern.FINAL);
+ } else if (category.equals("AbstractType")) {
+ typeIsPattern = new TypeCategoryTypePattern(TypeCategoryTypePattern.ABSTRACT);
}
}
if (typeIsPattern == null) {
diff --git a/org.aspectj.matcher/src/org/aspectj/weaver/patterns/TypeCategoryTypePattern.java b/org.aspectj.matcher/src/org/aspectj/weaver/patterns/TypeCategoryTypePattern.java
index 72efea400..80ffc7556 100644
--- a/org.aspectj.matcher/src/org/aspectj/weaver/patterns/TypeCategoryTypePattern.java
+++ b/org.aspectj.matcher/src/org/aspectj/weaver/patterns/TypeCategoryTypePattern.java
@@ -42,6 +42,7 @@ public class TypeCategoryTypePattern extends TypePattern {
public static final int ENUM = 6;
public static final int ANNOTATION = 7;
public static final int FINAL = 8;
+ public static final int ABSTRACT = 9;
private int category;
@@ -136,6 +137,8 @@ public class TypeCategoryTypePattern extends TypePattern {
return type.isAnnotation();
case FINAL:
return Modifier.isFinal(type.getModifiers());
+ case ABSTRACT:
+ return Modifier.isAbstract(type.getModifiers());
}
return false;
}
diff --git a/tests/bugs193/isAbstractType/Code.java b/tests/bugs193/isAbstractType/Code.java
new file mode 100644
index 000000000..03790c6d8
--- /dev/null
+++ b/tests/bugs193/isAbstractType/Code.java
@@ -0,0 +1,24 @@
+public class Code {
+ public static void main(String[] argv) {
+ new Code().run();
+ }
+
+ public void run() {
+ new Code3().run();
+ }
+}
+
+abstract class Code2 {
+ public void run() {
+ }
+}
+
+class Code3 extends Code2 {
+}
+
+aspect X {
+ before(): execution(* (!is(AbstractType)).run(..)) {
+ System.out.println(thisJoinPointStaticPart);
+ }
+}
+
diff --git a/tests/bugs193/isAbstractType/Code2.java b/tests/bugs193/isAbstractType/Code2.java
new file mode 100644
index 000000000..65d8d0d05
--- /dev/null
+++ b/tests/bugs193/isAbstractType/Code2.java
@@ -0,0 +1,24 @@
+public class Code2 {
+ public static void main(String[] argv) {
+ new Code2().run();
+ }
+
+ public void run() {
+ new Helper2().run();
+ }
+}
+
+abstract class Helper {
+ public void run() {
+ }
+}
+
+class Helper2 extends Helper {
+}
+
+aspect X {
+ before(): execution(* (is(AbstractType)).run(..)) {
+ System.out.println(thisJoinPointStaticPart);
+ }
+}
+
diff --git a/tests/src/org/aspectj/systemtest/ajc193/Ajc193Tests.java b/tests/src/org/aspectj/systemtest/ajc193/Ajc193Tests.java
index c813de6f3..c3849c4f0 100644
--- a/tests/src/org/aspectj/systemtest/ajc193/Ajc193Tests.java
+++ b/tests/src/org/aspectj/systemtest/ajc193/Ajc193Tests.java
@@ -22,6 +22,14 @@ import junit.framework.Test;
*/
public class Ajc193Tests extends XMLBasedAjcTestCaseForJava10OrLater {
+ public void testIsAbstractType() {
+ runTest("is abstract");
+ }
+
+ public void testIsAbstractType2() {
+ runTest("is abstract - 2");
+ }
+
// ---
public static Test suite() {
diff --git a/tests/src/org/aspectj/systemtest/ajc193/ajc193.xml b/tests/src/org/aspectj/systemtest/ajc193/ajc193.xml
index b214fe51f..3f876abad 100644
--- a/tests/src/org/aspectj/systemtest/ajc193/ajc193.xml
+++ b/tests/src/org/aspectj/systemtest/ajc193/ajc193.xml
@@ -2,6 +2,25 @@
<suite>
+
+ <ajc-test dir="bugs193/isAbstractType" title="is abstract">
+ <compile files="Code.java" options="-1.8"/>
+ <run class="Code">
+ <stdout>
+ <line text="execution(void Code.run())"/>
+ </stdout>
+ </run>
+ </ajc-test>
+
+ <ajc-test dir="bugs193/isAbstractType" title="is abstract - 2">
+ <compile files="Code2.java" options="-1.8"/>
+ <run class="Code2">
+ <stdout>
+ <line text="execution(void Helper.run())"/>
+ </stdout>
+ </run>
+ </ajc-test>
+
<!--
<ajc-test dir="bugs191/var" title="var 3">
<compile files="Code3.java" options="-10">