1 package org.robolectric.annotation; 2 3 import java.lang.annotation.Documented; 4 import java.lang.annotation.ElementType; 5 import java.lang.annotation.Retention; 6 import java.lang.annotation.RetentionPolicy; 7 import java.lang.annotation.Target; 8 import org.robolectric.shadow.api.ShadowPicker; 9 10 /** 11 * Indicates that a class declaration is intended to shadow an Android class declaration. 12 * The Robolectric runtime searches classes with this annotation for methods with the 13 * {@link Implementation} annotation and calls them in place of the methods on the Android 14 * class. 15 */ 16 @Documented 17 @Retention(RetentionPolicy.RUNTIME) 18 @Target({ElementType.TYPE}) 19 public @interface Implements { 20 21 /** 22 * The Android class to be shadowed. 23 * 24 * @return Android class to shadow. 25 */ value()26 Class<?> value() default void.class; 27 28 /** 29 * Android class name (if the Class object is not accessible). 30 * 31 * @return Android class name. 32 */ className()33 String className() default ""; 34 35 /** 36 * Denotes that this type exists in the public Android SDK. When this value is true, the 37 * annotation processor will generate a shadowOf method. 38 * 39 * @return True if the type is exposed in the Android SDK. 40 */ isInAndroidSdk()41 boolean isInAndroidSdk() default true; 42 43 /** 44 * If true, Robolectric will invoke the actual Android code for any method that isn't shadowed. 45 * 46 * @return True to invoke the underlying method. 47 */ callThroughByDefault()48 boolean callThroughByDefault() default true; 49 50 /** 51 * If true, when an exact method signature match isn't found, Robolectric will look for a method 52 * with the same name but with all argument types replaced with java.lang.Object. 53 * 54 * @return True to disable strict signature matching. 55 */ looseSignatures()56 boolean looseSignatures() default false; 57 58 /** 59 * If specified, the shadow class will be applied only for this SDK or greater. 60 */ minSdk()61 int minSdk() default -1; 62 63 /** 64 * If specified, the shadow class will be applied only for this SDK or lesser. 65 */ maxSdk()66 int maxSdk() default -1; 67 68 /** 69 * If specified, the `picker` will be instantiated and called from within the newly-created 70 * Robolectric classloader. All shadow classes implementing the same Android class must use 71 * the same {@link ShadowPicker}. 72 */ shadowPicker()73 Class<? extends ShadowPicker<?>> shadowPicker() default DefaultShadowPicker.class; 74 75 interface DefaultShadowPicker extends ShadowPicker<Object> { 76 } 77 } 78