メインコンテンツまでスキップ

Kotlin 1.6の互換性ガイド

_言語の現代化の維持快適なアップデート_は、Kotlin言語設計における基本原則です。前者は、言語の進化を妨げる構造は削除されるべきであるとし、後者は、コードの移行を可能な限りスムーズにするために、この削除について事前に十分に周知されるべきであるとしています。

ほとんどの言語変更は、アップデートの変更履歴やコンパイラの警告など、他のチャネルを通じてすでに発表されていますが、このドキュメントではそれらすべてをまとめて、Kotlin 1.5からKotlin 1.6への移行に関する完全なリファレンスを提供します。

基本用語

このドキュメントでは、いくつかの種類の互換性について説明します。

  • source(ソース):ソース非互換の変更は、エラーや警告なしで正常にコンパイルされていたコードが、コンパイルできなくなるようにします。
  • binary(バイナリ):2つのバイナリアーティファクトを相互に交換しても、ロードまたはリンケージエラーが発生しない場合、それらはバイナリ互換であると言います。
  • behavioral(動作):変更を適用する前と後で、同じプログラムが異なる動作を示す場合、その変更は動作非互換であると言います。

これらの定義は、純粋なKotlinに対してのみ与えられていることに注意してください。他の言語からのKotlinコードの互換性(たとえば、Javaからの互換性)は、このドキュメントの範囲外です。

言語

enum、sealed、およびBooleanのsubjectを持つwhenステートメントをデフォルトで網羅的にする

Issue: KT-47709

Component: Core language

Incompatible change type: source

Short summary: Kotlin 1.6では、enum、sealed、またはBooleanのsubjectを持つwhenステートメントが網羅的でない場合に警告が表示されます。

Deprecation cycle:

  • 1.6.0: enum、sealed、またはBooleanのsubjectを持つwhenステートメントが網羅的でない場合に警告を表示します(progressive modeではエラー)。
  • 1.7.0: この警告をエラーに昇格させます。

when-with-subjectにおける紛らわしい文法を非推奨にする

Issue: KT-48385

Component: Core language

Incompatible change type: source

Short summary: Kotlin 1.6では、when条件式におけるいくつかの紛らわしい文法構造を非推奨にします。

Deprecation cycle:

  • 1.6.20: 影響を受ける式に非推奨警告を表示します。
  • 1.8.0: この警告をエラーに昇格させます。
  • >= 1.8: いくつかの非推奨の構造を新しい言語機能のために再利用します。

コンパニオンオブジェクトおよびネストされたオブジェクトのsuperコンストラクタ呼び出しにおけるクラスメンバへのアクセスを禁止する

Issue: KT-25289

Component: Core language

Incompatible change type: source

Short summary: Kotlin 1.6では、コンパニオンオブジェクトおよび通常のオブジェクトのsuperコンストラクタ呼び出しの引数が、そのような引数のレシーバが包含する宣言を参照する場合、エラーを報告します。

Deprecation cycle:

  • 1.5.20: 問題のある引数に警告を表示します。
  • 1.6.0: この警告をエラーに昇格させます。 -XXLanguage:-ProhibitSelfCallsInNestedObjectsを使用すると、一時的に1.6より前の動作に戻すことができます。

型nullabilityの強化の改善

Issue: KT-48623

Component: Kotlin/JVM

Incompatible change type: source

Short summary: Kotlin 1.7では、Javaコードにおける型nullabilityのアノテーションのロードおよび解釈方法を変更します。

Deprecation cycle:

  • 1.4.30: より正確な型nullabilityがエラーにつながる可能性がある場合に警告を表示します。
  • 1.7.0: Java型のより正確なnullabilityを推論します。 -XXLanguage:-TypeEnhancementImprovementsInStrictModeを使用すると、一時的に1.7より前の動作に戻すことができます。

異なる数値型間の暗黙的な型変換を禁止する

Issue: KT-48645

