Releases: ProjectMapK/Shared
Update Kotlin.
Update libs.
Kotlin 1.4.21
へアップデート。
Update Kotlin and refactors.
内容
Kotlin 1.4.10
にアップデート- 呼び出し対象がコンストラクタかつ引数が完全に初期化されていて、かつ条件に合致する場合、
Java
のコンストラクタ/メソッドを直接呼び出すことでオーバーヘッドを低減- コンストラクタの場合
- クラスからコンパニオンオブジェクトに定義したメソッドを取得した(= インスタンス有りで初期化した)場合
- プリミティブ配列を用いることでオーバーヘッドを低減
Update Kotlin and refactors.
ライブラリアップデート
Kotlin 1.4
ktlint
その他
- リファクタリング
- カバレッジ表示の追加
Fine-grained optimization.
ArgumentBucket
生成時、toList
をasList
として処理コストを低減KFunctionForCall
生成時、ループをまとめることで処理コストを低減- パラメータ名変換処理で、「変換が無い場合
null
= 処理しない」とすることで処理コストを低減
Improved processing efficiency.
内容
- 初期化チェックの効率化
- 値が
null
でなければ初期化されていると見做してよいことから、初期化チェックの省略 - 値が
null
でなければnullability
チェックは不要なため順序の入れ替え
- 値が
ArgumentBucket
のimmutable
化に伴い、InitializationStatusManager
の削除- 状態管理の必要性が無くなったため
ArgumentBucket
で一度初期化すればよいように修正
- 状態管理の必要性が無くなったため
Adding an interface to the adapter.
内容
- マップ時にキーの重複が考えられない場合を想定し、
forcePut
関数を追加 value
を遅延初期化するputIfAbsent関数を追加
Commonization and optimization of functions.
処理の最適化
- コンパニオンオブジェクトから関数を取得する処理を最適化
- 初期化処理を最適化
共通処理の追加
ライブラリ内で使いまわせるよう、頻出する処理を共通化した。
その他
- フォーマット修正
- ライセンス修正
Support for mapping to nested classes.
機能追加
以下のように、Dst
の引数に複数の引数を要求する型が有った場合にも呼び出せるように全体の構造の修正を行った。
data class InnerDst(val foo: Any, val bar: Any)
data class Dst(val baz: InnerDst, val qux: Any)
ネストしたクラスへのマッピングについて
ネストしたクラスへのマッピングは、パラメータにKParameterFlatten
アノテーションを付与することで行う。
ここで呼ばれる関数は、KConstructor
アノテーションを付与したものとなる。
以下のように宣言した場合、function
は引数名としてbazFoo
, bazBar
, qux
の3つを要求する。
data class InnerDst(val foo: Any, val bar: Any)
data class Dst(@KParameterFlatten val baz: InnerDst, val qux: Any)
val function: KFunctionForCall<Dst> = KFunctionForCall(::Dst)
プレフィックスが必要ない場合
KParameterFlatten
の処理では、デフォルトでフィールド名をプレフィックスにする。
フィールド名をプレフィックスにする必要が無い場合、fieldNameToPrefix
を指定すればよい。
以下の例では、function
は引数名としてfoo
, bar
, qux
の3つを要求する。
data class InnerDst(val foo: Any, val bar: Any)
data class Dst(
@KParameterFlatten(fieldNameToPrefix = false)
val baz: InnerDst,
val qux: Any
)
val function: KFunctionForCall<Dst> = KFunctionForCall(::Dst, ::toKebabMethod)
パラメータ名変換が絡む場合
KParameterFlatten
の処理では、デフォルトでパラメータ名結合にキャメルケースを用いる。
Src
のネーミングがケバブケースだった場合など、結合方法を変更する必要が有る場合は、nameJoiner
パラメータにNameJoiner
クラスを継承したobject
を渡すことで、結合方法を変更できる。
NameJoiner
は、デフォルトではNameJoiner.Camel
、NameJoiner.Kebab
、NameJoiner.Snake
の3種類を用意している。
以下の例では、function
は引数名としてbaz-foo
, baz-bar
, qux
の3つを要求する。
data class InnerDst(val foo: Any, val bar: Any)
data class Dst(
@KParameterFlatten(nameJoiner = NameJoiner.Kebab::class)
val baz: InnerDst,
val qux: Any
)
val function: KFunctionForCall<Dst> = KFunctionForCall(::Dst, ::toKebabMethod)
関数の呼び出し方について
今までShared
モジュールではKParameter
をキーに引数をバインドすることで関数呼び出しを行っていたが、これからは引数名をキーに引数をバインドすることで関数呼び出しを行う形となる。
その他修正
- 今回の変更により外から呼ばれなくなったものを
internal
化 gradle
で、アノテーションライブラリのスコープが無駄に広かった問題を修正- アノテーションで
@MustBeDocumented
が抜けていたため修正 - エイリアス等によって引数名が重複した場合
KFunctionForCall
の宣言時点で落ちるように修正
Update libralies.
ライブラリ更新
Kotlin 1.3.72
へアップデート"gradle-plugin"
で無駄に行っていたバージョン指定を修正
JUnit Jupiter 5.6.2
へアップデート
その他
テストが状態によらず成功することを確認するため、PER_CLASS
指定を追加した。