org.aspectj/tests/new/InnerClassInPrivilegedAspect.java
jhugunin 70419f7987 updated for changed to inter-type constructors
can't conflict with default constructors
  instance variables aren't initialized unless you call this
2002-12-19 21:38:43 +00:00

163 lines
5.8 KiB
Java

import org.aspectj.testing.Tester;
/** @testcase PR#555 inner classes of privileged aspects cannot see target class private members */
public class InnerClassInPrivilegedAspect {
public static void main(String[] args) {
Util.start();
Target.main(args);
new Target().toString();
Util.end();
}
}
class Util {
public static void event(String s) {
//System.out.println(s);
Tester.event(s);
}
public static void start() {
// failing
Tester.expectEvent("before runner1");
Tester.expectEvent("before intro1");
Tester.expectEvent("new1");
Tester.expectEvent("around runner1");
Tester.expectEvent("around intro1");
Tester.expectEvent("before instance1");
Tester.expectEvent("around instance1");
Tester.expectEvent("pcd if()1");
Tester.expectEvent("before run1");
Tester.expectEvent("around run1");
// passing
Tester.expectEvent("before pcd if()1");
Tester.expectEvent("before1");
Tester.expectEvent("around1");
}
public static void end() {
Tester.checkAllEvents();
}
}
class Target {
private Target(String foo) {}
private static int privateStaticInt = 1;
private int privateInt = 1;
public static void main(String args[]) { }
}
interface Test {
public boolean t();
}
privileged aspect PrivilegedAspectBefore {
pointcut p() : execution(static void Target.main(..));
static class IfTest {
public boolean t(){ Util.event("pcd if()"+Target.privateStaticInt); return true;}
}
pointcut q() : p()
&& if(new IfTest().t());
before() : q() { Util.event("before pcd if()" + Target.privateStaticInt); }
/** @testcase privileged access to target private static variables in introduced member (of anonymous class type)*/
static Runnable Target.runner = new Runnable() {
public void run() { Util.event("before runner"+Target.privateStaticInt); }
};
before() : p() { Target.runner.run(); }
before() : p() {
/** @testcase privileged access to target private static variables in before advice (ok) */
Util.event("before" +Target.privateStaticInt);
}
before() : p() {
/** @testcase privileged access to target private static variables from inner class inside before advice */
Runnable inner = new Runnable() {
public void run() {
Util.event("before run" +Target.privateStaticInt);
}
};
inner.run();
}
/** @testcase privileged access to target private static variables from inner class inside introduced method */
before() : p() { Target.runbefore(); }
static void Target.runbefore() {
Runnable inner = new Runnable() {
public void run() {
Util.event("before intro" +Target.privateStaticInt);
}
};
inner.run();
}
}
/** differs from PrivilegedAspectBefore only in using around advice */
privileged aspect PrivilegedAspectAround {
pointcut p() : execution(static void Target.main(..));
/** @testcase privileged access to target private static variables from inner class in introduced constructor */
Target.new() {
this("hi");
int i = privateStaticInt;
Runnable p = new Runnable() {
public void run() { Util.event("new"+Target.privateStaticInt); }
};
p.run();
}
/** @testcase privileged access to target private static variables in introduced member (of anonymous class type)*/
static Runnable Target.runner2 = new Runnable() {
public void run() { Util.event("around runner"+Target.privateStaticInt); }
};
Object around() : p() { Target.runner2.run(); return proceed();}
Object around() : p() {
/** @testcase privileged access to target private static variables in before advice (ok) */
Util.event("around" +Target.privateStaticInt);
return proceed();
}
Object around() : p() {
/** @testcase privileged access to target private static variables from inner class inside around advice */
Runnable inner = new Runnable() {
public void run() {
Util.event("around run" +Target.privateStaticInt);
}
};
inner.run();
return proceed();
}
Object around() : p() { Target.runaround(); return proceed(); }
/** @testcase privileged access to target private static variables from inner class inside introduced method */
static void Target.runaround() {
Runnable inner = new Runnable() {
public void run() {
Util.event("around intro" +Target.privateStaticInt);
}
};
inner.run();
}
}
privileged aspect PrivilegedAspectAroundNonStatic {
/** @testcase privileged access to target private variables from inner class inside introduced method */
before(Target t) : call(String Object.toString()) && target(t){ t.runbefore2(); }
void Target.runbefore2() {
Runnable inner = new Runnable() {
public void run() {
Util.event("before instance" +privateInt);
}
};
inner.run();
}
/** @testcase privileged access to target private variables from inner class inside introduced method */
Object around(Target t) : call(String Object.toString()) && target(t){ t.runbefore3(); return proceed(t); }
void Target.runbefore3() {
Runnable inner = new Runnable() {
public void run() {
Util.event("around instance" +privateInt);
}
};
inner.run();
}
}