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 }