Spec-Zone.ru › Kotlin 2

Руководство по совместимости для Kotlin 1.4.x

Поддержание актуальности языка и Удобство обновлений — фундаментальные принципы проектирования языка Kotlin. Первый гласит, что конструкции, препятствующие развитию языка, следует удалять, а второй — что об удалении следует заблаговременно сообщать, чтобы упростить перенос кода.

Хотя большинство изменений языка уже были анонсированы в других источниках, например в журналах изменений обновлений или предупреждениях компилятора, в этом документе они собраны вместе, чтобы предоставить полный справочник по переходу с Kotlin 1.3 на Kotlin 1.4.

Основные термины

В этом документе рассматривается несколько видов совместимости:

  • исходная: изменение, несовместимое с исходным кодом, не позволяет скомпилировать код, который раньше компилировался без ошибок и предупреждений

  • бинарная: два бинарных артефакта считаются бинарно-совместимыми, если их взаимная замена не приводит к ошибкам загрузки или связывания

  • поведенческая: изменение считается поведенчески несовместимым, если одна и та же программа ведёт себя по-разному до и после его применения

Помните, что эти определения относятся только к Kotlin. Совместимость кода на Kotlin с точки зрения других языков (например, Java) выходит за рамки этого документа.

Язык и стандартная библиотека

Неожиданное поведение инфиксного оператора in и ConcurrentHashMap

Проблема: KT-18053

Компонент: ядро языка

Тип несовместимого изменения: исходный код

Краткое описание: в Kotlin 1.4 будет запрещено автоматическое использование оператора contains, предоставленного реализациями java.util.Map, написанными на Java

Цикл устаревания:

  • < 1.4: добавить предупреждение для проблемных операторов в месте вызова

  • >= 1.4: повысить это предупреждение до ошибки; -XXLanguage:-ProhibitConcurrentHashMapContains можно использовать для временного возврата к поведению до версии 1.4

Запретить доступ к защищённым членам из публичных inline-членов

Проблема: KT-21178

Компонент: ядро языка

Тип несовместимого изменения: исходный код

Краткое описание: в Kotlin 1.4 будет запрещён доступ к защищённым членам из публичных inline-членов.

Цикл устаревания:

  • < 1.4: добавить предупреждение в месте вызова для проблемных случаев

  • 1.4: повысить это предупреждение до ошибки; -XXLanguage:-ProhibitProtectedCallFromInline можно использовать для временного возврата к поведению до версии 1.4

Контракты при вызовах с неявными получателями

Проблема: KT-28672

Компонент: ядро языка

Тип несовместимого изменения: поведенческое

Краткое описание: в версии 1.4 умные приведения типов на основе контрактов будут доступны при вызовах с неявными получателями

Цикл устаревания:

  • < 1.4: прежнее поведение (подробности см. в описании проблемы)

  • >= 1.4: поведение изменено; -XXLanguage:-ContractsOnCallsWithImplicitReceiver можно использовать для временного возврата к поведению до версии 1.4

Непоследовательное поведение при сравнении чисел с плавающей точкой

Проблемы: KT-22723

Компонент: ядро языка

Тип несовместимого изменения: поведенческое

Краткое описание: начиная с Kotlin 1.4 компилятор Kotlin будет использовать стандарт IEEE 754 для сравнения чисел с плавающей точкой

Цикл устаревания:

  • < 1.4: прежнее поведение (подробности см. в описании проблемы)

  • >= 1.4: поведение изменено; -XXLanguage:-ProperIeee754Comparisons можно использовать для временного возврата к поведению до версии 1.4

Отсутствие умного приведения типа для последнего выражения в обобщённой лямбде

Проблема: KT-15020

Компонент: ядро языка

Тип несовместимого изменения: поведенческое

Краткое описание: начиная с версии 1.4 умные приведения типов для последних выражений в лямбдах будут применяться корректно

Цикл устаревания:

  • < 1.4: прежнее поведение (подробности см. в описании проблемы)

  • >= 1.4: поведение изменено; -XXLanguage:-NewInference можно использовать для временного возврата к поведению до версии 1.4. Обратите внимание, что этот флаг также отключит несколько новых возможностей языка.

Не полагайтесь на порядок аргументов-лямбд при приведении результата к Unit

Проблема: KT-36045

Компонент: ядро языка

Тип несовместимого изменения: исходный код

Краткое описание: начиная с Kotlin 1.4 аргументы-лямбды будут разрешаться независимо, без неявного приведения к Unit

