Skip to content
This repository has been archived by the owner on Jan 20, 2023. It is now read-only.

Releases: ProjectMapK/Shared

Update Kotlin.

11 Apr 16:25
d1c5b36
Compare
Choose a tag to compare

Update libs.

23 Dec 12:27
ee7f0b5
Compare
Choose a tag to compare

Kotlin 1.4.21へアップデート。

Update Kotlin and refactors.

20 Sep 11:20
58566c1
Compare
Choose a tag to compare

内容

  • Kotlin 1.4.10にアップデート
  • 呼び出し対象がコンストラクタかつ引数が完全に初期化されていて、かつ条件に合致する場合、Javaのコンストラクタ/メソッドを直接呼び出すことでオーバーヘッドを低減
    • コンストラクタの場合
    • クラスからコンパニオンオブジェクトに定義したメソッドを取得した(= インスタンス有りで初期化した)場合
  • プリミティブ配列を用いることでオーバーヘッドを低減

Update Kotlin and refactors.

29 Aug 03:59
4bb28fb
Compare
Choose a tag to compare

ライブラリアップデート

  • Kotlin 1.4
  • ktlint

その他

  • リファクタリング
  • カバレッジ表示の追加

Fine-grained optimization.

23 May 11:34
61a398e
Compare
Choose a tag to compare
  • ArgumentBucket生成時、toListasListとして処理コストを低減
  • KFunctionForCall生成時、ループをまとめることで処理コストを低減
  • パラメータ名変換処理で、「変換が無い場合null = 処理しない」とすることで処理コストを低減

Improved processing efficiency.

17 May 09:08
561258a
Compare
Choose a tag to compare

内容

  • 初期化チェックの効率化
    • 値がnullでなければ初期化されていると見做してよいことから、初期化チェックの省略
    • 値がnullでなければnullabilityチェックは不要なため順序の入れ替え
  • ArgumentBucketimmutable化に伴い、InitializationStatusManagerの削除
    • 状態管理の必要性が無くなったためArgumentBucketで一度初期化すればよいように修正

Adding an interface to the adapter.

17 May 00:00
91e8bcc
Compare
Choose a tag to compare

内容

  • マップ時にキーの重複が考えられない場合を想定し、forcePut関数を追加
  • valueを遅延初期化するputIfAbsent関数を追加

Commonization and optimization of functions.

16 May 15:21
7264eab
Compare
Choose a tag to compare

処理の最適化

  • コンパニオンオブジェクトから関数を取得する処理を最適化
  • 初期化処理を最適化

共通処理の追加

ライブラリ内で使いまわせるよう、頻出する処理を共通化した。

その他

  • フォーマット修正
  • ライセンス修正

Support for mapping to nested classes.

08 May 20:26
0985a5b
Compare
Choose a tag to compare

機能追加

以下のように、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.CamelNameJoiner.KebabNameJoiner.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.

18 Apr 16:29
9efd50f
Compare
Choose a tag to compare

ライブラリ更新

  • Kotlin 1.3.72へアップデート
    • "gradle-plugin"で無駄に行っていたバージョン指定を修正
  • JUnit Jupiter 5.6.2へアップデート

その他

テストが状態によらず成功することを確認するため、PER_CLASS指定を追加した。