View Javadoc

1   package groovy.lang;
2   
3   import java.io.IOException;
4   import java.io.PrintWriter;
5   import java.io.Writer;
6   
7   public class TracingInterceptor implements Interceptor {
8   
9       protected Writer writer = new PrintWriter(System.out);
10  
11      public Writer getWriter() {
12          return writer;
13      }
14  
15      public void setWriter(Writer writer) {
16          this.writer = writer;
17      }
18  
19      public Object beforeInvoke(Object object, String methodName, Object[] arguments) {
20          write(object, methodName, arguments, "before");
21          return null;
22      }
23  
24      public Object afterInvoke(Object object, String methodName, Object[] arguments, Object result) {
25          write(object, methodName, arguments, "after");
26          return result;
27      }
28  
29      public boolean doInvoke() {
30          return true;
31      }
32  
33      protected void write(Object object, String methodName, Object[] arguments, final String origin) {
34          try {
35              writer.write("Interceptor ");
36              writer.write(origin);
37              writer.write(" ");
38              Class theClass = object instanceof Class ? (Class) object: object.getClass();
39              writeInfo(theClass, methodName, arguments);
40              writer.write("\n");
41              writer.flush();
42          } catch (IOException e) {
43              e.printStackTrace();
44          }
45      }
46  
47      protected void writeInfo(final Class aClass, String methodName, Object[] arguments) throws IOException {
48          writer.write(aClass.getName());
49          writer.write(".");
50          writer.write(methodName);
51          writer.write("(");
52          for (int i = 0; i < arguments.length; i++) {
53              if (i > 0) writer.write(", ");
54              Object argument = arguments[i];
55              writer.write(argument.getClass().getName());
56          }
57          writer.write(")");
58      }
59  }