Spec-Zone.ru › Kotlin 2

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

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

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

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

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

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

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

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

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

Язык

Отказ от поддержки -language-version для версий 1.8 и 1.9

Проблема: KT-76343, KT-76344.

Компонент: компилятор

Тип несовместимого изменения: исходная совместимость

Краткое описание: начиная с Kotlin 2.3 компилятор больше не поддерживает -language-version=1.8. Поддержка -language-version=1.9 также прекращена для платформ, отличных от JVM.

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

  • 2.2.0: выдавать предупреждение при использовании -language-version с версиями 1.8 и 1.9

  • 2.3.0: повысить предупреждение до ошибки для -language-version с версией 1.8 на всех платформах и с версией 1.9 на платформах, отличных от JVM

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

Проблема: KTLC-287

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

Тип несовместимого изменения: исходная совместимость

Краткое описание: ранее компилятор никогда не выдавал ошибки о нарушении ограничений верхней границы для выведенных типов. В Kotlin 2.3.0 это исправлено: теперь ошибка последовательно выдается для всех параметров типа.

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

  • 2.2.20: выдавать предупреждения об устаревании при нарушении границ неявными аргументами типа

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

Запретить аннотацию @JvmSerializableLambda для лямбд inline и crossinline

Проблема: KTLC-9

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

Тип несовместимого изменения: исходная совместимость

Краткое описание: теперь нельзя применять аннотацию @JvmSerializableLambda к лямбдам inline или crossinline. Эти лямбды не сериализуемы, поэтому применение @JvmSerializableLambda не давало эффекта.

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

  • 2.1.20: выдавать предупреждение при применении @JvmSerializableLambda к лямбдам inline и crossinline

  • 2.3.0: повысить предупреждение до ошибки; это изменение можно включить в прогрессивном режиме

Запретить делегирование интерфейса Kotlin классу Java, если обобщенные сигнатуры не совпадают

Проблема: KTLC-267

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

Тип несовместимого изменения: исходная совместимость

Краткое описание: Kotlin 2.3.0 запрещает делегирование классу Java, который реализует метод обобщенного интерфейса с помощью необобщенного переопределения. Ранее такое поведение могло приводить к несовпадению типов и к возникновению ClassCastException во время выполнения. Теперь ошибка возникает во время компиляции, а не выполнения.

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

  • 2.1.20: выдавать предупреждение

  • 2.3.0: повысить предупреждение до ошибки

Устаревшее использование return в функциях с телом-выражением без явно указанного типа возвращаемого значения

Проблема: KTLC-288

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

Тип несовместимого изменения: исходная совместимость

Краткое описание: в Kotlin использование return внутри тел-выражений теперь считается устаревшим, если тип возвращаемого значения функции не объявлен явно.

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

  • 2.3.0: выдавать предупреждение

  • 2.4.0: повысить предупреждение до ошибки

Запретить наследование от nullable-супертипов, введенных через псевдоним типа

Проблема: KTLC-279

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

Тип несовместимого изменения: исходная совместимость

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

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

  • 2.2.0: выдавать предупреждение

  • 2.3.0: повысить предупреждение до ошибки

Унифицировать генерацию обобщенных сигнатур для лямбд верхнего уровня и аргументов вызова

Проблема: KTLC-277

Компонент: рефлексия

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

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

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

  • 2.3.0: введено новое поведение; неприменимо в прогрессивном режиме

Запретить вывод reified-параметров типа как типов-пересечений

Проблема: KTLC-13

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

Тип несовместимого изменения: исходная совместимость

Краткое описание: в Kotlin 2.3.0 запрещены случаи, когда reified-параметр типа выводится как тип-пересечение, поскольку это может привести к некорректному поведению во время выполнения.

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

  • 2.1.0: выдавать предупреждение, если reified-параметр типа выводится как тип-пересечение

  • 2.3.0: повысить предупреждение до ошибки

