Hi !
I am playing a little with vavr (http://www.vavr.io) and mapstruct, but if I try to map beans with vavr lists, it fails with a stackoverflow error, even if I provide an implementation.
Mapper:
@Mapper
public interface PersonMapper {
@Mappings(
@Mapping(source = "age", target = "ageOfPerson")
)
PersonEntity toEntity(PersonDto dto);
java.util.List<PersonEntity> toEntities(java.util.List<PersonDto> dtos);
// Cause a stackoverlow. Why ?
// List<PersonEntity> toVavrEntityList(List<PersonDto> dtos);
// The same !
// default List<PersonEntity> toVavrEntityList(List<PersonDto> dtos){
// return List.ofAll(toEntities(dtos.asJava()));
// }
@Mappings(
@Mapping(source = "ageOfPerson", target = "age")
)
PersonDto toDto(PersonEntity entity);
java.util.List<PersonDto> toDtos(java.util.List<PersonEntity> entities);
default java.util.List<PersonDto> toDtosWithFancyRules(java.util.List<PersonEntity> entities) {
return toDtos(entities).stream()
.map(person -> person.toBuilder().age(person.getAge() * 2).build())
.collect(Collectors.toList());
}
}
Error:
.../lightplayground/mapstruct/PersonMapper.java:11: error: Internal error in the mapping processor: java.la.StackOverflowError
at jdk.compiler/com.sun.tools.javac.util.Name.toString(Name.java:152)
at jdk.compiler/com.sun.tools.javac.util.Name.charAt(Name.java:66)
at java.base/java.util.regex.Pattern$Slice.match(Pattern.java:4082)
at java.base/java.util.regex.Pattern$Begin.match(Pattern.java:3656)
at java.base/java.util.regex.Matcher.match(Matcher.java:1755)
at java.base/java.util.regex.Matcher.matches(Matcher.java:713)
at org.mapstruct.ap.spi.DefaultBuilderProvider.shouldIgnore(DefaultBuilderProvider.java:281)
at org.mapstruct.ap.spi.DefaultBuilderProvider.findBuildMethods(DefaultBuilderProvider.java:229)
at org.mapstruct.ap.spi.DefaultBuilderProvider.findBuilderInfo(DefaultBuilderProvider.java:167)
at org.mapstruct.ap.spi.DefaultBuilderProvider.findBuilderInfo(DefaultBuilderProvider.java:96)
at org.mapstruct.ap.internal.model.common.TypeFactory.findBuilder(TypeFactory.java:530)
at org.mapstruct.ap.internal.model.common.TypeFactory.getType(TypeFactory.java:189)
at org.mapstruct.ap.internal.model.common.TypeFactory.getType(TypeFactory.java:180)
at org.mapstruct.ap.internal.model.common.BuilderType.create(BuilderType.java:98)
at org.mapstruct.ap.internal.model.common.Type.<init>(Type.java:160)
at org.mapstruct.ap.internal.model.common.TypeFactory.getType(TypeFactory.java:280)
at org.mapstruct.ap.internal.model.common.TypeFactory.getType(TypeFactory.java:180)
at org.mapstruct.ap.internal.model.common.BuilderType.create(BuilderType.java:98)
at org.mapstruct.ap.internal.model.common.Type.<init>(Type.java:160)
at org.mapstruct.ap.internal.model.common.TypeFactory.getType(TypeFactory.java:280)
at org.mapstruct.ap.internal.model.common.TypeFactory.getType(TypeFactory.java:180)
at org.mapstruct.ap.internal.model.common.BuilderType.create(BuilderType.java:98)
at org.mapstruct.ap.internal.model.common.Type.<init>(Type.java:160)
at org.mapstruct.ap.internal.model.common.TypeFactory.getType(TypeFactory.java:280)
at org.mapstruct.ap.internal.model.common.TypeFactory.getType(TypeFactory.java:180)
at org.mapstruct.ap.internal.model.common.BuilderType.create(BuilderType.java:98)
at org.mapstruct.ap.internal.model.common.Type.<init>(Type.java:160)
at org.mapstruct.ap.internal.model.common.TypeFactory.getType(TypeFactory.java:280)
...
And beans are very simples. You can find a working example online:
Repo:
https://github.com/remipassmoilesel/mapstruct-issue-03-2019
Mapper:
https://github.com/remipassmoilesel/mapstruct-issue-03-2019/blob/master/src/main/java/org/remipassmoilesel/lightplayground/mapstruct/PersonMapper.java
Beans:
https://github.com/remipassmoilesel/mapstruct-issue-03-2019/tree/master/src/main/java/org/remipassmoilesel/lightplayground/mapstruct
Basic test:
https://github.com/remipassmoilesel/mapstruct-issue-03-2019/blob/master/src/test/java/org/remipassmoilesel/lightplayground/mapstruct/MapstructTest.java
Thanks for your help, and this awesome work on MapStruct !
Hi !
I am playing a little with vavr (http://www.vavr.io) and mapstruct, but if I try to map beans with vavr lists, it fails with a stackoverflow error, even if I provide an implementation.
Mapper:
Error:
And beans are very simples. You can find a working example online:
Repo:
https://github.com/remipassmoilesel/mapstruct-issue-03-2019
Mapper:
https://github.com/remipassmoilesel/mapstruct-issue-03-2019/blob/master/src/main/java/org/remipassmoilesel/lightplayground/mapstruct/PersonMapper.java
Beans:
https://github.com/remipassmoilesel/mapstruct-issue-03-2019/tree/master/src/main/java/org/remipassmoilesel/lightplayground/mapstruct
Basic test:
https://github.com/remipassmoilesel/mapstruct-issue-03-2019/blob/master/src/test/java/org/remipassmoilesel/lightplayground/mapstruct/MapstructTest.java
Thanks for your help, and this awesome work on MapStruct !