123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- import org.aspectj.testing.Tester;
-
- public class TryAndProceed {
- public static void main(String[] args) {
- new C().mNoThrows();
- Tester.checkEqual(C.buf.toString(), "beforeAll:aroundAll:mNoThrows:");
- C.buf = new StringBuffer();
-
- A.aspectOf().allowThrowingAround = true;
- try {
- new C().mThrowsCheckedExc();
- Tester.checkFailed("should have thrown RuntimeExc");
- } catch (CheckedExc ce) {
- Tester.checkFailed("should have thrown RuntimeExc not " + ce);
- } catch (RuntimeException re) {
- //System.out.println("caught " + re);
- }
- Tester.checkEqual(C.buf.toString(),
- "beforeAll:aroundCheckedNoThrow:aroundAll:aroundCheckedThrow:aroundCaughtCE:");
- C.buf = new StringBuffer();
-
- A.aspectOf().allowThrowingBefore = true;
- try {
- new C().mThrowsCheckedExc();
- Tester.checkFailed("should have thrown CheckedExc");
- } catch (CheckedExc ce) {
- //System.out.println("caught " + ce);
- } catch (RuntimeException re) {
- Tester.checkFailed("should have thrown CheckedExc not RuntimeExc");
- }
- Tester.checkEqual(C.buf.toString(), "beforeChecked:");
-
- }
- }
-
-
- class C {
- public static StringBuffer buf = new StringBuffer();
-
- public void mThrowsCheckedExc() throws CheckedExc {
- C.buf.append("mThrowsCheckedExc:");
- }
-
- public void mNoThrows() {
- C.buf.append("mNoThrows:");
- }
- }
-
- aspect A {
- pointcut checkedCut(): call(void C.mThrowsCheckedExc());
- pointcut uncheckedCut(): call(void C.mNoThrows());
- pointcut allCut(): checkedCut() || uncheckedCut();
-
- public static boolean allowThrowingBefore = false;
- public static boolean allowThrowingAround = false;
-
- before() throws CheckedExc: checkedCut() && if(allowThrowingBefore) {
- C.buf.append("beforeChecked:");
- throw new CheckedExc("from before");
- }
-
- before(): allCut() {
- C.buf.append("beforeAll:");
- }
-
- Object around(): checkedCut() {
- C.buf.append("aroundCheckedNoThrow:");
- return proceed();
- }
-
- Object around(): allCut() {
- C.buf.append("aroundAll:");
- try {
- return proceed();
- } catch (CheckedExc ce) {
- C.buf.append("aroundCaughtCE:");
-
- throw new RuntimeException("hand-softening CheckedExc");
- }
- }
-
- Object around() throws CheckedExc: checkedCut() && if(allowThrowingAround) {
- C.buf.append("aroundCheckedThrow:");
- throw new CheckedExc("from around");
- }
- }
-
- class CheckedExc extends Exception {
- public CheckedExc(String m) { super(m); }
- }
|