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