Component: Kotlin/JVM

Incompatible change type: behavioral

Short summary: Kotlinは、セマンティクス的にその型へのダウンキャストのみが必要な場合に、数値が自動的にプリミティブ数値型に変換されるのを回避します。

Deprecation cycle:

  • < 1.5.30: 影響を受けるすべてのケースにおける古い動作。
  • 1.5.30: 生成されたプロパティデリゲートアクセサにおけるダウンキャストの動作を修正します。 -Xuse-old-backendを使用すると、一時的に1.5.30より前の修正前の動作に戻すことができます。
  • >= 1.6.20: 他の影響を受けるケースにおけるダウンキャストの動作を修正します。

コンテナアノテーションがJLSに違反するrepeatableアノテーションクラスの宣言を禁止する

Issue: KT-47928

Component: Kotlin/JVM

Incompatible change type: source

Short summary: Kotlin 1.6では、repeatableアノテーションのコンテナアノテーションが、JLS 9.6.3と同じ要件(配列型のvalueメソッド、retention、およびtarget)を満たしていることを確認します。

Deprecation cycle:

  • 1.5.30: JLS要件に違反するrepeatableコンテナアノテーションの宣言に警告を表示します(progressive modeではエラー)。
  • 1.6.0: この警告をエラーに昇格させます。 -XXLanguage:-RepeatableAnnotationContainerConstraintsを使用すると、一時的にエラー報告を無効にできます。

repeatableアノテーションクラスにおけるContainerという名前のネストされたクラスの宣言を禁止する

Issue: KT-47971

Component: Kotlin/JVM

Incompatible change type: source

Short summary: Kotlin 1.6では、Kotlinで宣言されたrepeatableアノテーションが、定義済みの名前Containerを持つネストされたクラスを持っていないことを確認します。

Deprecation cycle:

  • 1.5.30: Kotlin-repeatableアノテーションクラスにおけるContainerという名前のネストされたクラスに警告を表示します(progressive modeではエラー)。
  • 1.6.0: この警告をエラーに昇格させます。 -XXLanguage:-RepeatableAnnotationContainerConstraintsを使用すると、一時的にエラー報告を無効にできます。

インターフェースプロパティをオーバーライドするプライマリコンストラクタのプロパティにおける@JvmFieldを禁止する

Issue: KT-32753

Component: Kotlin/JVM

Incompatible change type: source

Short summary: Kotlin 1.6では、インターフェースプロパティをオーバーライドするプライマリコンストラクタで宣言されたプロパティに@JvmFieldアノテーションを付けることを禁止します。

Deprecation cycle:

  • 1.5.20: プライマリコンストラクタにおけるそのようなプロパティの@JvmFieldアノテーションに警告を表示します。
  • 1.6.0: この警告をエラーに昇格させます。 -XXLanguage:-ProhibitJvmFieldOnOverrideFromInterfaceInPrimaryConstructorを使用すると、一時的にエラー報告を無効にできます。

コンパイラオプション-Xjvm-defaultのenableモードとcompatibilityモードを非推奨にする

Issue: KT-46329

Component: Kotlin/JVM

Incompatible change type: source

Short summary: Kotlin 1.6.20では、-Xjvm-defaultコンパイラオプションのenableモードとcompatibilityモードの使用について警告が表示されます。

Deprecation cycle:

  • 1.6.20: -Xjvm-defaultコンパイラオプションのenableモードとcompatibilityモードに警告を表示します。
  • >= 1.8.0: この警告をエラーに昇格させます。

public-abiインライン関数からのsuper呼び出しを禁止する

Issue: KT-45379

Component: Core language

Incompatible change type: source

Short summary: Kotlin 1.6では、publicまたはprotectedのインライン関数およびプロパティからsuper修飾子を持つ関数を呼び出すことを禁止します。

