Spec-Zone.ru › Kotlin 2

Руководство по совместимости для Kotlin 1.7.0

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

Хотя об изменениях языка уже сообщалось в других источниках, например в журналах изменений обновлений или предупреждениях компилятора, в этом документе собраны все изменения. Он представляет собой полное руководство по миграции с Kotlin 1.6 на Kotlin 1.7.

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

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

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

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

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

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

Язык

Результат безопасного вызова всегда будет nullable

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

Компонент: основной язык

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

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

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

  • <1.3: выдавать предупреждение при ненужном безопасном вызове для получателей, не допускающих null

  • 1.6.20: дополнительно предупреждать, что тип результата ненужного безопасного вызова изменится в следующей версии

  • 1.7.0: изменить тип результата безопасного вызова на nullable,
    -XXLanguage:-SafeCallsAreAlwaysNullable можно использовать для временного возврата к поведению до версии 1.7

Запретить делегирование вызовов super абстрактному члену суперкласса

Проблемы: KT-45508, KT-49017, KT-38078

Компонент: основной язык

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

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

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

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

  • 1.7.0: выдавать ошибку, если вызов super фактически обращается к абстрактному члену суперкласса

  • 1.7.0: выдавать ошибку, если включены режимы совместимости -Xjvm-default=all или -Xjvm-default=all-compatibility; в прогрессивном режиме выдавать ошибку

  • >=1.8.0: выдавать ошибку во всех случаях

Запретить раскрытие непубличных типов через публичные свойства, объявленные в непубличном первичном конструкторе

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

Компонент: основной язык

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

Краткое описание: Kotlin запретит объявлять публичные свойства с непубличными типами в приватном первичном конструкторе. Доступ к таким свойствам из другого пакета может привести к IllegalAccessError

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

  • 1.3.20: выдавать предупреждение для публичного свойства с непубличным типом, объявленного в непубличном конструкторе

  • 1.6.20: в прогрессивном режиме повысить уровень этого предупреждения до ошибки

  • 1.7.0: повысить уровень этого предупреждения до ошибки

Запретить доступ к неинициализированным элементам enum с указанием имени enum

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

Компонент: основной язык

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

Краткое описание: в Kotlin 1.7 будет запрещен доступ к неинициализированным элементам enum из блока статической инициализации enum, если они указаны с именем enum

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

  • 1.7.0: выдавать ошибку при доступе к неинициализированным элементам enum из блока статической инициализации enum

Запретить вычисление константных значений сложных логических выражений в ветвях условий when и условиях циклов

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

Компонент: основной язык

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

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

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

  • 1.5.30: выдавать предупреждение, если исчерпывающий разбор when или достижимость потока управления определяется на основании сложного константного логического выражения в условии ветви или цикла when

  • 1.7.0: повысить уровень этого предупреждения до ошибки

По умолчанию требовать исчерпывающий разбор в выражениях when с типами enum, sealed и Boolean

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

Компонент: основной язык

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

Краткое описание: в Kotlin 1.7 будет выдаваться ошибка, если выражение when с типом enum, sealed или Boolean не является исчерпывающим

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

  • 1.6.0: выдавать предупреждение, если выражение when с типом enum, sealed или Boolean не является исчерпывающим (в прогрессивном режиме — ошибку)

  • 1.7.0: повысить уровень этого предупреждения до ошибки

Устаревание неоднозначных грамматических конструкций в when с выражением subject

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

Компонент: основной язык

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

Краткое описание: в Kotlin 1.6 устарели несколько неоднозначных грамматических конструкций в выражениях условий when

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

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

  • 1.8.0: повысить уровень этого предупреждения до ошибки

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

Улучшения расширения nullability типов

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

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

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

Краткое описание: в Kotlin 1.7 изменится загрузка и интерпретация аннотаций nullability типов в коде Java

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

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

  • 1.7.0: точнее определять nullability типов Java; -XXLanguage:-TypeEnhancementImprovementsInStrictMode можно использовать для временного возврата к поведению до версии 1.7

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

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

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

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

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

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

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

  • 1.5.30: исправить поведение приведения в сгенерированных аксессорах делегатов свойств; -Xuse-old-backend можно использовать для временного возврата к поведению до исправления в версии 1.5.30

  • >= 1.7.20: исправить поведение приведения в других затронутых случаях

