aboutsummaryrefslogtreecommitdiffstats
path: root/tests/new/StaticCalls.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/new/StaticCalls.java')
-rw-r--r--tests/new/StaticCalls.java54
1 files changed, 54 insertions, 0 deletions
diff --git a/tests/new/StaticCalls.java b/tests/new/StaticCalls.java
new file mode 100644
index 000000000..ca6c9a866
--- /dev/null
+++ b/tests/new/StaticCalls.java
@@ -0,0 +1,54 @@
+import org.aspectj.testing.Tester;
+
+public class StaticCalls {
+ public static void main(String args[]) { test(); }
+
+ Object server = null;
+
+ void run() {
+ Tester.checkEqual(StaticCalls.lookup("TimeService0"),
+ "TimeService0",
+ "untouched");
+ Tester.checkEqual(StaticCalls.lookup("InterceptThis"),
+ "FromAround",
+ "touched");
+ Tester.checkEqual(this.lookup("InterceptThis"),
+ "FromAround",
+ "this and touched");
+ Tester.checkEqual(lookup("InterceptThis"),
+ "FromAround",
+ "lexical and touched");
+ }
+
+ public static void test() {
+ new StaticCalls().run();
+
+ Class c = Class.forName("java.lang.Foo");
+ Tester.check(c == null, "intercepted exception and returned null");
+ }
+
+ static String lookup(String s){
+ return s;
+ }
+}
+
+aspect Aspect {
+ Object around(String s):
+ within(StaticCalls) && call(String StaticCalls.lookup(String)) && args(s)
+ {
+ if (s.equals("InterceptThis")) return "FromAround";
+ else return proceed(s);
+ }
+
+ pointcut classForName(): call(Class Class.forName(String));
+
+ declare soft: ClassNotFoundException: classForName();
+
+ Class around(): classForName() {
+ try {
+ return proceed();
+ } catch (ClassNotFoundException e) {
+ return null;
+ }
+ }
+}