mapstruct
mapstruct copied to clipboard
The resulting implementation class does not have a set value
Expected behavior
public class SysManagerApplicationMapImpl implements SysManagerApplicationMap {
public SysManagerApplicationMapImpl() {
}
public List<SysManagerApplicationListModel> toModelList(List<SysManagerApplicationDO> sysManagerApplicationDO) {
if (sysManagerApplicationDO == null) {
return null;
} else {
List<SysManagerApplicationListModel> list = new ArrayList(sysManagerApplicationDO.size());
Iterator var3 = sysManagerApplicationDO.iterator();
while(var3.hasNext()) {
SysManagerApplicationDO sysManagerApplicationDO1 = (SysManagerApplicationDO)var3.next();
list.add(this.sysManagerApplicationDOToSysManagerApplicationListModel(sysManagerApplicationDO1));
}
return list;
}
}
protected SysManagerApplicationListModel sysManagerApplicationDOToSysManagerApplicationListModel(SysManagerApplicationDO sysManagerApplicationDO) {
if (sysManagerApplicationDO == null) {
return null;
} else {
SysManagerApplicationListModel sysManagerApplicationListModel = new SysManagerApplicationListModel();
sysManagerApplicationListModel.setAppName(sysManagerApplicationDO.getAppName())
return sysManagerApplicationListModel;
}
}
}
Actual behavior
public class SysManagerApplicationMapImpl implements SysManagerApplicationMap {
public SysManagerApplicationMapImpl() {
}
public List<SysManagerApplicationListModel> toModelList(List<SysManagerApplicationDO> sysManagerApplicationDO) {
if (sysManagerApplicationDO == null) {
return null;
} else {
List<SysManagerApplicationListModel> list = new ArrayList(sysManagerApplicationDO.size());
Iterator var3 = sysManagerApplicationDO.iterator();
while(var3.hasNext()) {
SysManagerApplicationDO sysManagerApplicationDO1 = (SysManagerApplicationDO)var3.next();
list.add(this.sysManagerApplicationDOToSysManagerApplicationListModel(sysManagerApplicationDO1));
}
return list;
}
}
protected SysManagerApplicationListModel sysManagerApplicationDOToSysManagerApplicationListModel(SysManagerApplicationDO sysManagerApplicationDO) {
if (sysManagerApplicationDO == null) {
return null;
} else {
SysManagerApplicationListModel sysManagerApplicationListModel = new SysManagerApplicationListModel();
return sysManagerApplicationListModel;
}
}
}
Steps to reproduce the problem
1. pom.xml configuration
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.5.5.Final</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
2. class
@Mapper
public interface SysManagerApplicationMap {
SysManagerApplicationMap INSTANCE = Mappers.getMapper(SysManagerApplicationMap.class);
List<SysManagerApplicationListModel> toModelList(List<SysManagerApplicationDO> sysManagerApplicationDO);
}
MapStruct Version
1.5.5.Final
@mawl01 the code you've shared does not look like code that MapStruct generates. It looks like code that has been decompiled from bytecode. Can you please share an example project where we can reproduce this
Facing the same issue using 1.6.0.Beta1 where deeply nested source objects are missing the setter codes in the target object.
Situation
Mapping(source = "a.b.c.d1", target = "name") D2 aToD2(A a);
Expected Behaviour
D2 d1ToD2(D1 d1) {
if (d1 == null) {
return;
}
D2 d2 = new D2();
d2.setName( d1.getName() );
return d2;
}
Actual Behaviour
D2 d1ToD2(D1 d1) {
if (d1 == null) {
return;
}
D2 d2 = new D2();
// missing d2.setName( d1.getName() );
return d2;
}
As a result, the target object is being created but with its fields not populated.
MapStruct Version
1.6.0.Beta1
@alantanlc As I wrote in #3575, could you please provide a reproducer?
- https://github.com/mapstruct/mapstruct/issues/3575#issuecomment-2113311647
@thunderhook ok i will share a reproducible example soon, thank you!
Closing this for now. Once we have a reproducer from @alantanlc we'll reopen it.