public class SupportAnnotationDetector
extends com.android.tools.lint.detector.api.Detector
implements com.android.tools.lint.detector.api.Detector.JavaPsiScanner
@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.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.JavaPsiScanner, 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| Modifier and Type | Field and Description |
|---|---|
static java.lang.String |
ANY_THREAD_ANNOTATION |
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 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 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 and Description |
|---|
SupportAnnotationDetector()
Constructs a new
SupportAnnotationDetector check |
| Modifier and Type | Method and Description |
|---|---|
static boolean |
containsAnnotation(com.intellij.psi.PsiAnnotation[] array,
com.intellij.psi.PsiAnnotation annotation) |
static boolean |
containsThreadingAnnotation(com.intellij.psi.PsiAnnotation[] array) |
com.intellij.psi.JavaElementVisitor |
createPsiVisitor(com.android.tools.lint.detector.api.JavaContext context) |
static java.lang.String |
describeThread(java.lang.String annotation) |
static java.lang.String |
describeThreads(java.util.List<java.lang.String> annotations,
boolean any) |
java.util.List<java.lang.Class<? extends com.intellij.psi.PsiElement>> |
getApplicablePsiTypes() |
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.util.List<java.lang.String> callers,
java.lang.String callee)
returns true if the two threads are compatible
|
static boolean |
isCompatibleThread(java.lang.String caller,
java.lang.String callee)
returns true if the two threads are compatible
|
static boolean |
isThreadingAnnotation(com.intellij.psi.PsiAnnotation annotation) |
static boolean |
typeArrayFromArrayLiteral(com.intellij.psi.PsiElement node)
Returns true if the node is pointing to a TypedArray whose value was obtained
from an array literal
|
afterCheckFile, afterCheckLibraryProject, afterCheckProject, applicableSuperClasses, appliesTo, appliesTo, appliesToFolder, appliesToResourceRefs, beforeCheckFile, beforeCheckLibraryProject, beforeCheckProject, checkBinaryResource, checkCall, checkClass, checkClass, checkClass, checkFolder, checkInstruction, createJavaVisitor, getApplicableAsmNodeTypes, getApplicableAttributes, getApplicableCallNames, getApplicableCallOwners, getApplicableConstructorTypes, getApplicableElements, getApplicableFiles, getApplicableMethodNames, getApplicableNodeTypes, getApplicableReferenceNames, getSpeed, getSpeed, run, visitAttribute, visitBuildScript, visitConstructor, visitConstructor, visitDocument, visitElement, visitElementAfter, visitMethod, visitMethod, visitReference, visitResourceReference, visitResourceReferenceclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitapplicableSuperClasses, appliesToResourceRefs, checkClass, getApplicableConstructorTypes, getApplicableMethodNames, getApplicableReferenceNames, visitConstructor, visitMethod, visitReference, visitResourceReferencepublic static final com.android.tools.lint.detector.api.Implementation IMPLEMENTATION
public static final com.android.tools.lint.detector.api.Issue RANGE
public static final com.android.tools.lint.detector.api.Issue RESOURCE_TYPE
public static final com.android.tools.lint.detector.api.Issue COLOR_USAGE
public static final com.android.tools.lint.detector.api.Issue TYPE_DEF
public static final com.android.tools.lint.detector.api.Issue CHECK_RESULT
public static final com.android.tools.lint.detector.api.Issue CHECK_PERMISSION
public static final com.android.tools.lint.detector.api.Issue MISSING_PERMISSION
public static final com.android.tools.lint.detector.api.Issue THREAD
public static final java.lang.String CHECK_RESULT_ANNOTATION
public static final java.lang.String INT_RANGE_ANNOTATION
public static final java.lang.String FLOAT_RANGE_ANNOTATION
public static final java.lang.String SIZE_ANNOTATION
public static final java.lang.String PERMISSION_ANNOTATION
public static final java.lang.String UI_THREAD_ANNOTATION
public static final java.lang.String MAIN_THREAD_ANNOTATION
public static final java.lang.String WORKER_THREAD_ANNOTATION
public static final java.lang.String BINDER_THREAD_ANNOTATION
public static final java.lang.String ANY_THREAD_ANNOTATION
public static final java.lang.String PERMISSION_ANNOTATION_READ
public static final java.lang.String PERMISSION_ANNOTATION_WRITE
public static final java.lang.String THREAD_SUFFIX
public static final java.lang.String ATTR_SUGGEST
public static final java.lang.String ATTR_TO
public static final java.lang.String ATTR_FROM
public static final java.lang.String ATTR_FROM_INCLUSIVE
public static final java.lang.String ATTR_TO_INCLUSIVE
public static final java.lang.String ATTR_MULTIPLE
public static final java.lang.String ATTR_MIN
public static final java.lang.String ATTR_MAX
public static final java.lang.String ATTR_ALL_OF
public static final java.lang.String ATTR_ANY_OF
public static final java.lang.String ATTR_CONDITIONAL
public SupportAnnotationDetector()
SupportAnnotationDetector checkpublic static java.lang.String getMissingPermissionMessage(@NonNull
PermissionRequirement requirement,
@NonNull
java.lang.String callName,
@NonNull
PermissionHolder permissions,
@NonNull
PermissionFinder.Operation operation)
public static java.lang.String getUnhandledPermissionMessage()
public static boolean containsAnnotation(@NonNull
com.intellij.psi.PsiAnnotation[] array,
@NonNull
com.intellij.psi.PsiAnnotation annotation)
public static boolean containsThreadingAnnotation(@NonNull
com.intellij.psi.PsiAnnotation[] array)
public static boolean isThreadingAnnotation(@NonNull
com.intellij.psi.PsiAnnotation annotation)
@NonNull
public static java.lang.String describeThreads(@NonNull
java.util.List<java.lang.String> annotations,
boolean any)
@NonNull
public static java.lang.String describeThread(@NonNull
java.lang.String annotation)
public static boolean isCompatibleThread(@NonNull
java.util.List<java.lang.String> callers,
@NonNull
java.lang.String callee)
public static boolean isCompatibleThread(@NonNull
java.lang.String caller,
@NonNull
java.lang.String callee)
public static boolean typeArrayFromArrayLiteral(@Nullable
com.intellij.psi.PsiElement node)
public java.util.List<java.lang.Class<? extends com.intellij.psi.PsiElement>> getApplicablePsiTypes()
getApplicablePsiTypes in interface com.android.tools.lint.detector.api.Detector.JavaPsiScannergetApplicablePsiTypes in class com.android.tools.lint.detector.api.Detector@Nullable
public com.intellij.psi.JavaElementVisitor createPsiVisitor(@NonNull
com.android.tools.lint.detector.api.JavaContext context)
createPsiVisitor in interface com.android.tools.lint.detector.api.Detector.JavaPsiScannercreatePsiVisitor in class com.android.tools.lint.detector.api.Detector