Запретить раскрытие менее видимых типов через ограничения параметров типа

Проблема: KTLC-275

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

Тип несовместимого изменения: исходная совместимость

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

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

  • 2.1.0: выдавать предупреждение для проблемного ограничения параметра типа

  • 2.3.0: повысить предупреждение до ошибки

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

Устаревшие преобразования Char в число и новые явные API для получения цифры и кода

Проблема: KTLC-321

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

Тип несовместимого изменения: исходная совместимость

Краткое описание: в Kotlin 2.3.0 преобразования Char.toX() и X.toChar() для числовых типов объявлены устаревшими. Добавлены новые явные API для получения кода символа и значения цифры.

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

  • 1.4.30: добавить новые функции в статусе Experimental

  • 1.5.0: перевести новые функции в статус Stable; выдавать предупреждения для старых функций с рекомендациями по замене

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

Устаревшая функция Number.toChar()

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

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

Тип несовместимого изменения: исходная совместимость

Краткое описание: функция Number.toChar() объявлена устаревшей. Вместо нее используйте toInt().toChar() или конструктор Char.

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

  • 1.9.0: выдавать предупреждение при использовании функции Number.toChar()

  • 2.3.0: повысить предупреждение до ошибки

Устаревшая функция String.subSequence(start, end)

Проблема: KTLC-282

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

Тип несовместимого изменения: исходная совместимость

Краткое описание: функция String.subSequence(start, end) объявлена устаревшей. Вместо нее используйте функцию String.subSequence(startIndex, endIndex).

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

  • 1.0: выдавать предупреждение при использовании String.subSequence(start, end)

  • 2.3.0: повысить предупреждение до ошибки

Устаревшие функции kotlin.io.createTempDirectory() и kotlin.io.createTempFile()

Проблема: KTLC-281

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

Тип несовместимого изменения: исходная совместимость

Краткое описание: функции kotlin.io.createTempDirectory() и kotlin.io.createTempFile() объявлены устаревшими. Вместо них используйте функции kotlin.io.path.createTempDirectory() и kotlin.io.path.createTempFile().

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

  • 1.4.20: выдавать предупреждение при использовании функций kotlin.io.createTempDirectory() и kotlin.io.createTempFile()

  • 2.3.0: повысить предупреждение до ошибки

Скрыть функцию InputStream.readBytes(Int)

Проблема: KTLC-280

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

Тип несовместимого изменения: исходная совместимость

Краткое описание: после длительного периода устаревания функция InputStream.readBytes(estimatedSize: Int = DEFAULT_BUFFER_SIZE): ByteArray теперь скрыта.

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

  • 1.3.0: выдавать предупреждение

  • 1.5.0: повысить предупреждение до ошибки

  • 2.3.0: скрыть функцию

Унифицировать вывод трассировки стека Kotlin/Native с другими платформами

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

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

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

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

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

  • 2.3.20: привести форматирование трассировки стека исключений в Kotlin/Native в соответствие с другими платформами Kotlin

Исправить поведение Iterable<T>.intersect() и Iterable<T>.subtract()

Проблема: KTLC-268

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

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

Краткое описание: функции Iterable<T>.intersect() и Iterable<T>.subtract() теперь проверяют принадлежность каждого элемента получателя перед его добавлением в результирующее множество. Результирующее множество сравнивает элементы с помощью Any::equals, обеспечивая правильный результат, даже если в коллекции-аргументе используется ссылочное равенство (например, IdentityHashMap.keys).

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

  • 2.3.0: включить новое поведение

Инструменты

Предупреждение о неподдерживаемой версии KGP при использовании плагинов kotlin-dsl и kotlin("jvm")

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

Компонент: Gradle

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

Краткое описание: В Kotlin 2.3, если в проекте Gradle используются оба плагина: kotlin-dsl и kotlin("jvm"), может появиться предупреждение Gradle о неподдерживаемой версии плагина Kotlin для Gradle (KGP).

