-
-
Notifications
You must be signed in to change notification settings - Fork 1k
Closed
Description
Expected behavior
Generate different 'inner' methods when mapping expressions require this, as done by verion 1.5.5.Final.
Actual behavior
With two @Mapping methods requiring different deep sources, the same method is used to map the lower type which is incorrect.
Steps to reproduce the problem
The following classes and mapping demonstrate the issue:
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
public class MapTest {
public static class SubSub1 {
public String field;
}
public static class Sub {
public SubSub1 subSub1;
public SubSub1 subSub2;
}
public static class Main {
public Sub sub;
}
public static class MappedSub {
public String field;
}
public static class MainMapped {
public MappedSub mappedSub;
}
@Mapper
interface MainMapper {
@Mapping(target = "mappedSub.field", source= "sub.subSub1.field")
MainMapped mapMain1(Main main);
@Mapping(target = "mappedSub.field", source= "sub.subSub2.field")
MainMapped mapMain2(Main main);
}
public static void main(String[] args) {
Main main = new Main();
main.sub = new Sub();
main.sub.subSub1 = new SubSub1();
main.sub.subSub1.field = "field1";
main.sub.subSub2 = new SubSub1();
main.sub.subSub2.field = "field2";
MainMapped mapped1 = Mappers.getMapper(MainMapper.class).mapMain1(main);
MainMapped mapped2 = Mappers.getMapper(MainMapper.class).mapMain2(main);
System.out.println(mapped1.mappedSub.field);
System.out.println(mapped2.mappedSub.field);
}
}With 1.5.5.Final mapMain1 will use subToMappedSub and mapMain2 will use subToMappedSub1. Output is field1, field2.
With 1.6.0 both mapMain1 and 2 use subToMappedSub() which is not expected. Output is field1, field1.
MapStruct Version
1.6.0
dsubelman