espelhamento de
https://github.com/eclipse-aspectj/aspectj.git
sincronizado 2024-09-03 17:56:34 +02:00
68 linhas
1.7 KiB
Java
68 linhas
1.7 KiB
Java
import org.aspectj.testing.Tester;
|
|
import java.util.*;
|
|
|
|
|
|
public class HoldProceed {
|
|
public static void main(String[] args) {
|
|
C c = new C();
|
|
c.m1(); c.m2(); c.m1();
|
|
Tester.check("m");
|
|
Tester.checkEqual(A.buf.toString(), "");
|
|
A.runProceeds();
|
|
Tester.checkEqual(A.buf.toString(), "m1:b:m2:m1:");
|
|
A.runProceeds();
|
|
Tester.checkEqual(A.buf.toString(), "m1:b:m2:m1:m1:b:m2:m1:");
|
|
|
|
try {
|
|
c.m3();
|
|
} catch (Exception e) {
|
|
Tester.check(false, "shouldn't throw anything");
|
|
}
|
|
|
|
try {
|
|
A.runProceeds();
|
|
} catch (Error err) { //??? this is an odd test for the fact that Exception is wrapped
|
|
Tester.note("caught err");
|
|
}
|
|
Tester.check("caught err");
|
|
}
|
|
}
|
|
|
|
class C {
|
|
public void m1() {A. buf.append("m1:"); }
|
|
public void m2() {A. buf.append("m2:"); }
|
|
public void m3() throws Exception { throw new Exception("from m3"); }
|
|
}
|
|
|
|
aspect A {
|
|
static StringBuffer buf = new StringBuffer();
|
|
|
|
static List heldProceeds = new LinkedList();
|
|
|
|
int cnt = 0;
|
|
|
|
void around (): call(void C.m*()) {
|
|
heldProceeds.add(new Runnable() { public void run() { proceed(); cnt++; } });
|
|
|
|
class MyRun implements Runnable {
|
|
public void run() { System.out.println("run"); }
|
|
public void m() { Tester.note("m"); }
|
|
}
|
|
|
|
MyRun mr = new MyRun();
|
|
mr.m();
|
|
}
|
|
|
|
before(): call(void C.m2()) {
|
|
new Runnable() {
|
|
public void run() { buf.append("b:"); }
|
|
}.run();
|
|
}
|
|
|
|
public static void runProceeds() {
|
|
for (Iterator i = heldProceeds.iterator(); i.hasNext(); ) {
|
|
((Runnable)i.next()).run();
|
|
}
|
|
}
|
|
}
|