Действия по миграции:

В целом мы не рекомендуем использовать плагины kotlin-dsl и kotlin("jvm") в одном проекте Gradle. Такая конфигурация не поддерживается.

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

  1. Не применяйте плагин kotlin("jvm") явно. Вместо этого позвольте плагину kotlin-dsl автоматически предоставить совместимую версию KGP.

  2. Если вы хотите явно применить плагин kotlin("jvm"), используйте константу embeddedKotlinVersion, чтобы указать встроенную версию Kotlin.

    Чтобы обновить встроенную версию Kotlin и версию языка, обновите версию Gradle. Совместимые версии Gradle можно найти в примечаниях Gradle о совместимости с Kotlin.

  3. Не используйте плагин kotlin-dsl. Он может быть более подходящим для бинарных плагинов, не привязанных к определённой версии Gradle.

В крайнем случае можно настроить проект на использование версии языка 2.1 или выше, которая переопределяет конфликтующее поведение плагина kotlin-dsl. Однако мы настоятельно не рекомендуем этого делать.

Если при миграции возникнут трудности, обратитесь за помощью в канал #gradle в нашем Slack.

Этапы отказа от поддержки:

  • 2.3.0: добавлена диагностика, выявляющая использование плагина kotlin-dsl с несовместимой версией языка или API компилятора

Отказ от поддержки плагина kotlin-android для версий AGP 9.0.0 и выше

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

Компонент: Gradle

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

Краткое описание: В Kotlin 2.3.0 плагин org.jetbrains.kotlin.android объявлен устаревшим при использовании версии Android Gradle plugin (AGP) 9.0.0 или выше. Начиная с AGP 9.0.0, AGP предоставляет встроенную поддержку Kotlin, поэтому плагин kotlin-android больше не требуется.

Этапы отказа от поддержки:

  • 2.3.0: выводится предупреждение при использовании плагина kotlin-android с AGP версии 9.0.0 или выше, если для свойств Gradle android.builtInKotlin и android.newDsl=false задано значение false

Отказ от поддержки конфигурации testApi

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

Компонент: Gradle

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

Краткое описание: В Kotlin 2.3.0 конфигурация testApi объявлена устаревшей. Эта конфигурация предоставляла другим модулям тестовые зависимости и исходный код, но Gradle не поддерживает такое поведение.

Варианты миграции: замените все вхождения testApi() на testImplementation() и сделайте то же самое для других вариантов. Например, замените kotlin.sourceSets.commonTest.dependencies.api() на kotlin.sourceSets.commonTest.dependencies.implementation().

Для проектов Kotlin/JVM рассмотрите возможность использования тестовых фикстур Gradle. Если вы хотите, чтобы поддержка тестовых фикстур появилась в многоплатформенных проектах, расскажите о своём варианте использования в YouTrack.

Этапы отказа от поддержки:

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

Отказ от поддержки функции createTestExecutionSpec()

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

Компонент: Gradle

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

Краткое описание: В Kotlin 2.3.0 функция createTestExecutionSpec() в интерфейсе KotlinJsTestFramework объявлена устаревшей, так как больше не используется.

Этапы отказа от поддержки:

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

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

  • 2.4.0: функция удаляется

Удаление функций closureTo(), createResultSet() и KotlinToolingVersionOrNull()

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

Компонент: Gradle

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

Краткое описание: В Kotlin 2.3.0 из DSL closure удаляются функции closureTo() и createResultSet(), так как они больше не используются. Кроме того, удаляется функция KotlinToolingVersionOrNull(). Вместо неё используйте функцию KotlinToolingVersion().

Этапы отказа от поддержки:

  • 1.7.20: выводится ошибка

  • 2.3.0: функции удаляются

Отказ от поддержки API ExtrasProperty

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

Компонент: Gradle

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

