Package: groovy.lang

## [Java] Class TracingInterceptor

- groovy.lang.TracingInterceptor

- All Implemented Interfaces and Traits:
    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
    Modifiers | Name | Description
    --- | --- | ---
    `protected Writer` | `writer` | Writer used to emit trace output.

  - ### Methods Summary

    Methods
    Type Params | Return Type | Name and description
    --- | --- | ---
    `` | `public Object` | `afterInvoke(Object object, String methodName, Object[] arguments, Object result)` This code is executed after the method is optionally called. 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.
    `` | `public Object` | `beforeInvoke(Object object, String methodName, Object[] arguments)` This code is executed before the method is optionally called. 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.
    `` | `public boolean` | `doInvoke()` Returns: whether the target method should be invoked at all.
    `` | `public Writer` | `getWriter()` Returns the writer associated with this interceptor.
    `` | `public 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.

  - ### Inherited Methods Summary

    Inherited Methods
    Methods inherited from class | Name
    --- | ---
    `class Object` | `equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### protected Writer writer

      Writer used to emit trace output.

  - ### Method Detail

    - #### public Object afterInvoke(Object object, String methodName, Object[] arguments, Object result)

      This code is executed after the method is optionally called.

      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.

    - #### public Object beforeInvoke(Object object, String methodName, Object[] arguments)

      This code is executed before the method is optionally called.

      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.

    - #### public boolean doInvoke()

      Returns:
        whether the target method should be invoked at all.

    - #### public Writer getWriter()

      Returns the writer associated with this interceptor.

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

      Parameters:
        `object` - the receiver object
        `methodName` - the invoked method name
        `arguments` - the invocation arguments
        `origin` - the trace prefix to write

    - #### protected void writeInfo(Class aClass, String methodName, Object[] arguments)

      Writes a trace line describing the intercepted method invocation.

      throws:
        IOException if the trace output cannot be written
      Parameters:
        `aClass` - the declaring or receiver class to report
        `methodName` - the intercepted method name
        `arguments` - the intercepted arguments