Подавить DeprecationLevel.ERROR в Котлине - PullRequest
0 голосов
/ 12 мая 2019

Я использую DeprecationLevel.ERROR в своих API:

@Deprecated(
    message = "moved to def()",
    replaceWith = ReplaceWith(expression = "def()"),
    level = DeprecationLevel.ERROR)
fun abc() = def()

Я хочу проверить, чтобы вызывающие абоненты увидели эту замену.Например, мой тест не может быть скомпилирован, если я случайно удалил метод abc().

Но я не могу найти способ сделать этот компилятор:

@Test
@Suppress("something")
fun deprecatedAbc() {
  abc()
}

Например,@Suppress("DEPRECATION") не работает.Есть что-то, что делает?

1 Ответ

1 голос
/ 13 мая 2019

Согласно документации из @Deprecated:

Для постепенного удаления устаревшего API можно использовать уровень свойства. Обычно постепенный поэтапный отказ проходит этапы «предупреждение», затем «ошибка», затем «скрытый» или «удаленный»:

  • Во-первых, по умолчанию DeprecationLevel.WARNING используется для уведомления пользователей API, но не для того, чтобы нарушать их использование при компиляции или во время выполнения.
  • Затем, через некоторое время, уровень устаревания поднимается до DeprecationLevel.ERROR, , поэтому новый код Котлина не может быть скомпилирован с использованием устаревшего API .

Код не компилируется по проекту - и @Suppress подавляет только предупреждения, а не ошибки (см. doc ).

Итак, то, что вы пытаетесь достичь, невозможно. Кроме того, мне кажется, что вы тестируете функцию Kotlin, а не свою бизнес-логику. Вместо этого вы можете попробовать проверить поведение замены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...