Краткое описание: API ExtrasProperty, который был объявлен устаревшим начиная с Kotlin 2.0.0, теперь стал внутренним в Kotlin 2.3.0. В качестве альтернативы используйте API ExtraPropertiesExtension Gradle.

Этапы отказа от поддержки:

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

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

  • 2.3.0: API становится внутренним

Отказ от поддержки HasKotlinDependencies в KotlinCompilation

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

Компонент: Gradle

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

Краткое описание: В Kotlin 2.3.0 интерфейс HasKotlinDependencies в KotlinCompilation объявлен устаревшим. API, связанные с зависимостями, теперь доступны через интерфейс KotlinSourceSet.

Этапы отказа от поддержки:

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

Отказ от поддержки внутренних функций и свойств менеджеров пакетов npm и Yarn

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

Компонент: Gradle

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

Краткое описание: Следующие функции и свойства, связанные с менеджерами пакетов npm и Yarn, объявлены устаревшими:

  • CompositeDependency.dependencyName, CompositeDependency.dependencyVersion, CompositeDependency.includedBuildDir.

  • KotlinNpmInstallTask.Companion.NAME.

  • LockCopyTask.Companion.STORE_PACKAGE_LOCK_NAME, LockCopyTask.Companion.RESTORE_PACKAGE_LOCK_NAME, LockCopyTask.Companion.UPGRADE_PACKAGE_LOCK.

  • Npm.npmExec().

  • NpmProject.require(), NpmProject.useTool().

  • PublicPackageJsonTask.jsIrCompilation.

  • YarnBasics.yarnExec().

  • YarnPlugin.Companion.STORE_YARN_LOCK_NAME, YarnPlugin.Companion.RESTORE_YARN_LOCK_NAME, YarnPlugin.Companion.UPGRADE_YARN_LOCK.

  • YarnSetupTask.Companion.NAME.

Этапы отказа от поддержки:

  • 2.2.0 и 2.2.20: при использовании этих функций или свойств выводятся предупреждения

  • 2.3.0: предупреждения повышаются до ошибок

  • 2.4.0: функции и свойства удаляются

Отказ от поддержки PhantomJS

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

Компонент: Gradle

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

Краткое описание: Поскольку PhantomJS больше не поддерживается, в Kotlin 2.3.0 свойство karmaPhantomjsLauncher в API NpmVersions объявлено устаревшим.

Этапы отказа от поддержки:

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

Запрет на создание подклассов классов, настраивающих запуск тестов или среду выполнения JavaScript

Проблема: KT-75869, KT-81007

Компонент: Gradle

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

Краткое описание: В Kotlin 2.3.0 запрещено создавать подклассы следующих классов:

  • KotlinTest

  • KotlinNativeTest

  • KotlinJsTest

  • KotlinJsIrTarget

  • KotlinNodeJsIr

  • KotlinD8Ir

  • KotlinKarma

  • KotlinMocha

  • KotlinWebpack

  • TypeScriptValidationTask

  • YarnRootExtension

Эти классы никогда не предназначались для создания подклассов. Все сценарии использования подклассов теперь должны покрываться блоками конфигурации, предоставляемыми DSL плагина Kotlin Gradle. Если существующие API для этих задач не подходят для настройки запуска тестов или среды выполнения JavaScript, поделитесь отзывом в YouTrack.

Этапы отказа от поддержки:

  • 2.2.0: выводится предупреждение для кода, создающего подклассы этих классов

  • 2.3.0: предупреждения повышаются до ошибок

  • 2.4.0: API удаляются

Отказ от поддержки класса аннотации ExperimentalWasmDsl

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

Компонент: Gradle

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

Краткое описание: Класс аннотации ExperimentalWasmDsl объявлен устаревшим, поскольку его функциональность перенесена в модуль kotlin-plugin-annotations.

Этапы отказа от поддержки:

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

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

  • 2.4.0: класс аннотации удаляется

Отказ от поддержки класса аннотации ExperimentalDceDsl

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

Компонент: Gradle

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

