mirror da
https://github.com/eclipse-aspectj/aspectj.git
synced 2024-08-27 05:54:38 +02:00
70 righe
2.5 KiB
Java
70 righe
2.5 KiB
Java
|
|
import org.aspectj.testing.*;
|
|
import java.lang.reflect.*;
|
|
|
|
// XXX incomplete - find all cases of generated static fields
|
|
/** @testcase PR#704 mark generated static fields transient */
|
|
public class GeneratedStaticAsTransient {
|
|
public static void main (String[] args) {
|
|
new GeneratedStaticAsTransient().callRun();
|
|
checkStatic(GeneratedStaticAsTransient.class, false);
|
|
Tester.checkAllEvents();
|
|
}
|
|
public void callRun() { run(); }
|
|
|
|
public void run() {
|
|
Tester.event("run");
|
|
Tester.check(null != A.aspectOf(this),"null != A.hasAspect(this)");
|
|
Tester.check(null != C.aspectOf(this),"null != C.hasAspect(this)");
|
|
Tester.check(null != B.aspectOf(),"null != B.hasAspect()");
|
|
}
|
|
static {
|
|
Tester.expectEvent("after returning - target");
|
|
Tester.expectEvent("after returning - this");
|
|
Tester.expectEvent("after returning - cflow");
|
|
Tester.expectEvent("run");
|
|
}
|
|
public static void checkStatic(Class c, boolean requireStatic) {
|
|
boolean gotStatic = false;
|
|
Field[] fields = c.getFields();
|
|
for (int i = 0; i < fields.length; i++) {
|
|
int mods = fields[i].getModifiers();
|
|
//System.err.println("checking " + fields[i]);
|
|
if (Modifier.isStatic(mods)) {
|
|
//System.err.println(" static " + fields[i]);
|
|
if (!gotStatic) gotStatic = true;
|
|
if (!Modifier.isTransient(mods)) {
|
|
String m = "field " + i + " "
|
|
+ c.getName() + "." + fields[i].getName()
|
|
+ " is static but not transient. mods=" + mods;
|
|
//System.err.println(m);
|
|
Tester.check(false, m);
|
|
}
|
|
}
|
|
}
|
|
if (requireStatic) {
|
|
Tester.check(gotStatic, c + "no static field");
|
|
}
|
|
}
|
|
}
|
|
|
|
aspect A pertarget(callRun()) {
|
|
pointcut callRun() : call(void GeneratedStaticAsTransient.run());
|
|
after () returning : callRun() {
|
|
Tester.event("after returning - target");
|
|
GeneratedStaticAsTransient.checkStatic(A.class, false);
|
|
}
|
|
}
|
|
aspect B percflow(A.callRun()) {
|
|
after () returning : A.callRun() {
|
|
Tester.event("after returning - cflow");
|
|
GeneratedStaticAsTransient.checkStatic(B.class, true);
|
|
}
|
|
}
|
|
aspect C perthis(A.callRun()) {
|
|
after () returning : A.callRun() {
|
|
Tester.event("after returning - this");
|
|
GeneratedStaticAsTransient.checkStatic(C.class, false);
|
|
}
|
|
}
|