Spec-Zone.ru › Kotlin 2

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

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

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

Основные понятия

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

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

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

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

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

Язык

Запрет делегирования вызовов 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: сообщать об ошибке при объявлении конкретного класса с непереопределённым абстрактным методом суперкласса, а также когда методы Any, вызываемые через super, переопределены в суперклассе как абстрактные

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Сделать приватные конструкторы sealed-классов действительно приватными

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

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

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

Краткое описание: после ослабления ограничений на расположение наследников sealed-классов в структуре проекта видимость конструкторов sealed-классов по умолчанию стала protected. Однако вплоть до версии 1.8 Kotlin по-прежнему позволял вызывать явно объявленные приватные конструкторы sealed-классов за пределами областей видимости этих классов

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

  • 1.6.20: сообщать о предупреждении (или об ошибке в прогрессивном режиме) при вызове приватного конструктора sealed-класса за пределами этого класса

  • 1.8.0: применять стандартные правила видимости для приватных конструкторов (вызов приватного конструктора разрешается только внутри соответствующего класса); прежнее поведение можно временно восстановить, указав аргумент компилятора -XXLanguage:-UseConsistentRulesForPrivateConstructorsOfSealedClasses

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

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

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

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

Краткое описание: в Kotlin 1.8 будет запрещено использовать оператор == с несовместимыми числовыми типами, например Int и Long, в областях видимости лямбда-функций вывода типов построителя, как это уже происходит в других контекстах

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

  • 1.6.20: сообщать о предупреждении (или об ошибке в прогрессивном режиме) при использовании оператора == с несовместимыми числовыми типами

  • 1.8.0: повысить уровень предупреждения до ошибки; -XXLanguage:-ProperEqualityChecksInBuilderInferenceCalls можно использовать, чтобы временно вернуться к поведению до версии 1.8

Запрет if без else и неполного when в правой части оператора Элвиса

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

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

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

Краткое описание: в Kotlin 1.8 будет запрещено использовать неполное when или выражение if без ветви else в правой части оператора Элвиса (?:). Ранее это допускалось, если результат оператора Элвиса не использовался как выражение

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

  • 1.6.20: сообщать о предупреждении (или об ошибке в прогрессивном режиме) для таких неполных выражений if и when

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

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

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

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

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

Краткое описание: в Kotlin 1.8 будет запрещено использовать псевдоним типа с аргументами типа, нарушающими ограничения верхней границы соответствующих параметров типа исходного типа, если один параметр типа typealias используется в нескольких аргументах типа исходного типа; например, typealias Alias<T> = Base<T, T>

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

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

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

Запрет нарушения верхней границы при использовании обобщённого псевдонима типа (параметр типа используется в обобщённом аргументе типа одного из аргументов типа исходного типа)

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

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

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

Краткое описание: Kotlin запретит использовать псевдоним типа с аргументами типа, нарушающими ограничения верхней границы соответствующих параметров типа исходного типа, если параметр типа typealias используется как обобщённый аргумент типа одного из аргументов типа исходного типа; например, typealias Alias<T> = Base<List<T>>

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

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

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

Запрет использования параметра типа, объявленного для свойства-расширения, внутри делегата

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

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

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

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

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

  • 1.6.0: сообщать о предупреждении (или об ошибке в прогрессивном режиме) при делегировании свойства-расширения типу, который определённым образом использует параметры типа, выведенные из аргументов типа делегируемого свойства

  • 1.8.0: повысить уровень предупреждения до ошибки; -XXLanguage:-ForbidUsingExtensionPropertyTypeParameterInDelegate можно использовать, чтобы временно вернуться к поведению до версии 1.8

Запрет аннотации @Synchronized для suspend-функций

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

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

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

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

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

  • 1.6.0: сообщать о предупреждении для suspend-функций с аннотацией @Synchronized; в прогрессивном режиме предупреждение выдаётся как ошибка

  • 1.8.0: повысить уровень предупреждения до ошибки; -XXLanguage:-SynchronizedSuspendError можно использовать, чтобы временно вернуться к поведению до версии 1.8

Запрет использования оператора spread для передачи аргументов параметрам, не являющимся vararg

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

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

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

Краткое описание: при определённых условиях Kotlin позволял передавать массивы с помощью оператора spread (*) параметрам-массивам, не являющимся vararg. Начиная с Kotlin 1.8 это будет запрещено

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

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

  • 1.8.0: повысить уровень предупреждения до ошибки; -XXLanguage:-ReportNonVarargSpreadOnGenericCalls можно использовать, чтобы временно вернуться к поведению до версии 1.8

Запрет нарушения null-безопасности в лямбдах, передаваемых функциям с перегрузками по типу возвращаемого значения лямбды

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

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

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