Цикл устаревания:

  • < 1.4: прежнее поведение (подробности см. в описании проблемы)

  • >= 1.4: поведение изменено; -XXLanguage:-NewInference можно использовать для временного возврата к поведению до версии 1.4. Обратите внимание, что этот флаг также отключит несколько новых возможностей языка.

Неверный общий супертип для raw-типа и типа целочисленного литерала приводит к небезопасному коду

Проблема: KT-35681

Компоненты: ядро языка

Тип несовместимого изменения: исходный код

Краткое описание: начиная с Kotlin 1.4 общий супертип raw-типа Comparable и типа целочисленного литерала будет более конкретным

Цикл устаревания:

  • < 1.4: прежнее поведение (подробности см. в описании проблемы)

  • >= 1.4: поведение изменено; -XXLanguage:-NewInference можно использовать для временного возврата к поведению до версии 1.4. Обратите внимание, что этот флаг также отключит несколько новых возможностей языка.

Проблема типобезопасности из-за того, что несколько одинаковых переменных типа инстанцируются разными типами

Проблема: KT-35679

Компонент: ядро языка

Тип несовместимого изменения: исходный код

Краткое описание: начиная с Kotlin 1.4 компилятор Kotlin будет запрещать инстанцирование одинаковых переменных типа разными типами

Цикл устаревания:

  • < 1.4: прежнее поведение (подробности см. в описании проблемы)

  • >= 1.4: поведение изменено; -XXLanguage:-NewInference можно использовать для временного возврата к поведению до версии 1.4. Обратите внимание, что этот флаг также отключит несколько новых возможностей языка.

Проблема типобезопасности из-за некорректного отношения подтипов для типов-пересечений

Проблемы: KT-22474

Компонент: ядро языка

Тип несовместимого изменения: исходный код

Краткое описание: в Kotlin 1.4 отношение подтипов для типов-пересечений будет уточнено для более корректной работы

Цикл устаревания:

  • < 1.4: прежнее поведение (подробности см. в описании проблемы)

  • >= 1.4: поведение изменено; -XXLanguage:-NewInference можно использовать для временного возврата к поведению до версии 1.4. Обратите внимание, что этот флаг также отключит несколько новых возможностей языка.

Отсутствие несоответствия типов для пустого выражения when внутри лямбды

Проблема: KT-17995

Компонент: ядро языка

Тип несовместимого изменения: исходный код

Краткое описание: начиная с Kotlin 1.4 для пустого выражения when будет возникать несоответствие типов, если оно используется в качестве последнего выражения лямбды

Цикл устаревания:

  • < 1.4: прежнее поведение (подробности см. в описании проблемы)

  • >= 1.4: поведение изменено; -XXLanguage:-NewInference можно использовать для временного возврата к поведению до версии 1.4. Обратите внимание, что этот флаг также отключит несколько новых возможностей языка.

Для лямбды с ранним возвратом выводится тип Any, если среди возможных возвращаемых значений есть целочисленный литерал

Проблема: KT-20226

Компонент: ядро языка

Тип несовместимого изменения: исходный код

Краткое описание: начиная с Kotlin 1.4 в случаях с ранним возвратом для целочисленного типа, возвращаемого из лямбды, будет выводиться более конкретный тип

Цикл устаревания:

  • < 1.4: прежнее поведение (подробности см. в описании проблемы)

  • >= 1.4: поведение изменено; -XXLanguage:-NewInference можно использовать для временного возврата к поведению до версии 1.4. Обратите внимание, что этот флаг также отключит несколько новых возможностей языка.

Корректный захват проекций звёздочки с рекурсивными типами

Проблема: KT-33012

Компонент: ядро языка

Тип несовместимого изменения: исходный код

Краткое описание: начиная с Kotlin 1.4 будет применимо больше кандидатов, поскольку захват рекурсивных типов будет работать корректнее

Цикл устаревания:

  • < 1.4: прежнее поведение (подробности см. в описании проблемы)

  • >= 1.4: поведение изменено; -XXLanguage:-NewInference можно использовать для временного возврата к поведению до версии 1.4. Обратите внимание, что этот флаг также отключит несколько новых возможностей языка.

Вычисление общего супертипа для неподходящего и гибкого типов приводит к некорректным результатам

Проблема: KT-37054

Компонент: ядро языка

Тип несовместимого изменения: поведенческое

Краткое описание: начиная с Kotlin 1.4 общий супертип гибких типов будет более конкретным, что позволит защититься от ошибок во время выполнения

