Interface ClassHandler
- All Known Implementing Classes:
ShadowWrangler
-
Method Summary
Modifier and TypeMethodDescriptionvoid
classInitializing
(Class clazz) Called by Robolectric when an instrumented class is first loaded into a sandbox and is ready to be statically initialized.findShadowMethodHandle
(Class<?> theClass, String name, MethodType methodType, boolean isStatic, boolean isNative) Called by Robolectric when an instrumented method is invoked.getShadowCreator
(Class<?> theClass) Called by Robolectric to determine how to create and initialize a shadow object when a new instance of an instrumented class has been instantiated.Called by Robolectric when an intercepted method is invoked.<T extends Throwable>
TstripStackTrace
(T throwable) Removes Robolectric noise from stack traces.
-
Method Details
-
classInitializing
Called by Robolectric when an instrumented class is first loaded into a sandbox and is ready to be statically initialized.This happens *in place of* any static initialization that may be performed by the class being loaded. The class will have a method named
__staticInitializer__
which may be invoked to perform its normal initialization from<clinit>
.- Parameters:
clazz
- the class being loaded
-
getShadowCreator
Called by Robolectric to determine how to create and initialize a shadow object when a new instance of an instrumented class has been instantiated. (but only on JVMs which support theinvokedynamic
instruction).The returned
MethodHandle
will be invoked after the new object has been allocated but before its constructor code is executed.Note that this is not directly analogous to
#initializing(Object)
; the return value from this method will be cached and used again for other instantiations of instances of the same class.- Parameters:
theClass
- the instrumented class- Returns:
- a data value to be associated with the new instance
- See Also:
-
findShadowMethodHandle
MethodHandle findShadowMethodHandle(Class<?> theClass, String name, MethodType methodType, boolean isStatic, boolean isNative) throws IllegalAccessException Called by Robolectric when an instrumented method is invoked.Implementations should return an
MethodHandle
, which will be invoked with details about the current instance and parameters.Implementations may also return null, in which case the method's original code will be executed.
- Parameters:
theClass
- the class on which the method is declaredname
- the name of the methodmethodType
- the method typeisStatic
- true if the method is static- Returns:
- a method handle to invoke, or null if the original method's code should be executed
- Throws:
IllegalAccessException
- See Also:
-
intercept
Object intercept(String signature, Object instance, Object[] params, Class<?> theClass) throws Throwable Called by Robolectric when an intercepted method is invoked.Unlike instrumented methods, calls to intercepted methods are modified in place by Robolectric in the calling code. This is useful when the method about to be invoked doesn't exist in the current JVM (e.g. because of Android differences).
- Parameters:
signature
- the JVM internal-format signature of the method being invoked (e.g.android/view/View/measure(II)V
)instance
- the instance on which the method would have been invokedparams
- the parameters to the methodtheClass
- the class on which the method is declared- Returns:
- the value to be returned
- Throws:
Throwable
- if anything bad happens
-
stripStackTrace
Removes Robolectric noise from stack traces.- Type Parameters:
T
- the type of exception- Parameters:
throwable
- the exception to be stripped- Returns:
- the stripped stack trace
-