diff options
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"> |