com.android.tools.lint.checks
Class SupportAnnotationDetector

java.lang.Object
  extended by com.android.tools.lint.detector.api.Detector
      extended by com.android.tools.lint.checks.SupportAnnotationDetector
All Implemented Interfaces:
com.android.tools.lint.detector.api.Detector.JavaScanner

public class SupportAnnotationDetector
extends com.android.tools.lint.detector.api.Detector
implements com.android.tools.lint.detector.api.Detector.JavaScanner

Looks up annotations on method calls and enforces the various things they express, e.g. for @CheckReturn it makes sure the return value is used, for ColorInt it ensures that a proper color integer is passed in, etc. TODO: Throw in some annotation usage checks here too; e.g. specifying @Size without parameters, specifying toInclusive without setting to, combining @ColorInt with any @ResourceTypeRes, using @CheckResult on a void method, etc.


Nested Class Summary
 
Nested classes/interfaces inherited from class com.android.tools.lint.detector.api.Detector
com.android.tools.lint.detector.api.Detector.BinaryResourceScanner, com.android.tools.lint.detector.api.Detector.ClassScanner, com.android.tools.lint.detector.api.Detector.GradleScanner, com.android.tools.lint.detector.api.Detector.JavaScanner, com.android.tools.lint.detector.api.Detector.OtherFileScanner, com.android.tools.lint.detector.api.Detector.ResourceFolderScanner, com.android.tools.lint.detector.api.Detector.XmlScanner
 
Field Summary
static java.lang.String ATTR_ALL_OF
           
static java.lang.String ATTR_ANY_OF
           
static java.lang.String ATTR_CONDITIONAL
           
static java.lang.String ATTR_FROM
           
static java.lang.String ATTR_FROM_INCLUSIVE
           
static java.lang.String ATTR_MAX
           
static java.lang.String ATTR_MIN
           
static java.lang.String ATTR_MULTIPLE
           
static java.lang.String ATTR_SUGGEST
           
static java.lang.String ATTR_TO
           
static java.lang.String ATTR_TO_INCLUSIVE
           
static java.lang.String BINDER_THREAD_ANNOTATION
           
static com.android.tools.lint.detector.api.Issue CHECK_PERMISSION
          Failing to enforce security by just calling check permission
static com.android.tools.lint.detector.api.Issue CHECK_RESULT
          Method result should be used
static java.lang.String CHECK_RESULT_ANNOTATION
           
static java.lang.String COLOR_INT_ANNOTATION
           
static com.android.resources.ResourceType COLOR_INT_MARKER_TYPE
          Marker ResourceType used to signify that an expression is of type @ColorInt, which isn't actually a ResourceType but one we want to specifically compare with.
static com.android.tools.lint.detector.api.Issue COLOR_USAGE
          Attempting to set a resource id as a color
static java.lang.String FLOAT_RANGE_ANNOTATION
           
static com.android.tools.lint.detector.api.Implementation IMPLEMENTATION
           
static java.lang.String INT_RANGE_ANNOTATION
           
static java.lang.String MAIN_THREAD_ANNOTATION
           
static com.android.tools.lint.detector.api.Issue MISSING_PERMISSION
          Method result should be used
static java.lang.String PERMISSION_ANNOTATION
           
static java.lang.String PERMISSION_ANNOTATION_READ
           
static java.lang.String PERMISSION_ANNOTATION_WRITE
           
static com.android.tools.lint.detector.api.Issue RANGE
          Method result should be used
static java.lang.String RES_SUFFIX
           
static com.android.tools.lint.detector.api.Issue RESOURCE_TYPE
          Attempting to set a resource id as a color
static java.lang.String SIZE_ANNOTATION
           
static com.android.tools.lint.detector.api.Issue THREAD
          Passing the wrong constant to an int or String method
static java.lang.String THREAD_SUFFIX
           
static com.android.tools.lint.detector.api.Issue TYPE_DEF
          Passing the wrong constant to an int or String method
static java.lang.String UI_THREAD_ANNOTATION
           
static java.lang.String WORKER_THREAD_ANNOTATION
           
 
Constructor Summary
SupportAnnotationDetector()
          Constructs a new SupportAnnotationDetector check
 
