镜像来自
https://github.com/eclipse-aspectj/aspectj.git
synced 2024-08-26 05:57:44 +02:00
56 line
1.4 KiB
Java
56 line
1.4 KiB
Java
|
|
/*
|
|
* 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()";
|
|
}
|