Устаревшие функции kotlin не предупреждены в чистом java-проекте

У меня есть тестовый класс, который написан исключительно с помощью kotlin в библиотечном проекте.

class Test{

  @Deprecated(message = "Use other function")
  fun testFunction(id: String): Test {
      this.testId = id
      return this
   }
}

Я устарел testFunction() с помощьюDeprecatedаннотация. КстатиDeprecatedкласс находится в пакете kotlin. Когда я тестирую эту устаревшую функцию в проекте kotlin, она работает должным образом (ide показывает устаревшее предупреждение и зачеркивание)

Пример: Test(). testFunction("тест")

Но в проекте java не отображается предупреждение или зачеркивание, чтобы функционировать, пока. Когда я открываю объявление устаревшей функции, это как показано ниже

  @Deprecated(
     message = "Use other function"
   )
  @NotNull
  public final Test testFunction(@NotNull String var1) {
     Intrinsics.checkParameterIsNotNull(var1, "id");
     this.testId = var1;
     return this;
   }

любая помощь будет оценена

1 ответ

В Kotlin функции, свойства и классы, отмеченные kotlin.Deprecatedаннотации также получают атрибут Deprecated в результирующем байт-коде JVM. Это позволяет компилятору Java видеть их как устаревшие и выдавать соответствующее предупреждение.

Возьмем, к примеру, эту функцию, которая устарела в Kotlin: https://github.com/JetBrains/kotlin/blob/v1.3.50/libraries/stdlib/common/src/generated/_Ranges.kt Если вы попытаетесь назовите его из Java как

kotlin.ranges.RangesKt.intRangeContains(null, 1.0);

Компилятор javac сообщит следующее предупреждение:

Warning:(55, 31) java: intRangeContains(kotlin.ranges.ClosedRange<java.lang.Integer>,double) in kotlin.ranges.RangesKt___RangesKt has been deprecated

и IDEA, и Android Studio также отметят его как устаревшее:

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