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.4ktlint
その他
- リファクタリング
- カバレッジ表示の追加
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指定を追加した。