Краткое описание: Класс аннотации ExperimentalDceDsl больше не используется, поэтому он объявлен устаревшим.

Этапы отказа от поддержки:

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

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

  • 2.4.0: класс аннотации удаляется

Отказ от поддержки утилит JavaScript

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

Компонент: Gradle

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

Краткое описание: Следующие функции и свойства используются только внутри системы, поэтому они объявлены устаревшими:

  • JsIrBinary.generateTs

  • KotlinJsIrLink.mode

  • NodeJsSetupTask.Companion.NAME

  • Appendable.appendConfigsFromDir()

  • ByteArray.toHex()

  • FileHasher.calculateDirHash()

  • String.jsQuoted()

Этапы отказа от поддержки:

  • 2.2.0: при использовании свойства KotlinJsIrLink.mode выводится предупреждение

  • 2.2.0: при использовании свойства и функций NodeJsSetupTask.Companion.NAME выводится предупреждение

  • 2.2.20: при использовании свойства JsIrBinary.generateTs выводится предупреждение

  • 2.3.0: предупреждения повышаются до ошибок

  • 2.4.0: API удаляются

Отказ от поддержки перенесённых свойств D8 и Binaryen

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

Компонент: Gradle

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

Краткое описание: Следующие свойства объявлены устаревшими, поскольку они перенесены из пакета org.jetbrains.kotlin.gradle.targets.js в пакет org.jetbrains.kotlin.gradle.targets.wasm:

  • binaryen.BinaryenEnvSpec

  • binaryen.BinaryenExtension

  • binaryen.BinaryenPlugin

  • binaryen.BinaryenRootPlugin

  • BinaryenSetupTask.Companion.NAME

  • d8.D8EnvSpec

  • d8.D8Plugin

  • D8SetupTask.Companion.NAME

Этапы отказа от поддержки:

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

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

  • 2.4.0: свойства удаляются

Отказ от поддержки функции create() в DSL NodeJsExec

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

Компонент: Gradle

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

Краткое описание: Функция create() в объекте-компаньоне DSL NodeJsExec объявлена устаревшей. Вместо неё используйте функцию register().

Этапы отказа от поддержки:

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

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

  • 2.4.0: функция удаляется

Отказ от поддержки свойств в DSL kotlinOptions

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

Компонент: Gradle

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

Краткое описание: Возможность настраивать параметры компилятора через DSL kotlinOptions и связанный с ним интерфейс задачи KotlinCompile<KotlinOptions> объявлена устаревшей начиная с Kotlin 2.2.0 в пользу нового DSL compilerOptions. В Kotlin 2.3.0 продолжается цикл отказа от поддержки всех свойств интерфейса kotlinOptions. Для миграции используйте DSL compilerOptions, чтобы настроить параметры компилятора. Инструкции по миграции см. в разделе Миграция с kotlinOptions {} на compilerOptions {}.

Этапы отказа от поддержки:

  • 2.0.0: выводится предупреждение для DSL kotlinOptions

  • 2.2.0: предупреждение повышается до ошибки, все свойства в kotlinOptions объявляются устаревшими

  • 2.3.0: предупреждение повышается до ошибки для всех свойств в kotlinOptions

Устаревание API kotlinArtifacts

Задача: KT-77066

Компонент: Gradle

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

Краткое описание: Экспериментальный API kotlinArtifacts устарел. Используйте актуальный DSL, доступный в плагине Kotlin Gradle, чтобы собирать финальные нативные бинарные файлы. Если этого недостаточно для миграции, оставьте комментарий в этой задаче YouTrack.

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

  • 2.2.0: выдавать предупреждение при использовании API kotlinArtifacts

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

  • 2.4.0: удалить API

Удаление свойства Gradle kotlin.mpp.resourcesResolutionStrategy

Задача: KT-74955

Компонент: Gradle

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

