(#) Annotate SDK_INT checks
!!! WARNING: Annotate SDK_INT checks
This is a warning.
Id
: `AnnotateVersionCheck`
Summary
: Annotate SDK_INT checks
Severity
: Warning
Category
: Correctness
Platform
: Android
Vendor
: Android Open Source Project
Feedback
: https://issuetracker.google.com/issues/new?component=192708
Since
: 7.0.0 (July 2021)
Affects
: Kotlin and Java files
Editing
: This check runs on the fly in the IDE editor
Implementation
: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/SdkIntDetector.kt)
Tests
: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/SdkIntDetectorTest.kt)
Methods which perform `SDK_INT` version checks (or field constants which
reflect the result of a version check) in libraries should be annotated
with `@ChecksSdkIntAtLeast`. This makes it possible for lint to
correctly check calls into the library later to correctly understand
that problematic code which is wrapped within a call into this library
is safe after all.
!!! Tip
This lint check has an associated quickfix available in the IDE.
(##) Example
Here is an example of lint warnings produced by this check:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text
src/test/pkg/test.kt:8:Warning: This method should be annotated with
@ChecksSdkIntAtLeast(api=VERSION_CODES.N) [AnnotateVersionCheck]
fun isNougat(): Boolean {
--------
src/test/pkg/test.kt:12:Warning: This method should be annotated with
@ChecksSdkIntAtLeast(parameter=0) [AnnotateVersionCheck]
fun isAtLeast(api: Int): Boolean {
---------
src/test/pkg/test.kt:16:Warning: This method should be annotated with
@ChecksSdkIntAtLeast(api=Build.VERSION_CODES.O, lambda=1)
[AnnotateVersionCheck]
inline fun <T> T.applyForOreoOrAbove(block: T.() -> Unit): T {
-------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Here is the source file referenced above:
`src/test/pkg/test.kt`:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin linenumbers
package test.pkg
import android.os.Build
import android.os.Build.VERSION
import android.os.Build.VERSION.SDK_INT
import android.os.Build.VERSION_CODES
fun isNougat(): Boolean {
return VERSION.SDK_INT >= VERSION_CODES.N
}
fun isAtLeast(api: Int): Boolean {
return VERSION.SDK_INT >= api
}
inline fun