Краткое описание: в Kotlin 1.8 будет запрещено возвращать null из лямбд, передаваемых функциям, перегруженным по типам возвращаемых значений этих лямбд, если перегрузки не допускают возвращаемый тип с null-значением. Ранее это допускалось, когда null возвращалось в одной из ветвей оператора when

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

  • 1.6.20: сообщать о предупреждении о несоответствии типов (или об ошибке в прогрессивном режиме)

  • 1.8.0: повысить уровень предупреждения до ошибки; -XXLanguage:-DontLoseDiagnosticsDuringOverloadResolutionByReturnType можно использовать, чтобы временно вернуться к поведению до версии 1.8

Сохранять nullable-свойство при аппроксимации локальных типов в публичных сигнатурах

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

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

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

Краткое описание: если локальный или анонимный тип возвращается из функции с телом-выражением без явно указанного возвращаемого типа, компилятор Kotlin выводит (или аппроксимирует) возвращаемый тип, используя известный супертип этого типа. При этом компилятор может вывести ненулевой тип, хотя фактически может быть возвращено значение null

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

  • 1.8.0: аппроксимировать гибкие типы гибкими супертипами

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

  • 1.9.0: аппроксимировать nullable-типы nullable-супертипами; -XXLanguage:-KeepNullabilityWhenApproximatingLocalType можно использовать, чтобы временно вернуться к поведению до версии 1.9

Не распространять устаревание через переопределения

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

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

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

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

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

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

  • 1.9.0: прекратить распространение статуса устаревания на переопределяющие члены. Это изменение также немедленно вступает в силу в прогрессивном режиме

Запрет неявного вывода переменной типа как верхней границы в контексте вывода типов построителя

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

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

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

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

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

  • 1.7.20: сообщать о предупреждении (или об ошибке в прогрессивном режиме), если параметр типа выводится как одна из объявленных верхних границ при отсутствии информации о типе в месте использования

  • 1.9.0: повысить уровень предупреждения до ошибки; -XXLanguage:-ForbidInferringPostponedTypeVariableIntoDeclaredUpperBound можно использовать, чтобы временно вернуться к поведению до версии 1.9

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

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

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

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

Краткое описание: Kotlin разрешает использовать литералы коллекций ограниченным образом — для передачи массивов параметрам классов аннотаций или задания значений по умолчанию для этих параметров. Однако помимо этого Kotlin позволял использовать литералы коллекций где угодно внутри класса аннотации, например во вложенном объекте. В Kotlin 1.9 будет запрещено использовать литералы коллекций в классах аннотаций где-либо, кроме значений параметров по умолчанию.

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

  • 1.7.0: сообщать о предупреждении (или об ошибке в прогрессивном режиме) для литералов массивов во вложенных объектах классов аннотаций

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

Запрет ссылок на последующие параметры со значениями по умолчанию в выражениях значений по умолчанию

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

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

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

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

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

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

  • 1.9.0: повысить уровень предупреждения до ошибки; -XXLanguage:-ProhibitIllegalValueParameterUsageInDefaultArguments можно использовать, чтобы временно вернуться к поведению до версии 1.9

Запрет вызовов расширений для inline-параметров функционального типа

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

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

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

Краткое описание: хотя Kotlin позволял передавать inline-параметр функционального типа другой inline-функции в качестве получателя, при компиляции такого кода всегда возникали исключения компилятора. В Kotlin 1.9 это будет запрещено: вместо сбоя компилятора будет выдаваться ошибка

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

  • 1.7.20: сообщать о предупреждении (или об ошибке в прогрессивном режиме) для inline-вызовов расширений у inline-параметров функционального типа

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

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

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

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

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

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

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

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

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

  • >=1.10: изменить интерпретацию парсером последовательности токенов suspend fun

Запретить использование захваченных параметров типов во внутренних классах с нарушением их вариантности

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

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

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

Краткое описание: В Kotlin 1.9 будет запрещено использовать параметры типов внешнего класса с вариантностью in или out во внутреннем классе этого класса в позициях, нарушающих объявленную вариантность этих параметров типов

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

  • 1.7.0: выдавать предупреждение (или ошибку в прогрессивном режиме), если позиция использования параметра типа внешнего класса нарушает правила вариантности этого параметра

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

Запретить рекурсивный вызов функции без явно указанного типа возвращаемого значения в операторах составного присваивания

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

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

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

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

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

  • 1.7.0: выдавать предупреждение (или ошибку в прогрессивном режиме), если функция без явно указанного типа возвращаемого значения рекурсивно вызывается в аргументе оператора составного присваивания внутри тела этой функции

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

Запретить небезопасные вызовы с ожидаемым @NotNull T и параметром обобщенного типа Kotlin с nullable-ограничением

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

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

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

