Class ShadowWrangler
- All Implemented Interfaces:
- ClassHandler
ShadowMap.
 ShadowWrangler has no specific knowledge of Android SDK levels or other peculiarities of the affected classes and shadows.
To apply additional rules about which shadow classes and methods are considered matches, pass
 in a ShadowMatcher.
 
ShadowWrangler is Robolectric's default ClassHandler implementation. To inject your
 own, create a subclass and annotate it with AutoService(ClassHandler).
- 
Field SummaryFieldsModifier and TypeFieldDescriptionstatic final Methodstatic final MethodHandlestatic final Method
- 
Constructor SummaryConstructorsConstructorDescriptionShadowWrangler(ShadowMap shadowMap, ShadowMatcher shadowMatcher, Interceptors interceptors) 
- 
Method SummaryModifier and TypeMethodDescriptionvoidclassInitializing(Class clazz) Called by Robolectric when an instrumented class is first loaded into a sandbox and is ready to be statically initialized.findShadowMethodHandle(Class<?> definingClass, String name, MethodType methodType, boolean isStatic) 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.initializing(Object instance) Called by Robolectric when a new instance of an instrumented class has been created and is ready to be initialized (but only on JVMs which don't support theinvokedynamicinstruction).Called by Robolectric when an intercepted method is invoked.static Class<?>loadClass(String paramType, ClassLoader classLoader) protected MethodpickShadowMethod(Class<?> definingClass, String name, Class<?>[] paramTypes) <T extends Throwable>
 TstripStackTrace(T throwable) Removes Robolectric noise from stack traces.
- 
Field Details- 
DO_NOTHING_HANDLER
- 
CALL_REAL_CODE
- 
DO_NOTHING
- 
DO_NOTHING_METHOD
 
- 
- 
Constructor Details- 
ShadowWrangler
 
- 
- 
Method Details- 
loadClass
- 
classInitializingDescription copied from interface:ClassHandlerCalled 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>.- Specified by:
- classInitializingin interface- ClassHandler
- Parameters:
- clazz- the class being loaded
 
- 
initializingDescription copied from interface:ClassHandlerCalled by Robolectric when a new instance of an instrumented class has been created and is ready to be initialized (but only on JVMs which don't support theinvokedynamicinstruction).This happens before constructor code executes on the new instance. - Specified by:
- initializingin interface- ClassHandler
- Parameters:
- instance- the newly-created instance
- Returns:
- a data value to be associated with the new instance
- See Also:
 
- 
findShadowMethodHandlepublic MethodHandle findShadowMethodHandle(Class<?> definingClass, String name, MethodType methodType, boolean isStatic) throws IllegalAccessException Description copied from interface:ClassHandlerCalled 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. - Specified by:
- findShadowMethodHandlein interface- ClassHandler
- Parameters:
- definingClass- the class on which the method is declared
- name- the name of the method
- methodType- the method type
- isStatic- 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:
 
- 
pickShadowMethod
- 
interceptpublic Object intercept(String signature, Object instance, Object[] params, Class theClass) throws Throwable Description copied from interface:ClassHandlerCalled 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). - Specified by:
- interceptin interface- ClassHandler
- 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 invoked
- params- the parameters to the method
- theClass- the class on which the method is declared
- Returns:
- the value to be returned
- Throws:
- Throwable- if anything bad happens
 
- 
stripStackTraceDescription copied from interface:ClassHandlerRemoves Robolectric noise from stack traces.- Specified by:
- stripStackTracein interface- ClassHandler
- Type Parameters:
- T- the type of exception
- Parameters:
- throwable- the exception to be stripped
- Returns:
- the stripped stack trace
 
- 
getShadowCreatorDescription copied from interface:ClassHandlerCalled 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 theinvokedynamicinstruction).The returned MethodHandlewill be invoked after the new object has been allocated but before its constructor code is executed.Note that this is not directly analogous to ClassHandler.initializing(Object); the return value from this method will be cached and used again for other instantiations of instances of the same class.- Specified by:
- getShadowCreatorin interface- ClassHandler
- Parameters:
- theClass- the instrumented class
- Returns:
- a data value to be associated with the new instance
- See Also:
 
 
-