Цикл устаревания:

  • < 1.4: прежнее поведение (подробности см. в описании проблемы)

  • >= 1.4: поведение изменено; -XXLanguage:-NewInference можно использовать для временного возврата к поведению до версии 1.4. Обратите внимание, что этот флаг также отключит несколько новых возможностей языка.

Проблема типобезопасности из-за отсутствия преобразования захваченного типа для аргумента nullable-типа

Проблема: KT-35487

Компонент: ядро языка

Тип несовместимого изменения: исходный код

Краткое описание: начиная с Kotlin 1.4 отношение подтипов между захваченными и nullable-типами будет более корректным, что позволит защититься от ошибок во время выполнения

Цикл устаревания:

  • < 1.4: прежнее поведение (подробности см. в описании проблемы)

  • >= 1.4: поведение изменено; -XXLanguage:-NewInference можно использовать для временного возврата к поведению до версии 1.4. Обратите внимание, что этот флаг также отключит несколько новых возможностей языка.

Сохранение типа-пересечения для ковариантных типов после непроверенного приведения

Проблема: KT-37280

Компонент: ядро языка

Тип несовместимого изменения: исходный код

Краткое описание: начиная с Kotlin 1.4 непроверенные приведения ковариантных типов дают тип-пересечение для умных приведений типов, а не тип непроверенного приведения.

Цикл устаревания:

  • < 1.4: прежнее поведение (подробности см. в описании проблемы)

  • >= 1.4: поведение изменено; -XXLanguage:-NewInference можно использовать для временного возврата к поведению до версии 1.4. Обратите внимание, что этот флаг также отключит несколько новых возможностей языка.

Утечка переменной типа из вывода типов построителя при использовании выражения this

Проблема: KT-32126

Компонент: ядро языка

Тип несовместимого изменения: исходный код

Краткое описание: начиная с Kotlin 1.4 использование this внутри функций-построителей, таких как sequence {}, запрещено, если нет других подходящих ограничений

Цикл устаревания:

  • < 1.4: прежнее поведение (подробности см. в описании проблемы)

  • >= 1.4: поведение изменено; -XXLanguage:-NewInference можно использовать для временного возврата к поведению до версии 1.4. Обратите внимание, что этот флаг также отключит несколько новых возможностей языка.

Неверное разрешение перегрузки для контравариантных типов с nullable-аргументами типа

Проблема: KT-31670

Компонент: ядро языка

Тип несовместимого изменения: исходный код

Краткое описание: начиная с Kotlin 1.4, если две перегрузки функции, принимающей контравариантные аргументы типа, различаются только nullable-статусом типа (например, In<T> и In<T?>), более конкретным считается nullable-тип.

Цикл устаревания:

  • < 1.4: прежнее поведение (подробности см. в описании проблемы)

  • >= 1.4: поведение изменено; -XXLanguage:-NewInference можно использовать для временного возврата к поведению до версии 1.4. Обратите внимание, что этот флаг также отключит несколько новых возможностей языка.

Вывод типов построителя с нен вложенными рекурсивными ограничениями

Проблема: KT-34975

Компонент: ядро языка

Тип несовместимого изменения: исходный код

Краткое описание: начиная с Kotlin 1.4 функции-построители, такие как sequence {}, с типом, зависящим от рекурсивного ограничения внутри переданной лямбды, вызывают ошибку компилятора.

Цикл устаревания:

  • < 1.4: прежнее поведение (подробности см. в описании проблемы)

  • >= 1.4: поведение изменено; -XXLanguage:-NewInference можно использовать для временного возврата к поведению до версии 1.4. Обратите внимание, что этот флаг также отключит несколько новых возможностей языка.

Преждевременная фиксация переменной типа приводит к противоречивой системе ограничений

Проблема: KT-25175

Компонент: ядро языка

Тип несовместимого изменения: исходный код

Краткое описание: начиная с Kotlin 1.4 в некоторых случаях вывод типов будет выполняться менее поспешно, что позволит найти непротиворечивую систему ограничений.

Цикл устаревания:

  • < 1.4: прежнее поведение (подробности см. в описании проблемы)

  • >= 1.4: поведение изменено; -XXLanguage:-NewInference можно использовать для временного возврата к поведению до версии 1.4. Обратите внимание, что этот флаг также отключит несколько новых возможностей языка.

Запретить модификатор tailrec для открытых функций

Проблема: KT-18541

Компонент: ядро языка

Тип несовместимого изменения: исходный код

