import java.io.Serializable;

abstract aspect Trace {
    abstract pointcut targets();

    before (): targets() {
	System.out.println("entering " + thisJoinPoint);
    }
    after (): targets() {
	System.out.println("exiting "  +
			   thisStaticJoinPoint);
    }

    after () throwing (Throwable t): targets() {
	System.out.println("throwing "  + t);
    }

    after () throwing (java.io.IOException ioe): targets() {
	System.out.println("throwing "  + ioe);
    }

    after () returning (Object o): targets() {
	System.out.println("returning "  + o);
    }


    private static int initCounter() {
	return 0;
    }

    //private int Serializable.counter = initCounter();
}