Deprecation cycle:

  • 1.5.0: publicまたはprotectedのインライン関数またはプロパティアクセサからのsuper呼び出しに警告を表示します。
  • 1.6.0: この警告をエラーに昇格させます。 -XXLanguage:-ProhibitSuperCallsFromPublicInlineを使用すると、一時的にエラー報告を無効にできます。

publicインライン関数からのprotectedコンストラクタ呼び出しを禁止する

Issue: KT-48860

Component: Core language

Incompatible change type: source

Short summary: Kotlin 1.6では、publicまたはprotectedのインライン関数およびプロパティからprotectedコンストラクタを呼び出すことを禁止します。

Deprecation cycle:

  • 1.4.30: publicまたはprotectedのインライン関数またはプロパティアクセサからのprotectedコンストラクタ呼び出しに警告を表示します。
  • 1.6.0: この警告をエラーに昇格させます。 -XXLanguage:-ProhibitProtectedConstructorCallFromPublicInlineを使用すると、一時的にエラー報告を無効にできます。

private-in-file型からのprivateネスト型のエクスポーズを禁止する

Issue: KT-20094

Component: Core language

Incompatible change type: source

Short summary: Kotlin 1.6では、private-in-file型からのprivateネスト型および内部クラスのエクスポーズを禁止します。

Deprecation cycle:

  • 1.5.0: private-in-file型からエクスポーズされたprivate型に警告を表示します。
  • 1.6.0: この警告をエラーに昇格させます。 -XXLanguage:-PrivateInFileEffectiveVisibilityを使用すると、一時的にエラー報告を無効にできます。

アノテーションターゲットは、型のアノテーションについて、いくつかのケースで分析されない

Issue: KT-28449

Component: Core language

Incompatible change type: source

Short summary: Kotlin 1.6では、型に適用できないはずの型のアノテーションを許可しなくなります。

Deprecation cycle:

  • 1.5.20: progressive modeでエラーを表示します。
  • 1.6.0: エラーを表示します。 -XXLanguage:-ProperCheckAnnotationsTargetInTypeUsePositionsを使用すると、一時的にエラー報告を無効にできます。

末尾のラムダを持つsuspendという名前の関数への呼び出しを禁止する

Issue: KT-22562

Component: Core language

Incompatible change type: source

Short summary: Kotlin 1.6では、関数型型の単一の引数を末尾のラムダとして渡す、suspendという名前の関数の呼び出しを許可しなくなります。