Краткое описание: начиная с Kotlin 1.4 функции не могут одновременно иметь модификаторы open и tailrec.

Цикл устаревания:

  • < 1.4: выдавать предупреждение для функций с обоими модификаторами: open и tailrec (в прогрессивном режиме — ошибку).

  • >= 1.4: повысить это предупреждение до ошибки.

Поле INSTANCE объекта-компаньона более видимо, чем сам класс объекта-компаньона

Проблема: KT-11567

Компонент: Kotlin/JVM

Тип несовместимого изменения: исходный код

Краткое описание: начиная с Kotlin 1.4, если объект-компаньон является приватным, его поле INSTANCE также будет приватным

Цикл устаревания:

  • < 1.4: компилятор генерирует объект INSTANCE с устаревшим флагом

  • >= 1.4: поле объекта-компаньона INSTANCE имеет правильную видимость

Внешний блок finally, вставленный перед return, не исключается из catch-интервала внутреннего блока try без finally

Проблема: KT-31923

Компонент: Kotlin/JVM

Тип несовместимого изменения: поведенческое

Краткое описание: начиная с Kotlin 1.4, catch-интервал будет правильно вычисляться для вложенных блоков try/catch

Цикл устаревания:

  • < 1.4: прежнее поведение (подробности см. в описании проблемы)

  • >= 1.4: поведение изменено; для временного возврата к поведению до версии 1.4 можно использовать -XXLanguage:-ProperFinally

Используйте упакованную версию inline-класса в качестве возвращаемого типа при ковариантных и специализированных для обобщённых типов переопределениях

Проблемы: KT-30419

Компонент: Kotlin/JVM

Тип несовместимого изменения: поведенческое

Краткое описание: начиная с Kotlin 1.4 функции с ковариантными и специализированными для обобщённых типов переопределениями будут возвращать упакованные значения inline-классов

Цикл устаревания:

  • < 1.4: прежнее поведение (подробности см. в описании проблемы)

  • >= 1.4: поведение изменено

Не объявляйте проверяемые исключения в байт-коде JVM при делегировании интерфейсам Kotlin

Проблема: KT-35834

Компонент: Kotlin/JVM

Тип несовместимого изменения: исходный код

Краткое описание: в Kotlin 1.4 проверяемые исключения не будут генерироваться при делегировании интерфейсам Kotlin

Цикл устаревания:

  • < 1.4: прежнее поведение (подробности см. в описании проблемы)

  • >= 1.4: поведение изменено; для временного возврата к поведению до версии 1.4 можно использовать -XXLanguage:-DoNotGenerateThrowsForDelegatedKotlinMembers

Изменено поведение сигнатурно-полиморфных вызовов методов с единственным параметром vararg, чтобы избежать упаковки аргумента в другой массив

Проблема: KT-35469

Компонент: Kotlin/JVM

Тип несовместимого изменения: исходный код

Краткое описание: в Kotlin 1.4 аргумент сигнатурно-полиморфного вызова не будет упаковываться в другой массив

Цикл устаревания:

  • < 1.4: прежнее поведение (подробности см. в описании проблемы)

  • >= 1.4: поведение изменено

Некорректная обобщённая сигнатура в аннотациях, когда KClass используется в качестве параметра обобщённого типа

Проблема: KT-35207

Компонент: Kotlin/JVM

Тип несовместимого изменения: исходный код

Краткое описание: в Kotlin 1.4 будет исправлено некорректное сопоставление типов в аннотациях, когда KClass используется в качестве параметра обобщённого типа

Цикл устаревания:

  • < 1.4: прежнее поведение (подробности см. в описании проблемы)

  • >= 1.4: поведение изменено

Запретить оператор распаковки в сигнатурно-полиморфных вызовах

Проблема: KT-35226

Компонент: Kotlin/JVM

Тип несовместимого изменения: исходный код

Краткое описание: в Kotlin 1.4 будет запрещено использовать оператор распаковки (*) в сигнатурно-полиморфных вызовах

Цикл устаревания:

  • < 1.4: выдавать предупреждение при использовании оператора распаковки в сигнатурно-полиморфных вызовах

  • >= 1.5: повысить уровень этого предупреждения до ошибки; для временного возврата к поведению до версии 1.4 можно использовать -XXLanguage:-ProhibitSpreadOnSignaturePolymorphicCall

Изменить порядок инициализации значений по умолчанию для оптимизированных хвосторекурсивных функций

Проблема: KT-31540

