Generated code does not compile when updating collections

32 views
Skip to first unread message

jan.v...@jdsu.com

unread,
Jun 16, 2015, 10:40:54 AM6/16/15
to selma...@googlegroups.com
Another issue I found with the same classes as shown in my previous post (Person/PersonDto/Address/AddressDto) .
I modified the mapping to be (added two bold lines):

@Mapper(

    withCustomFields
= {
       
@Field({"org.gradle.Person.address.street", "org.gradle.PersonDto.addressStreet"}),
       
@Field({"org.gradle.Person.address.zipCode","org.gradle.PersonDto.addressZipCode"}),
       
@Field({"org.gradle.Person.address.city",   "org.gradle.PersonDto.addressCity"}),
       
@Field({"org.gradle.Person.address.country","org.gradle.PersonDto.addressCountry"})
   
}
)
public interface PersonMapper {
   
Person asModel( PersonDto personDto );
   
PersonDto asDto( Person person);
   
    Person updateModel( PersonDto from, Person to);
   
PersonDto updateDto( Person from, PersonDto to);

}


The generated code (see attached file) includes two build errors (highlighted in red):

  @Override
  public final Person updateModel(PersonDto in, Person out) {
    if (in != null) {
      if (out == null) {
        out = new org.gradle.Person();
      }
      if (in.getAdditionalAddresses() != null) {
        java.util.ArrayList<org.gradle.Address> aadditionaladdressesTmpCollection = new java.util.ArrayList<org.gradle.Address>(in.getAdditionalAddresses().size());
        out.setAdditionalAddresses(aadditionaladdressesTmpCollection);
        for (org.gradle.AddressDto aadditionaladdressesItem : in.getAdditionalAddresses()) {
          aadditionaladdressesTmpCollection.add(asAddress(aadditionaladdressesItem, out()));
        }

and

  @Override
  public final PersonDto updateDto(Person in, PersonDto out) {
    if (in != null) {
      if (out == null) {
        out = new org.gradle.PersonDto();
      }
      if (in.getAdditionalAddresses() != null) {
        java.util.ArrayList<org.gradle.AddressDto> aadditionaladdressesTmpCollection = new java.util.ArrayList<org.gradle.AddressDto>(in.getAdditionalAddresses().size());
        out.setAdditionalAddresses(aadditionaladdressesTmpCollection);
        for (org.gradle.Address aadditionaladdressesItem : in.getAdditionalAddresses()) {
          aadditionaladdressesTmpCollection.add(asAddressDto(aadditionaladdressesItem, out()));
        }
      }

PersonMapperSelmaGeneratedClass.java

Séven Le Mesle

unread,
Jun 16, 2015, 7:34:31 PM6/16/15
to selma...@googlegroups.com
Ok this bug is due to bad behavior when using an update mapper with collections, arrays and maps. 
Selma does not support thins kind of update for now but the code is trying to generate an update method for the nested bean.

I have opened and fixed this bug here https://github.com/xebia-france/selma/issues/58 
It should be available in snapshot build.
Reply all
Reply to author
Forward
0 new messages