Browse Source

@testcase PR#40805 interface call signatures when declaring method in aspect

tags/V1_1_1
wisberg 21 years ago
parent
commit
e49c9eb667
2 changed files with 71 additions and 1 deletions
  1. 16
    1
      tests/ajcTestsFailing.xml
  2. 55
    0
      tests/bugs/DeclareWarningAndInterfaceMethodCW.java

+ 16
- 1
tests/ajcTestsFailing.xml View File

@@ -4,5 +4,20 @@
<!-- contains valid tests that the compiler has never passed -->

<suite>

<ajc-test dir="bugs"
title="interface call signatures when declaring method in aspect"
pr="40805">
<compile files="DeclareWarningAndInterfaceMethodCW.java">
<message kind="warning" line="27" text="call getSomething"/>
<message kind="warning" line="27" text="call ICanGetSomething.getSomething"/>
<message kind="warning" line="31" text="call getSomething"/>
<message kind="warning" line="31" text="call ICanGetSomething.getSomething"/>
<message kind="warning" line="33" text="call getSomething"/>
<message kind="warning" line="33" text="call ICanGetSomething.getSomething"/>
<message kind="warning" line="35" text="call getSomething"/>
<message kind="warning" line="35" text="call ICanGetSomething.getSomething"/>
<message kind="warning" line="38" text="call getSomething"/>
<message kind="warning" line="38" text="call ICanGetSomething.getSomething"/>
</compile>
</ajc-test>
</suite>

+ 55
- 0
tests/bugs/DeclareWarningAndInterfaceMethodCW.java View File

@@ -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()";
}

Loading…
Cancel
Save