Компонент: Kotlin/JVM

Тип несовместимого изменения: поведенческое

Краткое описание: начиная с Kotlin 1.4 порядок инициализации хвосторекурсивных функций будет таким же, как у обычных функций

Цикл устаревания:

  • < 1.4: выдавать предупреждение в месте объявления проблемных функций

  • >= 1.4: поведение изменено; для временного возврата к поведению до версии 1.4 можно использовать -XXLanguage:-ProperComputationOrderOfTailrecDefaultParameters

Не генерировать атрибут ConstantValue для val, не являющихся const

Проблема: KT-16615

Компонент: Kotlin/JVM

Тип несовместимого изменения: поведенческое

Краткое описание: начиная с Kotlin 1.4 компилятор не будет генерировать атрибут ConstantValue для val, не являющихся const

Цикл устаревания:

  • < 1.4: выдавать предупреждение с помощью инспекции IntelliJ IDEA

  • >= 1.4: поведение изменено; для временного возврата к поведению до версии 1.4 можно использовать -XXLanguage:-NoConstantValueAttributeForNonConstVals

Сгенерированные перегрузки для @JvmOverloads у открытых методов должны быть final

Проблема: KT-33240

Компоненты: Kotlin/JVM

Тип несовместимого изменения: исходный код

Краткое описание: перегрузки функций с @JvmOverloads будут генерироваться как final

Цикл устаревания:

  • < 1.4: прежнее поведение (подробности см. в описании проблемы)

  • >= 1.4: поведение изменено; для временного возврата к поведению до версии 1.4 можно использовать -XXLanguage:-GenerateJvmOverloadsAsFinal

Лямбды, возвращающие kotlin.Result, теперь возвращают упакованное значение вместо распакованного

Проблема: KT-39198

Компонент: Kotlin/JVM

Тип несовместимого изменения: поведенческое

Краткое описание: начиная с Kotlin 1.4 лямбды, возвращающие значения типа kotlin.Result, будут возвращать упакованные значения вместо распакованных

Цикл устаревания:

  • < 1.4: прежнее поведение (подробности см. в описании проблемы)

  • >= 1.4: поведение изменено

Унифицировать исключения при проверках на null

Проблема: KT-22275

Компонент: Kotlin/JVM

Тип несовместимого изменения: поведенческое

Краткое описание: начиная с Kotlin 1.4 все проверки на null во время выполнения будут выбрасывать java.lang.NullPointerException

Цикл устаревания:

  • < 1.4: проверки на null во время выполнения выбрасывают разные исключения, например KotlinNullPointerException, IllegalStateException, IllegalArgumentException и TypeCastException

  • >= 1.4: все проверки на null во время выполнения выбрасывают java.lang.NullPointerException. Для временного возврата к поведению до версии 1.4 можно использовать -Xno-unified-null-checks

Сравнение чисел с плавающей точкой в операциях contains, indexOf и lastIndexOf для массивов и списков: IEEE 754 или полный порядок

Проблема: KT-28753

Компонент: kotlin-stdlib (JVM)

Тип несовместимого изменения: поведенческое

Краткое описание: реализация List, возвращаемая из Double/FloatArray.asList(), будет реализовывать contains, indexOf и lastIndexOf, чтобы они использовали равенство при полном порядке

Цикл устаревания:

  • < 1.4: прежнее поведение (подробности см. в описании проблемы)

  • >= 1.4: поведение изменено

Постепенно изменить возвращаемый тип функций min и max для коллекций на ненулевой

Проблема: KT-38854

Компонент: kotlin-stdlib (JVM)

Тип несовместимого изменения: исходный код

Краткое описание: в версии 1.6 возвращаемый тип функций коллекций min и max будет изменён на ненулевой

Цикл устаревания:

  • 1.4: добавить функции ...OrNull в качестве синонимов и объявить затронутый API устаревшим (подробности см. в описании проблемы)

  • 1.5.x: повысить уровень устаревания затронутого API до ошибки

  • >=1.6: повторно добавить затронутый API, но с ненулевым возвращаемым типом

Объявить appendln устаревшим в пользу appendLine

Проблема: KT-38754

Компонент: kotlin-stdlib (JVM)

Тип несовместимого изменения: исходный код

Краткое описание: StringBuilder.appendln() будет объявлена устаревшей в пользу StringBuilder.appendLine()

Цикл устаревания:

  • 1.4: добавить функцию appendLine в качестве замены appendln и объявить appendln устаревшей

  • >=1.5: повысить уровень устаревания до ошибки

