mapstruct / mapstruct/mapstruct

Kotlin: Issue when mapping primitive parameters

Aperta
#2,365 0 commenti 6 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Lingua principale
Java
Stelle
7.7k
Fork
1.1k
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

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

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia riproducendo la firma del mapper Kotlin con un parametro Boolean primitivo e confrontala con il caso Java equivalente descritto nell’issue. Conferma se il parametro viene risolto nella destinazione Boolean annidata e se la diagnostica indica Boolean myFlag; il lavoro è completato quando il comportamento e il messaggio di errore corrispondono al mapping da primitivo a wrapper previsto.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
java, kotlin
Ambito
tooling
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Da chiarire
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.