Package groovy.lang

Class TracingInterceptor

java.lang.Object
groovy.lang.TracingInterceptor
All Implemented Interfaces:
Interceptor

public class TracingInterceptor extends Object implements Interceptor
This Interceptor traces method calls on the proxied object to a log. By default, the log is simply
System.out
; however, that can be changed with the
setWriter(Writer)
method.

A message will be written to output before a method is invoked and after a method is invoked. If methods are nested, and invoke one another, then indentation of two spaces is written.

Here is an example usage on the ArrayList object:

 def proxy = ProxyMetaClass.getInstance(ArrayList.class)
 proxy.interceptor = new TracingInterceptor()
 proxy.use {
     def list = [1, 2, 3]
     assert 3 == list.size()
     assert list.contains(1)
 }
 
Running this code produces this output:
 before java.util.ArrayList.size()
 after  java.util.ArrayList.size()
 before java.util.ArrayList.contains(java.lang.Integer)
 after  java.util.ArrayList.contains(java.lang.Integer)
 
  • Field Details

    • writer

      protected Writer writer
      Writer used to emit trace output.
  • Constructor Details

    • TracingInterceptor

      public TracingInterceptor()
  • Method Details

    • getWriter

      public Writer getWriter()
      Returns the writer associated with this interceptor.
    • setWriter

      public void setWriter(Writer writer)
      Changes the writer associated with this interceptor.
    • beforeInvoke

      public Object beforeInvoke(Object object, String methodName, Object[] arguments)
      This code is executed before the method is optionally called.
      Specified by:
      beforeInvoke in interface Interceptor
      Parameters:
      object - receiver object for the method call
      methodName - name of the method to call
      arguments - arguments to the method call
      Returns:
      any arbitrary result that replaces the result of the original method call only if doInvoke() returns false and afterInvoke() relays this result.
    • afterInvoke

      public Object afterInvoke(Object object, String methodName, Object[] arguments, Object result)
      This code is executed after the method is optionally called.
      Specified by:
      afterInvoke in interface Interceptor
      Parameters:
      object - receiver object for the called method
      methodName - name of the called method
      arguments - arguments to the called method
      result - result of the executed method call or result of beforeInvoke if method was not called
      Returns:
      any arbitrary result that can replace the result of the original method call. Typically, the result parameter is returned.
    • doInvoke

      public boolean doInvoke()
      Specified by:
      doInvoke in interface Interceptor
      Returns:
      whether the target method should be invoked at all.
    • write

      protected void write(Object object, String methodName, Object[] arguments, String origin)
      Writes a formatted trace line for the supplied invocation stage.
      Parameters:
      object - the receiver object
      methodName - the invoked method name
      arguments - the invocation arguments
      origin - the trace prefix to write
    • writeInfo

      protected void writeInfo(Class aClass, String methodName, Object[] arguments) throws IOException
      Writes a trace line describing the intercepted method invocation.
      Parameters:
      aClass - the declaring or receiver class to report
      methodName - the intercepted method name
      arguments - the intercepted arguments
      Throws:
      IOException - if the trace output cannot be written