Method Summary
 lombok.ast.AstVisitor createJavaVisitor(com.android.tools.lint.detector.api.JavaContext context)
           
static java.lang.String describeThread(java.lang.String annotation)
           
 java.util.List<java.lang.Class<? extends lombok.ast.Node>> getApplicableNodeTypes()
           
static java.lang.String getMissingPermissionMessage(PermissionRequirement requirement, java.lang.String callName, PermissionHolder permissions, PermissionFinder.Operation operation)
          Returns the error message shown when a given call is missing one or more permissions
static java.lang.String getUnhandledPermissionMessage()
          Returns the error message shown when a revocable permission call is not properly handled
static boolean isCompatibleThread(java.lang.String thread1, java.lang.String thread2)
          returns true if the two threads are compatible
 
Methods inherited from class com.android.tools.lint.detector.api.Detector
afterCheckFile, afterCheckLibraryProject, afterCheckProject, applicableSuperClasses, appliesTo, appliesTo, appliesToFolder, appliesToResourceRefs, beforeCheckFile, beforeCheckLibraryProject, beforeCheckProject, checkBinaryResource, checkCall, checkClass, checkClass, checkFolder, checkInstruction, getApplicableAsmNodeTypes, getApplicableAttributes, getApplicableCallNames, getApplicableCallOwners, getApplicableConstructorTypes, getApplicableElements, getApplicableFiles, getApplicableMethodNames, getSpeed, getSpeed, run, visitAttribute, visitBuildScript, visitConstructor, visitDocument, visitElement, visitElementAfter, visitMethod, visitResourceReference
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface com.android.tools.lint.detector.api.Detector.JavaScanner
applicableSuperClasses, appliesToResourceRefs, checkClass, getApplicableConstructorTypes, getApplicableMethodNames, visitConstructor, visitMethod, visitResourceReference
 

Field Detail

IMPLEMENTATION

public static final com.android.tools.lint.detector.api.Implementation IMPLEMENTATION

RANGE

public static final com.android.tools.lint.detector.api.Issue RANGE
Method result should be used


RESOURCE_TYPE

public static final com.android.tools.lint.detector.api.Issue RESOURCE_TYPE
Attempting to set a resource id as a color


COLOR_USAGE

public static final com.android.tools.lint.detector.api.Issue COLOR_USAGE
Attempting to set a resource id as a color


TYPE_DEF

public static final com.android.tools.lint.detector.api.Issue TYPE_DEF
Passing the wrong constant to an int or String method


CHECK_RESULT

public static final com.android.tools.lint.detector.api.Issue CHECK_RESULT
Method result should be used


CHECK_PERMISSION

public static final com.android.tools.lint.detector.api.Issue CHECK_PERMISSION
Failing to enforce security by just calling check permission


MISSING_PERMISSION

public static final com.android.tools.lint.detector.api.Issue MISSING_PERMISSION
Method result should be used


THREAD

public static final com.android.tools.lint.detector.api.Issue THREAD
Passing the wrong constant to an int or String method


CHECK_RESULT_ANNOTATION

public static final java.lang.String CHECK_RESULT_ANNOTATION
See Also:
Constant Field Values

COLOR_INT_ANNOTATION

public static final java.lang.String COLOR_INT_ANNOTATION
See Also:
Constant Field Values

INT_RANGE_ANNOTATION

public static final java.lang.String INT_RANGE_ANNOTATION
See Also:
Constant Field Values

FLOAT_RANGE_ANNOTATION

public static final java.lang.String FLOAT_RANGE_ANNOTATION
See Also:
Constant Field Values

SIZE_ANNOTATION

public static final java.lang.String SIZE_ANNOTATION
See Also:
Constant Field Values

PERMISSION_ANNOTATION

public static final java.lang.String PERMISSION_ANNOTATION
See Also:
Constant Field Values

UI_THREAD_ANNOTATION

public static final java.lang.String UI_THREAD_ANNOTATION
See Also:
Constant Field Values

MAIN_THREAD_ANNOTATION

public static final java.lang.String MAIN_THREAD_ANNOTATION
See Also:
Constant Field Values

WORKER_THREAD_ANNOTATION

