From e49c9eb667399bea490f88462b5e880fb2028539 Mon Sep 17 00:00:00 2001 From: wisberg Date: Sat, 26 Jul 2003 00:21:16 +0000 Subject: [PATCH] @testcase PR#40805 interface call signatures when declaring method in aspect --- tests/ajcTestsFailing.xml | 17 +++++- .../DeclareWarningAndInterfaceMethodCW.java | 55 +++++++++++++++++++ 2 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 tests/bugs/DeclareWarningAndInterfaceMethodCW.java diff --git a/tests/ajcTestsFailing.xml b/tests/ajcTestsFailing.xml index ddc6cc1dd..35a87fefd 100644 --- a/tests/ajcTestsFailing.xml +++ b/tests/ajcTestsFailing.xml @@ -4,5 +4,20 @@ - + + + + + + + + + + + + + + diff --git a/tests/bugs/DeclareWarningAndInterfaceMethodCW.java b/tests/bugs/DeclareWarningAndInterfaceMethodCW.java new file mode 100644 index 000000000..1046a8014 --- /dev/null +++ b/tests/bugs/DeclareWarningAndInterfaceMethodCW.java @@ -0,0 +1,55 @@ + +/* + * ajc fails to detect call join points using the + * declaring interface as the type when the method + * was declared in the aspect. + */ + +public class DeclareWarningAndInterfaceMethodCW { + public static void main(String[] args) { + new C().doSomething(); + } +} + +interface ICanGetSomething { + Object getSomething(); +} + +class B implements ICanGetSomething { + public Object getSomething() { // CE conflict here? + return new Object(); + } +} + +class C { + + C() { + new B().getSomething(); // 2 CW declared here + } + + static void staticMethod() { + new B().getSomething(); // 2 CW declared here + B b = new B(); + b.getSomething(); // 2 CW declared here + ICanGetSomething i = new B(); + i.getSomething(); // 2 CW declared here + } + void doSomething() { + Object result = new B().getSomething(); // 2 CW here + if (null == result) { + throw new Error("no result"); + } + } +} + +/** @testcase PR#40805 interface call signatures when declaring method in aspect */ +aspect A { + // comment this out to get correct warnings + public Object ICanGetSomething.getSomething() { + return null; + } + declare warning : call(Object ICanGetSomething.getSomething()) + : "call ICanGetSomething.getSomething()"; + declare warning : call(Object getSomething()) + : "call getSomething()"; +} -- 2.39.5