Deprecation cycle:

  • 1.3.0: そのような関数呼び出しに警告を表示します。
  • 1.6.0: この警告をエラーに昇格させます。
  • >= 1.7.0: 言語文法を変更して、{の前のsuspendがキーワードとして解析されるようにします。

標準ライブラリ

minus/removeAll/retainAllにおける脆いcontains最適化を削除する

Issue: KT-45438

Component: kotlin-stdlib

Incompatible change type: behavioral

Short summary: Kotlin 1.6では、collection/iterable/array/sequenceから複数の要素を削除する関数および演算子の引数に対して、setへの変換を実行しなくなります。

Deprecation cycle:

  • < 1.6: 古い動作:引数は場合によってはsetに変換されます。
  • 1.6.0: 関数の引数がcollectionの場合、Setに変換されなくなります。collectionでない場合は、代わりにListに変換される可能性があります。 古い動作は、システムプロパティkotlin.collections.convert_arg_to_set_in_removeAll=trueを設定することで、JVM上で一時的に元に戻すことができます。
  • >= 1.7: 上記のシステムプロパティは効果がなくなります。

Random.nextLongにおける値生成アルゴリズムを変更する

Issue: KT-47304

Component: kotlin-stdlib

Incompatible change type: behavioral

Short summary: Kotlin 1.6では、指定された範囲外の値を生成しないように、Random.nextLong関数の値生成アルゴリズムを変更します。

Deprecation cycle:

  • 1.6.0: 動作はすぐに修正されます。

collectionのmin関数とmax関数の戻り型を徐々にnon-nullableに変更する

Issue: KT-38854

Component: kotlin-stdlib

Incompatible change type: source

Short summary: collectionのmin関数とmax関数の戻り型は、Kotlin 1.7でnon-nullableに変更されます。

Deprecation cycle:

  • 1.4.0: ...OrNull関数を同義語として導入し、影響を受けるAPIを非推奨にします(詳細はissueを参照)。
  • 1.5.0: 影響を受けるAPIの非推奨レベルをエラーに昇格させます。
  • 1.6.0: 非推奨の関数をpublic APIから隠します。
  • >= 1.7: 影響を受けるAPIを再導入しますが、戻り型はnon-nullableです。

浮動小数点配列関数(contains、indexOf、lastIndexOf)を非推奨にする

Issue: KT-28753

Component: kotlin-stdlib

Incompatible change type: source

Short summary: Kotlinは、合計順序ではなくIEEE-754順序を使用して値を比較する浮動小数点配列関数containsindexOflastIndexOfを非推奨にします。

Deprecation cycle:

  • 1.4.0: 影響を受ける関数を警告付きで非推奨にします。
  • 1.6.0: 非推奨レベルをエラーに昇格させます。
  • >= 1.7: 非推奨の関数をpublic APIから隠します。

kotlin.domパッケージおよびkotlin.browserパッケージからkotlinx.*へ宣言を移行する

Issue: KT-39330

Component: kotlin-stdlib (JS)

Incompatible change type: source

Short summary: kotlin.domパッケージおよびkotlin.browserパッケージからの宣言は、stdlibから抽出する準備として、対応するkotlinx.*パッケージに移動されます。

Deprecation cycle:

  • 1.4.0: kotlinx.domパッケージおよびkotlinx.browserパッケージに代替APIを導入します。
  • 1.4.0: kotlin.domパッケージおよびkotlin.browserパッケージのAPIを非推奨にし、上記の新しいAPIを代替として提案します。
  • 1.6.0: 非推奨レベルをエラーに昇格させます。
  • >= 1.7: 非推奨の関数をstdlibから削除します。
  • >= 1.7: kotlinx.*パッケージのAPIを個別のライブラリに移動します。

Kotlin/JSでRegex.replace関数をインライン化しない

Issue: KT-27738

Component: kotlin-stdlib (JS)

Incompatible change type: source

Short summary: 関数のtransformパラメータを持つRegex.replace関数は、Kotlin/JSではインライン化されなくなります。

Deprecation cycle:

  • 1.6.0: 影響を受ける関数からinline修飾子を削除します。

置換文字列にグループ参照が含まれる場合のJVMとJSにおけるRegex.replace関数の異なる動作

Issue: KT-28378

Component: kotlin-stdlib (JS)

Incompatible change type: behavioral

Short summary: Kotlin/JSの関数Regex.replace(置換パターン文字列を使用)は、Kotlin/JVMと同じパターンの構文に従います。

Deprecation cycle:

  • 1.6.0: Kotlin/JS stdlibのRegex.replaceにおける置換パターンの処理を変更します。

JS RegexでUnicode大文字小文字区別を使用する

Issue: KT-45928

Component: kotlin-stdlib (JS)

Incompatible change type: behavioral

Short summary: Kotlin/JSのRegexクラスは、Unicodeルールに従って文字を検索および比較するために、基盤となるJS正規表現エンジンを呼び出すときにunicodeフラグを使用します。 これにより、JS環境の特定のバージョン要件が発生し、正規表現パターン文字列内の不要なエスケープのより厳密な検証が行われます。

Deprecation cycle:

  • 1.5.0: JS Regexクラスのほとんどの関数でUnicode大文字小文字区別を有効にします。
  • 1.6.0: Regex.replaceFirst関数でUnicode大文字小文字区別を有効にします。

一部のJS専用APIを非推奨にする

Issue: KT-48587

Component: kotlin-stdlib (JS)

Incompatible change type: source

Short summary: stdlibの多くのJS専用関数は、削除するために非推奨になっています。これらには、String.concat(String)String.match(regex: String)String.matches(regex: String)、および比較関数を取る配列のsort関数(たとえば、Array<out T>.sort(comparison: (a: T, b: T) -> Int))が含まれます。

Deprecation cycle:

  • 1.6.0: 影響を受ける関数を警告付きで非推奨にします。
  • 1.7.0: 非推奨レベルをエラーに昇格させます。
  • 1.8.0: 非推奨の関数をpublic APIから削除します。

Kotlin/JSのクラスのpublic APIから、実装固有および相互運用固有の関数を隠す

Issue: KT-48587

Component: kotlin-stdlib (JS)

Incompatible change type: source, binary

Short summary: 関数HashMap.createEntrySetおよびAbstactMutableCollection.toJSONの可視性をinternalに変更します。

Deprecation cycle:

  • 1.6.0: 関数をinternalにし、public APIから削除します。

ツール

KotlinGradleSubpluginクラスを非推奨にする

Issue: KT-48830

Component: Gradle

Incompatible change type: source

Short summary: クラスKotlinGradleSubpluginは、KotlinCompilerPluginSupportPluginに賛成して非推奨になります。

Deprecation cycle:

  • 1.6.0: 非推奨レベルをエラーに昇格させます。
  • >= 1.7.0: 非推奨のクラスを削除します。

kotlin.useFallbackCompilerSearchビルドオプションを削除する

Issue: KT-46719

Component: Gradle

Incompatible change type: source

Short summary: 非推奨の'kotlin.useFallbackCompilerSearch'ビルドオプションを削除します。

Deprecation cycle:

  • 1.5.0: 非推奨レベルを警告に昇格させます。
  • 1.6.0: 非推奨のオプションを削除します。

いくつかのコンパイラオプションを削除する

Issue: KT-48847

Component: Gradle

Incompatible change type: source

Short summary: 非推奨のnoReflectおよびincludeRuntimeコンパイラオプションを削除します。

Deprecation cycle:

  • 1.5.0: 非推奨レベルをエラーに昇格させます。
  • 1.6.0: 非推奨のオプションを削除します。

useIRコンパイラオプションを非推奨にする

Issue: KT-48847

Component: Gradle

Incompatible change type: source

Short summary: 非推奨のuseIRコンパイラオプションを隠します。

Deprecation cycle:

  • 1.5.0: 非推奨レベルを警告に昇格させます。
  • 1.6.0: オプションを隠します。
  • >= 1.7.0: 非推奨のオプションを削除します。

kapt.use.worker.api Gradleプロパティを非推奨にする

Issue: KT-48826

Component: Gradle

Incompatible change type: source

Short summary: Gradle Workers API経由でkaptを実行できるようにするkapt.use.worker.apiプロパティを非推奨にします(デフォルト:true)。

Deprecation cycle:

  • 1.6.20: 非推奨レベルを警告に昇格させます。
  • >= 1.8.0: このプロパティを削除します。

kotlin.parallel.tasks.in.project Gradleプロパティを削除する

Issue: KT-46406

Component: Gradle

Incompatible change type: source

Short summary: kotlin.parallel.tasks.in.projectプロパティを削除します。

Deprecation cycle:

  • 1.5.20: 非推奨レベルを警告に昇格させます。
  • 1.6.20: このプロパティを削除します。

kotlin.experimental.coroutines Gradle DSLオプションおよびkotlin.coroutines Gradleプロパティを非推奨にする

Issue: KT-50369

Component: Gradle

Incompatible change type: source

Short summary: kotlin.experimental.coroutines Gradle DSLオプションおよびkotlin.coroutinesプロパティを非推奨にします。

Deprecation cycle:

  • 1.6.20: 非推奨レベルを警告に昇格させます。
  • >= 1.7.0: DSLオプションとプロパティを削除します。