↓の続きです。
wrongwrong163377.hatenablog.com
問題の内容
value class
を引数に含む関数をkotlin-reflect
を用いて呼び出す処理には、以下のような問題が存在していました。
- "KotlinReflectionInternalError" when using `callBy` on constructor that has inline class parameters : KT-27598
- IllegalArgumentException when reflectively accessing nullable property of inline class type : KT-31141
- An error occurs when callBy a KFunction that contains a value class as an argument, has a default argument set, and has more than 32 arguments. : KT-51804
これらの問題は、kotlin-reflect
に依存するライブラリがvalue class
をサポートする上でクリティカルな障害となっていました。
また、これらの問題を検知するためのテストパターンも不足している状況でした。
やったこと
Kotlin
のリポジトリに以下のPRを発行し、マージして頂きました。
- Add and fix test pattern for KFunction involving value class (to fix KT-31141). by k163377 · Pull Request #4743 · JetBrains/kotlin
- Partial fix for KT-27598 by k163377 · Pull Request #4746 · JetBrains/kotlinPartial fix for KT-27598 by k163377 · Pull Request #4746 · JetBrains/kotlin
- Partial fix for KT-31141 by k163377 · Pull Request #4761 · JetBrains/kotlin
- ※
JetBrains
側でより良い解決方法が出たため、マージされなかった
- ※
- Fix KT-51804 by k163377 · Pull Request #4779 · JetBrains/kotlin
これらの変更によって、ライブラリの実装を妨げるようなクリティカルな障害は解消されたと思われます。
終わりに
感想などは前回の記事に書いたので省略します。
リリースは今の所Kotlin 1.7
になる予定です。
これによって様々なライブラリでvalue class
サポートが進むと考えると今から非常に楽しみです。
追記
Kotlin 1.7
でリリースされました!