Краткое описание: В Kotlin 1.9 будут запрещены вызовы методов, в которых значение потенциально nullable-типа передается параметру метода Java с аннотацией @NotNull

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

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

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

Запретить доступ к членам companion-объекта класса enum из инициализаторов элементов этого enum

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

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

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

Краткое описание: В Kotlin 1.9 будут запрещены все виды доступа к companion-объекту enum из инициализатора элемента enum

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

  • 1.6.20: выдавать предупреждение (или ошибку в прогрессивном режиме) при таком доступе к члену companion-объекта

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

Устаревание и удаление синтетического свойства Enum.declaringClass

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

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

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

Краткое описание: В Kotlin разрешалось использовать синтетическое свойство declaringClass для значений Enum, полученных из метода getDeclaringClass() базового Java-класса java.lang.Enum, хотя этот метод недоступен для типа Kotlin Enum. В Kotlin 1.9 использование этого свойства будет запрещено; вместо него будет предложено перейти на свойство-расширение declaringJavaClass

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

  • 1.7.0: выдавать предупреждение (или ошибку в прогрессивном режиме) при использовании свойства declaringClass, предлагать перейти на расширение declaringJavaClass

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

  • >=1.10: удалить синтетическое свойство declaringClass

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

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

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

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

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

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

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

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

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

Предупреждение о возможном изменении разрешения перегрузок, когда Range/Progression начнет реализовывать Collection

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

Компонент: язык ядра / kotlin-stdlib

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

Краткое описание: В Kotlin 1.9 планируется реализовать интерфейс Collection в стандартных прогрессиях и конкретных диапазонах, наследующих их. Это может привести к выбору другой перегрузки при разрешении перегрузок, если для некоторого метода существуют две перегрузки: одна принимает элемент, а другая — коллекцию. Kotlin сделает эту ситуацию заметной: будет выдаваться предупреждение или ошибка при вызове такого перегруженного метода с аргументом-диапазоном или прогрессией

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

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

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

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

Перенос объявлений из пакетов 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.20: удалить устаревшие функции из stdlib для целевой платформы JS-IR

  • >= 1.9: перенести 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.9.0: повысить уровень устаревания до ошибки

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

Инструменты

Повышение уровня устаревания свойства classpath задачи KotlinCompile

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

Компонент: Gradle

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

Краткое описание: свойство classpath задачи KotlinCompile объявляется устаревшим

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

  • 1.7.0: свойство classpath объявляется устаревшим

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

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

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

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

Компонент: Gradle

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

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

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

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

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

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

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

Компонент: Gradle

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

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

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

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

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

Изменения параметров компилятора

Проблемы: KT-27301, KT-48532

Компонент: Gradle

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

Краткое описание: это изменение может повлиять на авторов плагинов Gradle. В kotlin-gradle-plugin добавлены дополнительные параметры обобщенных типов для некоторых внутренних типов (необходимо указать типы или *). Задача KotlinNativeLink больше не наследует задачу AbstractKotlinNativeCompile. KotlinJsCompilerOptions.outputFile и связанные с ней параметры KotlinJsOptions.outputFile объявлены устаревшими. Вместо них используйте входные данные задачи Kotlin2JsCompile.outputFileProperty. Входные данные задачи kotlinOptions и DSL задачи kotlinOptions{...} находятся в режиме поддержки и будут объявлены устаревшими в будущих выпусках. compilerOptions и kotlinOptions нельзя изменять на этапе выполнения задачи (см. одно исключение в Что нового в Kotlin 1.8). freeCompilerArgs возвращает неизменяемый List<String> — kotlinOptions.freeCompilerArgs.remove("something") завершится с ошибкой. Свойство useOldBackend, позволявшее использовать старый бэкенд JVM, удалено

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

  • 1.8.0: задача KotlinNativeLink больше не наследует AbstractKotlinNativeCompile. KotlinJsCompilerOptions.outputFile и связанные с ней параметры KotlinJsOptions.outputFile объявлены устаревшими. Свойство useOldBackend, позволявшее использовать старый бэкенд JVM, удалено.

Устаревание свойства kotlin.internal.single.build.metrics.file

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

Компонент: Gradle

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

Краткое описание: объявить устаревшим свойство kotlin.internal.single.build.metrics.file, используемое для задания единственного файла отчетов о сборке. Вместо него используйте свойство kotlin.build.report.single_file с kotlin.build.report.output=single_file

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

  • 1.8.0: повысить уровень устаревания до предупреждения >= 1.9: удалить свойство

26 мая 2025 г.
Что нового в Kotlin 1.8.0Что нового в Kotlin 1.7.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-18.html

Spec-Zone.ru

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