Package groovy.lang
Class TracingInterceptor
java.lang.Object
groovy.lang.TracingInterceptor
- All Implemented Interfaces:
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 -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionafterInvoke(Object object, String methodName, Object[] arguments, Object result) This code is executed after the method is optionally called.beforeInvoke(Object object, String methodName, Object[] arguments) This code is executed before the method is optionally called.booleandoInvoke()Returns the writer associated with this interceptor.voidChanges the writer associated with this interceptor.protected voidWrites a formatted trace line for the supplied invocation stage.protected voidWrites a trace line describing the intercepted method invocation.
-
Field Details
-
writer
Writer used to emit trace output.
-
-
Constructor Details
-
TracingInterceptor
public TracingInterceptor()
-
-
Method Details
-
getWriter
Returns the writer associated with this interceptor. -
setWriter
Changes the writer associated with this interceptor. -
beforeInvoke
This code is executed before the method is optionally called.- Specified by:
beforeInvokein interfaceInterceptor- Parameters:
object- receiver object for the method callmethodName- name of the method to callarguments- 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
This code is executed after the method is optionally called.- Specified by:
afterInvokein interfaceInterceptor- Parameters:
object- receiver object for the called methodmethodName- name of the called methodarguments- arguments to the called methodresult- 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:
doInvokein interfaceInterceptor- Returns:
- whether the target method should be invoked at all.
-
write
Writes a formatted trace line for the supplied invocation stage.- Parameters:
object- the receiver objectmethodName- the invoked method namearguments- the invocation argumentsorigin- the trace prefix to write
-
writeInfo
Writes a trace line describing the intercepted method invocation.- Parameters:
aClass- the declaring or receiver class to reportmethodName- the intercepted method namearguments- the intercepted arguments- Throws:
IOException- if the trace output cannot be written
-