001 package groovy.lang;
002
003 import java.io.IOException;
004 import java.io.PrintWriter;
005 import java.io.Writer;
006
007 public class TracingInterceptor implements Interceptor {
008
009 protected Writer writer = new PrintWriter(System.out);
010
011 public Writer getWriter() {
012 return writer;
013 }
014
015 public void setWriter(Writer writer) {
016 this.writer = writer;
017 }
018
019 public Object beforeInvoke(Object object, String methodName, Object[] arguments) {
020 write(object, methodName, arguments, "before");
021 return null;
022 }
023
024 public Object afterInvoke(Object object, String methodName, Object[] arguments, Object result) {
025 write(object, methodName, arguments, "after");
026 return result;
027 }
028
029 public boolean doInvoke() {
030 return true;
031 }
032
033 protected void write(Object object, String methodName, Object[] arguments, final String origin) {
034 try {
035 writer.write("Interceptor ");
036 writer.write(origin);
037 writer.write(" ");
038 Class theClass = object instanceof Class ? (Class) object: object.getClass();
039 writeInfo(theClass, methodName, arguments);
040 writer.write("\n");
041 writer.flush();
042 } catch (IOException e) {
043 e.printStackTrace();
044 }
045 }
046
047 protected void writeInfo(final Class aClass, String methodName, Object[] arguments) throws IOException {
048 writer.write(aClass.getName());
049 writer.write(".");
050 writer.write(methodName);
051 writer.write("(");
052 for (int i = 0; i < arguments.length; i++) {
053 if (i > 0) writer.write(", ");
054 Object argument = arguments[i];
055 writer.write(argument.getClass().getName());
056 }
057 writer.write(")");
058 }
059 }