Использование свойства NewApi по-прежнему вызывает предупреждения lint

Я создал свою собственную функцию расширения, которая проверяет, является ли SDK по крайней мере леденец

inline val buildIsLollipopAndUp: Boolean
    get() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP

Однако, если я воспользуюсь этим, инструменты lint не смогут понять, что я проверил свой уровень API и по-прежнему выдают мне новые предупреждения API. Есть ли способ заставить эти предупреждения исчезнуть, и инструменты ворса распознают мой чек?

Простой пример:

if (buildIsLollipopAndUp) ripple()
else fade()

куда ripple вызывает круговую анимацию, которая доступна только для леденцов и выше, и fade это анимация по умолчанию.

Мой полный пример:

@SuppressLint("NewApi")
@KauUtils fun View.circularReveal(x: Int = 0, y: Int = 0, offset: Long = 0L, radius: Float = -1.0f, duration: Long = 500L, onStart: (() -> Unit)? = null, onFinish: (() -> Unit)? = null) {
    if (!isAttachedToWindow) {
        onStart?.invoke()
        visible()
        onFinish?.invoke()
        return
    }
    if (!buildIsLollipopAndUp) return fadeIn(offset, duration, onStart, onFinish)

    val r = if (radius >= 0) radius
    else Math.max(Math.hypot(x.toDouble(), y.toDouble()), Math.hypot((width - x.toDouble()), (height - y.toDouble()))).toFloat()

    val anim = ViewAnimationUtils.createCircularReveal(this, x, y, 0f, r).setDuration(duration)
    anim.startDelay = offset
    anim.addListener(object : AnimatorListenerAdapter() {
        override fun onAnimationStart(animation: Animator?) {
            visible()
            onStart?.invoke()
        }

        override fun onAnimationEnd(animation: Animator?) = onFinish?.invoke() ?: Unit
        override fun onAnimationCancel(animation: Animator?) = onFinish?.invoke() ?: Unit
    })
    anim.start()
}

Обратите внимание, что мне нужен подавитель ворса, чтобы избежать предупреждений о ворсе

1 ответ

Это выглядит как lint не знает, как развернуть встроенную переменную Kotlin на месте. Я не проверял, расширяется ли это для Java. Сделаем это позже.

Также отметил...

    if(!(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)) return
    val anim = ViewAnimationUtils.createCircularReveal(this, x, y, 0f, r).setDuration(duration)

... не будет подавлять пух. Но...

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
    val anim = ViewAnimationUtils.createCircularReveal(this, x, y, 0f, r).setDuration(duration)

...будут. Опять же, я не проверял, верно ли то же самое для Java.

Поэтому я сомневаюсь, что это проблема Kotlin/Java. Я думаю, что это проблема мусора.

Другие вопросы по тегам