public static final java.lang.String WORKER_THREAD_ANNOTATION
See Also:
Constant Field Values

BINDER_THREAD_ANNOTATION

public static final java.lang.String BINDER_THREAD_ANNOTATION
See Also:
Constant Field Values

PERMISSION_ANNOTATION_READ

public static final java.lang.String PERMISSION_ANNOTATION_READ
See Also:
Constant Field Values

PERMISSION_ANNOTATION_WRITE

public static final java.lang.String PERMISSION_ANNOTATION_WRITE
See Also:
Constant Field Values

RES_SUFFIX

public static final java.lang.String RES_SUFFIX
See Also:
Constant Field Values

THREAD_SUFFIX

public static final java.lang.String THREAD_SUFFIX
See Also:
Constant Field Values

ATTR_SUGGEST

public static final java.lang.String ATTR_SUGGEST
See Also:
Constant Field Values

ATTR_TO

public static final java.lang.String ATTR_TO
See Also:
Constant Field Values

ATTR_FROM

public static final java.lang.String ATTR_FROM
See Also:
Constant Field Values

ATTR_FROM_INCLUSIVE

public static final java.lang.String ATTR_FROM_INCLUSIVE
See Also:
Constant Field Values

ATTR_TO_INCLUSIVE

public static final java.lang.String ATTR_TO_INCLUSIVE
See Also:
Constant Field Values

ATTR_MULTIPLE

public static final java.lang.String ATTR_MULTIPLE
See Also:
Constant Field Values

ATTR_MIN

public static final java.lang.String ATTR_MIN
See Also:
Constant Field Values

ATTR_MAX

public static final java.lang.String ATTR_MAX
See Also:
Constant Field Values

ATTR_ALL_OF

public static final java.lang.String ATTR_ALL_OF
See Also:
Constant Field Values

ATTR_ANY_OF

public static final java.lang.String ATTR_ANY_OF
See Also:
Constant Field Values

ATTR_CONDITIONAL

public static final java.lang.String ATTR_CONDITIONAL
See Also:
Constant Field Values

COLOR_INT_MARKER_TYPE

public static final com.android.resources.ResourceType COLOR_INT_MARKER_TYPE
Marker ResourceType used to signify that an expression is of type @ColorInt, which isn't actually a ResourceType but one we want to specifically compare with. We're using ResourceType.PUBLIC because that one won't appear in the R class (and ResourceType is an enum we can't just create new constants for.)

Constructor Detail

SupportAnnotationDetector

public SupportAnnotationDetector()
Constructs a new SupportAnnotationDetector check

Method Detail

getMissingPermissionMessage

public static java.lang.String getMissingPermissionMessage(@NonNull
                                                           PermissionRequirement requirement,
                                                           @NonNull
                                                           java.lang.String callName,
                                                           @NonNull
                                                           PermissionHolder permissions,
                                                           @NonNull
                                                           PermissionFinder.Operation operation)
Returns the error message shown when a given call is missing one or more permissions


getUnhandledPermissionMessage

public static java.lang.String getUnhandledPermissionMessage()
Returns the error message shown when a revocable permission call is not properly handled


describeThread

@NonNull
public static java.lang.String describeThread(@NonNull
                                                      java.lang.String annotation)

isCompatibleThread

public static boolean isCompatibleThread(@NonNull
                                         java.lang.String thread1,
                                         @NonNull
                                         java.lang.String thread2)
returns true if the two threads are compatible


getApplicableNodeTypes

public java.util.List<java.lang.Class<? extends lombok.ast.Node>> getApplicableNodeTypes()
Specified by:
getApplicableNodeTypes in interface com.android.tools.lint.detector.api.Detector.JavaScanner
Overrides:
getApplicableNodeTypes in class com.android.tools.lint.detector.api.Detector

createJavaVisitor

@Nullable
public lombok.ast.AstVisitor createJavaVisitor(@NonNull
                                                        com.android.tools.lint.detector.api.JavaContext context)
Specified by:
createJavaVisitor in interface com.android.tools.lint.detector.api.Detector.JavaScanner
Overrides:
createJavaVisitor in class com.android.tools.lint.detector.api.Detector