Устаревание режимов enable и compatibility параметра компилятора -Xjvm-default

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

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

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

Краткое описание: в Kotlin 1.6.20 выдается предупреждение об использовании режимов enable и compatibility параметра компилятора -Xjvm-default

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

  • 1.6.20: выдавать предупреждение для режимов enable и compatibility параметра компилятора -Xjvm-default

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

Запретить вызовы функций с именем suspend и завершающей лямбдой

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

Компонент: основной язык

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

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

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

  • 1.3.0: выдавать предупреждение при вызове таких функций

  • 1.6.0: повысить уровень этого предупреждения до ошибки

  • 1.7.0: изменить грамматику языка, чтобы suspend перед { разбиралось как ключевое слово

Запретить умное приведение свойства базового класса, если базовый класс находится в другом модуле

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

Компонент: основной язык

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

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

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

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

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

Не игнорировать значимые ограничения при выводе типов

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

Компонент: основной язык

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

Краткое описание: в Kotlin 1.4–1.6 некоторые ограничения типов игнорировались при выводе типов из-за некорректной оптимизации. Это могло позволить написать некорректный код и привести к ClassCastException во время выполнения. Kotlin 1.7 учитывает эти ограничения и тем самым запрещает такой код

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

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

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

Стандартная библиотека

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

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

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

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

Краткое описание: в Kotlin 1.7 тип возвращаемого значения функций min и max для коллекций будет изменен на non-nullable

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

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

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

  • 1.6.0: скрыть устаревшие функции из публичного API

  • 1.7.0: повторно добавить затронутый API, но с типом возвращаемого значения non-nullable

Устаревание функций для массивов с плавающей точкой: contains, indexOf, lastIndexOf

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

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

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

Краткое описание: Kotlin объявляет устаревшими функции для массивов с плавающей точкой contains, indexOf, lastIndexOf, которые сравнивают значения в соответствии с порядком IEEE-754, а не полным порядком

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

  • 1.4.0: объявить затронутые функции устаревшими с предупреждением

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

  • 1.7.0: скрыть устаревшие функции из публичного API

Перенос объявлений из пакетов kotlin.dom и kotlin.browser в kotlinx.*

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

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

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

Краткое описание: объявления из пакетов kotlin.dom и kotlin.browser перемещены в соответствующие пакеты kotlinx.* для подготовки к их выделению из stdlib

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

  • 1.4.0: добавить заменяющий API в пакеты kotlinx.dom и kotlinx.browser

  • 1.4.0: объявить API в пакетах kotlin.dom и kotlin.browser устаревшим и предложить новый API выше в качестве замены

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

  • >= 1.8: удалить устаревшие функции из stdlib

  • >= 1.8: переместить API из пакетов kotlinx.* в отдельную библиотеку

Устаревание некоторых API, доступных только в JS

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

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

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

Краткое описание: ряд функций stdlib, доступных только в JS, объявляются устаревшими и будут удалены. Среди них: String.concat(String), String.match(regex: String), String.matches(regex: String), а также функции sort для массивов, принимающие функцию сравнения, например Array<out T>.sort(comparison: (a: T, b: T) -> Int)

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

  • 1.6.0: объявить затронутые функции устаревшими с предупреждением

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

  • 1.9.0: удалить устаревшие функции из публичного API

Инструменты

Удаление класса KotlinGradleSubplugin

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

Компонент: Gradle

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

Краткое описание: удалить класс KotlinGradleSubplugin. Вместо него используйте класс KotlinCompilerPluginSupportPlugin

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

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

  • 1.7.0: удалить устаревший класс

Удаление параметра компилятора useIR

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

Компонент: Gradle

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

Краткое описание: удалить устаревший и скрытый параметр компилятора useIR

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

  • 1.5.0: повысить уровень устаревания до предупреждения

  • 1.6.0: скрыть параметр

  • 1.7.0: удалить устаревший параметр

Устаревание свойства Gradle kapt.use.worker.api

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

Компонент: Gradle

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

Краткое описание: признать устаревшим свойство kapt.use.worker.api, которое позволяло запускать kapt через Gradle Workers API (значение по умолчанию: true)

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

  • 1.6.20: повысить уровень устаревания до предупреждения

  • >= 1.8.0: удалить это свойство

Удаление параметра Gradle DSL kotlin.experimental.coroutines и свойства Gradle kotlin.coroutines

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

Компонент: Gradle

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

Краткое описание: удалить параметр Gradle DSL kotlin.experimental.coroutines и свойство kotlin.coroutines

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

  • 1.6.20: повысить уровень устаревания до предупреждения

  • 1.7.0: удалить параметр DSL, содержащий его блок experimental и свойство

Устаревание параметра компилятора useExperimentalAnnotation

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

Компонент: Gradle

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

Краткое описание: удалить скрытую функцию Gradle useExperimentalAnnotation(), которая использовалась для включения возможности использовать API в модуле. Вместо неё можно использовать функцию optIn()

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

  • 1.6.0: скрыть параметр устаревания

  • 1.7.0: удалить устаревший параметр

Устаревание системного свойства kotlin.compiler.execution.strategy

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

Компонент: Gradle

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

Краткое описание: признать устаревшим системное свойство kotlin.compiler.execution.strategy, используемое для выбора стратегии выполнения компилятора. Вместо него используйте свойство Gradle kotlin.compiler.execution.strategy или свойство задачи компиляции compilerExecutionStrategy

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

  • 1.7.0: повысить уровень устаревания до предупреждения

  • > 1.7.0: удалить свойство

Удаление параметра компилятора kotlinOptions.jdkHome

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

Компонент: Gradle

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

Краткое описание: удалить параметр компилятора kotlinOptions.jdkHome, который использовался для добавления пользовательского JDK из указанного расположения в classpath вместо JDK по умолчанию JAVA_HOME. Вместо него используйте цепочки инструментов Java

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

  • 1.5.30: повысить уровень устаревания до предупреждения

  • > 1.7.0: удалить параметр

Удаление параметра компилятора noStdlib

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

Компонент: Gradle

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

Краткое описание: удалить параметр компилятора noStdlib. Плагин Gradle использует свойство kotlin.stdlib.default.dependency=true, чтобы управлять наличием стандартной библиотеки Kotlin

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

  • 1.5.0: повысить уровень устаревания до предупреждения

  • 1.7.0: удалить параметр

Удаление плагинов kotlin2js и kotlin-dce-plugin

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

Компонент: Gradle

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

Краткое описание: удалить плагины kotlin2js и kotlin-dce-plugin. Вместо kotlin2js используйте новый плагин org.jetbrains.kotlin.js. Удаление неиспользуемого кода (DCE) работает при правильной настройке плагина Kotlin/JS для Gradle

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

  • 1.4.0: повысить уровень устаревания до предупреждения

  • 1.7.0: удалить плагины

Изменения в задачах компиляции

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

Компонент: Gradle

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

Краткое описание: задачи компиляции Kotlin больше не наследуют задачу Gradle AbstractCompile, поэтому входные данные sourceCompatibility и targetCompatibility больше недоступны в скриптах пользователей Kotlin. Входные данные SourceTask.stableSources больше недоступны. Входные данные sourceFilesExtensions удалены. Устаревший выходной параметр Gradle destinationDir: File заменён выходным параметром destinationDirectory: DirectoryProperty. Свойство classpath задачи KotlinCompile признано устаревшим

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

  • 1.7.0: входные данные недоступны, выходной параметр заменён, свойство classpath признано устаревшим

26 мая 2025 г.
Руководство по совместимости для Kotlin 1.7.20Что нового в Kotlin 1.6.20

© 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-17.html

Spec-Zone.ru

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