Объявить устаревшими преобразования типов с плавающей точкой в Short и Byte

Проблема: KT-30360

Компонент: kotlin-stdlib (JVM)

Тип несовместимого изменения: исходный код

Краткое описание: начиная с Kotlin 1.4 преобразования типов с плавающей точкой в Short и Byte будут объявлены устаревшими

Цикл устаревания:

  • 1.4: объявить Double.toShort()/toByte() и Float.toShort()/toByte() устаревшими и предложить замену

  • >=1.5: повысить уровень устаревания до ошибки

Немедленно сообщать об ошибке в Regex.findAll при недопустимом startIndex

Проблема: KT-28356

Компонент: kotlin-stdlib

Тип несовместимого изменения: поведенческое

Краткое описание: начиная с Kotlin 1.4 функция findAll будет проверять, что startIndex входит в диапазон допустимых индексов позиций входной последовательности символов при вызове findAll, и выбрасывать IndexOutOfBoundsException, если это не так

Цикл устаревания:

  • < 1.4: прежнее поведение (подробности см. в описании проблемы)

  • >= 1.4: поведение изменено

Удалить устаревший kotlin.coroutines.experimental

Проблема: KT-36083

Компонент: kotlin-stdlib

Тип несовместимого изменения: исходный код

Краткое описание: начиная с Kotlin 1.4 устаревший API kotlin.coroutines.experimental удалён из stdlib

Цикл устаревания:

  • < 1.4: kotlin.coroutines.experimental объявлен устаревшим с уровнем ERROR

  • >= 1.4: kotlin.coroutines.experimental удалён из stdlib. Для JVM предоставляется отдельный артефакт совместимости (подробности см. в описании проблемы).

Удалить устаревший оператор mod

Проблема: KT-26654

Компонент: kotlin-stdlib

Тип несовместимого изменения: исходный код

Краткое описание: начиная с Kotlin 1.4 оператор mod для числовых типов удалён из stdlib

Цикл устаревания:

  • < 1.4: mod объявлен устаревшим с уровнем ERROR

  • >= 1.4: mod удалён из stdlib

Скрыть метод-член Throwable.addSuppressed и предпочесть ему функцию-расширение

Проблема: KT-38777

Компонент: kotlin-stdlib

Тип несовместимого изменения: поведенческое

Краткое описание: теперь предпочтение отдаётся функции-расширению Throwable.addSuppressed(), а не методу-члену Throwable.addSuppressed()

Цикл устаревания:

  • < 1.4: прежнее поведение (подробности см. в описании проблемы)

  • >= 1.4: поведение изменено

Функция capitalize должна преобразовывать диграфы в регистр заголовка

Проблема: KT-38817

Компонент: kotlin-stdlib

Тип несовместимого изменения: поведенческое

Краткое описание: функция String.capitalize() теперь переводит диграфы сербско-хорватского латинского алфавита Гая (сербско-хорватский латинский алфавит Гая) в регистр заголовка (Dž вместо DŽ)

Цикл устаревания:

  • < 1.4: диграфы переводятся в верхний регистр (DŽ)

  • >= 1.4: диграфы переводятся в регистр заголовка (Dž)

Инструменты

Аргументы компилятора с символами-разделителями в Windows необходимо заключать в двойные кавычки

Проблема: KT-41309

Компонент: CLI

Тип несовместимого изменения: поведенческое

Краткое описание: в Windows аргументы kotlinc.bat, содержащие символы-разделители (пробелы, =, ;, ,), теперь необходимо заключать в двойные кавычки (")

Цикл устаревания:

  • < 1.4: все аргументы компилятора передаются без кавычек

  • >= 1.4: аргументы компилятора, содержащие символы-разделители (пробелы, =, ;, ,), необходимо заключать в двойные кавычки (")

KAPT: изменились имена синтетических методов $annotations() для свойств

Проблема: KT-36926

Компонент: KAPT

Тип несовместимого изменения: поведенческое

Краткое описание: в версии 1.4 изменились имена синтетических методов $annotations(), генерируемых KAPT для свойств

Цикл устаревания:

  • < 1.4: имена синтетических методов $annotations() для свойств соответствуют шаблону <propertyName>@annotations()

  • >= 1.4: имена синтетических методов $annotations() для свойств включают префикс get: get<PropertyName>@annotations()

26 мая 2025
Что нового в Kotlin 1.4.0Что нового в Kotlin 1.3

© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/compatibility-guide-14.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API