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 Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected Writer`
  `writer`
  Writer used to emit trace output.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `TracingInterceptor()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Object`
  `afterInvoke(Object object, String methodName, Object[] arguments, Object result)`
  This code is executed after the method is optionally called.
  `Object`
  `beforeInvoke(Object object, String methodName, Object[] arguments)`
  This code is executed before the method is optionally called.
  `boolean`
  `doInvoke()`
  `Writer`
  `getWriter()`
  Returns the writer associated with this interceptor.
  `void`
  `setWriter(Writer writer)`
  Changes the writer associated with this interceptor.
  `protected void`
  `write(Object object, String methodName, Object[] arguments, String origin)`
  Writes a formatted trace line for the supplied invocation stage.
  `protected void`
  `writeInfo(Class aClass, String methodName, Object[] arguments)`
  Writes a trace line describing the intercepted method invocation.

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## 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