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_OTHERWISE |
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 |
RESTRICT_TO_ANNOTATION |
static com.android.tools.lint.detector.api.Issue |
RESTRICTED
Using a restricted API
|
static java.lang.String |
SIZE_ANNOTATION |
static com.android.tools.lint.detector.api.Issue |
TEST_VISIBILITY
Using an intended-for-tests API
|
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 |
VISIBLE_FOR_TESTING_ANNOTATION |
static java.lang.String |
WORKER_THREAD_ANNOTATION |
Constructor and Description |
---|
SupportAnnotationDetector()
Constructs a new
SupportAnnotationDetector check |
Modifier and Type | Method and Description |
---|---|
static void |
checkRestrictTo(LintInspectionBridge bridge,
com.intellij.psi.PsiElement node,
com.intellij.psi.PsiMethod method,
com.intellij.psi.PsiAnnotation annotation,
com.intellij.psi.PsiAnnotation[] allMethodAnnotations,
com.intellij.psi.PsiAnnotation[] allClassAnnotations) |
static void |
checkVisibleForTesting(LintInspectionBridge bridge,
com.intellij.psi.PsiElement node,
com.intellij.psi.PsiMethod method,
com.intellij.psi.PsiAnnotation annotation,
com.intellij.psi.PsiAnnotation[] allMethodAnnotations,
com.intellij.psi.PsiAnnotation[] allClassAnnotations) |
static boolean |
containsAnnotation(com.intellij.psi.PsiAnnotation[] array,
com.intellij.psi.PsiAnnotation annotation) |
static boolean |
containsRestrictionAnnotation(com.intellij.psi.PsiAnnotation[] array) |
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 int |
getRestrictionScope(com.intellij.psi.PsiAnnotation annotation) |
static java.util.List<java.lang.String> |
getThreadContext(com.android.tools.lint.detector.api.JavaContext context,
com.intellij.psi.PsiElement methodCall)
Attempts to infer the current thread context at the site of the given method call
|
static java.lang.String |
getUnhandledPermissionMessage()
Returns the error message shown when a revocable permission call is not properly handled
|
static int |
getVisibilityForTesting(com.intellij.psi.PsiAnnotation annotation) |
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, 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, visitResourceReference
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
applicableSuperClasses, appliesToResourceRefs, checkClass, getApplicableConstructorTypes, getApplicableMethodNames, getApplicableReferenceNames, visitConstructor, visitMethod, visitReference, visitResourceReference
public 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 RESTRICTED
public static final com.android.tools.lint.detector.api.Issue TEST_VISIBILITY
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 RESTRICT_TO_ANNOTATION
public static final java.lang.String VISIBLE_FOR_TESTING_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 static final java.lang.String ATTR_OTHERWISE
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 void checkVisibleForTesting(@NonNull LintInspectionBridge bridge, @NonNull com.intellij.psi.PsiElement node, @NonNull com.intellij.psi.PsiMethod method, @NonNull com.intellij.psi.PsiAnnotation annotation, @NonNull com.intellij.psi.PsiAnnotation[] allMethodAnnotations, @NonNull com.intellij.psi.PsiAnnotation[] allClassAnnotations)
public static int getVisibilityForTesting(@NonNull com.intellij.psi.PsiAnnotation annotation)
public static void checkRestrictTo(@NonNull LintInspectionBridge bridge, @NonNull com.intellij.psi.PsiElement node, @NonNull com.intellij.psi.PsiMethod method, @NonNull com.intellij.psi.PsiAnnotation annotation, @NonNull com.intellij.psi.PsiAnnotation[] allMethodAnnotations, @NonNull com.intellij.psi.PsiAnnotation[] allClassAnnotations)
public static int getRestrictionScope(@NonNull com.intellij.psi.PsiAnnotation annotation)
public static boolean containsAnnotation(@NonNull com.intellij.psi.PsiAnnotation[] array, @NonNull com.intellij.psi.PsiAnnotation annotation)
public static boolean containsRestrictionAnnotation(@NonNull com.intellij.psi.PsiAnnotation[] array)
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)
@Nullable public static java.util.List<java.lang.String> getThreadContext(@NonNull com.android.tools.lint.detector.api.JavaContext context, @NonNull com.intellij.psi.PsiElement methodCall)
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.JavaPsiScanner
getApplicablePsiTypes
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.JavaPsiScanner
createPsiVisitor
in class com.android.tools.lint.detector.api.Detector