From 450c1fe05731c1084bfabb22d7595f39ac19b8c6 Mon Sep 17 00:00:00 2001 From: Andy Clement Date: Mon, 19 Nov 2018 09:15:58 -0800 Subject: [PATCH] Fix 541325 - Support is(AbstractType) --- .../weaver/patterns/PatternParser.java | 2 ++ .../patterns/TypeCategoryTypePattern.java | 3 +++ tests/bugs193/isAbstractType/Code.java | 24 +++++++++++++++++++ tests/bugs193/isAbstractType/Code2.java | 24 +++++++++++++++++++ .../systemtest/ajc193/Ajc193Tests.java | 8 +++++++ .../org/aspectj/systemtest/ajc193/ajc193.xml | 19 +++++++++++++++ 6 files changed, 80 insertions(+) create mode 100644 tests/bugs193/isAbstractType/Code.java create mode 100644 tests/bugs193/isAbstractType/Code2.java 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 @@ + + + + + + + + + + + + + + + + + + +