Краткое описание: Ранее свойство Gradle kotlin.mpp.resourcesResolutionStrategy было объявлено устаревшим, поскольку оно не использовалось. В Kotlin 2.3.0 свойство Gradle будет полностью удалено.

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

  • 2.2.0: выдавать диагностическое сообщение во время настройки

  • 2.3.0: удалить свойство Gradle

Устаревание старого режима импорта многоплатформенных проектов в IDE

Задача: KT-61127

Компонент: Gradle

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

Краткое описание: До Kotlin 2.3.0 мы поддерживали несколько режимов импорта многоплатформенных проектов в IDE. Теперь старый режим объявлен устаревшим, и доступен только один режим. Ранее старый режим включался с помощью свойства Gradle kotlin.mpp.import.enableKgpDependencyResolution=false. Использование этого свойства теперь вызывает предупреждение об устаревании.

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

  • 2.3.0: выдавать предупреждение при использовании свойства Gradle kotlin.mpp.import.enableKgpDependencyResolution=false

Удаление свойств для отключения точного резервного копирования при компиляции

Задача: KT-81038

Компонент: Gradle

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

Краткое описание: В Kotlin 1.9.0 была представлена экспериментальная оптимизация инкрементальной компиляции под названием «точное резервное копирование при компиляции». После успешного тестирования эта оптимизация была включена по умолчанию в Kotlin 2.0.0. В Kotlin 2.3.0 удаляются свойства Gradle kotlin.compiler.preciseCompilationResultsBackup и kotlin.compiler.keepIncrementalCompilationCachesInMemory, отключающие эту оптимизацию.

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

  • 2.1.20: выдавать предупреждение

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

Устаревание destinationDir в CInteropProcess

Задача: KT-74910

Компонент: Gradle

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

Краткое описание: Свойство destinationDir задачи CInteropProcess объявлено устаревшим. Вместо него используйте функцию CInteropProcess.destinationDirectory.set().

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

  • 2.1.0: выдавать предупреждение при использовании свойства destinationDir

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

  • 2.3.0: скрыть свойство destinationDir

Устаревание konanVersion в CInteropProcess

Задача: KT-74911

Компонент: Gradle

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

Краткое описание: Свойство konanVersion задачи CInteropProcess объявлено устаревшим. Вместо него используйте CInteropProcess.kotlinNativeVersion.

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

  • 2.1.0: выдавать предупреждение при использовании свойства konanVersion

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

  • 2.3.0: скрыть свойство konanVersion

Удаление свойств KotlinCompile.classpathSnapshotProperties

Задача: KT-76177

Компонент: Gradle

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

Краткое описание: Свойство Gradle kotlin.incremental.useClasspathSnapshot было удалено в Kotlin 2.2.0. В Kotlin 2.3.0 также удаляются следующие свойства:

  • KotlinCompile.classpathSnapshotProperties.useClasspathSnapshot

  • KotlinCompile.classpathSnapshotProperties.classpath

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

  • 2.0.20: объявить свойство kotlin.incremental.useClasspathSnapshot устаревшим и выдавать предупреждение

  • 2.2.0: удалить свойство kotlin.incremental.useClasspathSnapshot

  • 2.3.0: удалить свойства KotlinCompile.classpathSnapshotProperties.useClasspathSnapshot и KotlinCompile.classpathSnapshotProperties.classpath

Устаревание функции getPluginArtifactForNative()

Задача: KT-78870

Компонент: Gradle

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

Краткое описание: В Kotlin 2.2.20 функция getPluginArtifactForNative() была объявлена устаревшей. Вместо неё используйте функцию getPluginArtifact().

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

  • 2.2.20: выдавать предупреждение

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

  • 2.4.0: удалить функцию

Изменение подхода к регистрации всех сгенерированных исходных файлов

Задача: KT-45161

Компонент: Gradle

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

