org.aspectj/tests/new/GeneratedStaticAsTransient.java
2002-12-16 18:51:06 +00:00

70 lines
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);
}
}