mapstruct / mapstruct/mapstruct

Kotlin: Issue when mapping primitive parameters

オープン
#2,365 コメント 0 件 リアクション 6 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

主要言語
Java
スター
7.7k
フォーク
1.1k
PR マージ指標
30日以内にマージされた PR はありません

説明

I didn't have time to create a minimal example and compare Java/Kotlin but if you have a method like this:

Kotlin:

@Mapping(target = "nested.myFlag", source = "someFlag")
fun map(irrelevant: Source, Boolean someFlag): Target

Java:

public class Target {
  public Nested nested;
}

public class Nested {
  public Boolean myFlag;
}

Mapstruct will fail with:

Can't map parameter "boolean someFlag" to "Nested nested". Consider to declare/implement a mapping method: "Nested map(boolean value)".
  1. The message isn't exactly correct, it should rather be: Can't map parameter "boolean someFlag" to "Boolean myFlag". Consider to declare/implement a mapping method: "Boolean map(boolean value)".
  2. I would expect MapStruct to have no problem mapping a primitive boolean to a wrapper Boolean (might be related to Kotlin vs. Java Boolean)
  3. If I'm not mistaken, this works when both booleans are in the source/target objects but not when the source boolean is a method parameter

This does not work:

fun map(boolean: Boolean): Boolean? = boolean

Workaround (nullable Boolean):

@Mapping(target = "nested.myFlag", source = "someFlag")
fun map(irrelevant: Source, Boolean? someFlag): Target

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

まず、プリミティブな Boolean パラメーターを持つ Kotlin mapper のシグネチャーを再現し、issue で説明されている同等の Java ケースと比較します。パラメーターがネストされた Boolean のターゲットに解決されるか、また診断が Boolean myFlag を示すかを確認します。完了とは、動作とエラーメッセージが期待されるプリミティブからラッパーへのマッピングと一致することです。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
java, kotlin
領域
tooling
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
説明が足りない
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。