Краткое описание: В Kotlin 2.3.0 в интерфейсе Experimental KotlinSourceSet появился новый API, позволяющий регистрировать сгенерированные исходные файлы в проекте Gradle. Ранее для доступа ко всем сгенерированным исходным файлам можно было использовать свойство kotlin. Начиная с Kotlin 2.3.0, если вашему плагину или логике сборки нужен доступ ко всем сгенерированным исходным файлам, используйте вместо него свойство allKotlinSources.

Рекомендации по миграции:

  • Чтобы регистрировать сгенерированные исходные файлы, используйте свойство generatedKotlin.

  • Чтобы получить доступ ко всем исходным файлам, включая несгенерированные, используйте свойство allKotlinSources.

Устаревание свойства kotlin.publishJvmEnvironmentAttribute

Задача: KT-83678

Компонент: Gradle

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

Краткое описание: В Kotlin 2.3.20 свойство kotlin.publishJvmEnvironmentAttribute объявлено устаревшим. Это свойство позволяло отключить публикацию атрибута org.gradle.jvm.environment для многоплатформенных библиотек. Начиная с Kotlin 2.0.20, org.gradle.jvm.environment публикуется по умолчанию, чтобы обеспечить стандартное разрешение зависимостей.

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

  • 2.3.20: выдавать предупреждение

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

Устаревание интерфейса CleanableStore и класса CleanDataTask

Задача: KT-78104

Компонент: Gradle

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

Краткое описание: Интерфейс CleanableStore и класс CleanDataTask объявлены устаревшими, поскольку больше не используются.

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

  • 2.3.20: выдавать предупреждение

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

Устаревание свойства Gradle kotlin.kmp.isolated-projects.support

Задача: KT-79257

Компонент: Gradle

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

Краткое описание: Поскольку многоплатформенные проекты по умолчанию совместимы с изолированными проектами и других вариантов нет, свойство Gradle kotlin.kmp.isolated-projects.support объявлено устаревшим.

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

  • 2.3.20: выдавать предупреждение

Устаревание свойства Gradle kotlin.mpp.enableKotlinToolingMetadataArtifact

Задача: KT-79924

Компонент: Gradle

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

Краткое описание: Поскольку артефакт kotlin-tooling-metadata.json теперь всегда создается для многоплатформенных проектов, свойство Gradle kotlin.mpp.enableKotlinToolingMetadataArtifact объявлено устаревшим.

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

  • 2.3.20: выдавать предупреждение

  • 2.4.0: удалить поддержку

Устаревание DSL LanguageSettings.enableLanguageFeature

Задача: KT-82323, KT-82847

Компонент: Gradle

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

Краткое описание: DSL LanguageSettings.enableLanguageFeature предоставлял доступ к внутренней конфигурации компилятора, предназначенной только для тестирования компилятора Kotlin. Поэтому этот DSL объявлен устаревшим.

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

  • 2.3.20: выдавать предупреждение при использовании LanguageSettings.enableLanguageFeature

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

Устаревание стратегии выполнения компилятора «вне процесса»

Задача: KT-83125

Компонент: Gradle

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

Краткое описание: Стратегия выполнения компилятора «вне процесса» не поддерживается API инструментов сборки и является самой медленной из доступных стратегий. В Kotlin 2.3.20 эта стратегия объявлена устаревшей в пользу стратегий выполнения компилятора «демон» и «внутри процесса».

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

  • 2.3.20: выдавать предупреждение

  • 2.4.0: удалить стратегию выполнения компилятора «вне процесса»

Удаление поддержки средств сборки

Удаление поддержки Ant

Задача: KT-75875

Компонент: Ant

Краткое описание: В Kotlin 2.3.0 прекращается поддержка Ant в качестве средства сборки. Вместо него используйте Gradle или Maven.

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

  • 2.2.0: выдавать предупреждение

  • 2.3.0: прекратить поддержку

24 августа 2026 г.
Что нового в Kotlin 2.3.0Что нового в Kotlin 2.2.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-23.html

Spec-Zone.ru

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