mapstruct / mapstruct/mapstruct
Support overloading for target
Open
@filiphr is already working on this.
Since Apr 20, 2017.
enhancement
- Dominant language
- Java
- Stars
- 7.7k
- Forks
- 1.1k
- PR merge metrics
- No merged PRs in 30d
Description
Mapstruct does support overloading of target setters(see: Issue892Test test) but choosing preferred type logic is based on getter type of target - not source, which looks a bit strange.
org.mapstruct.ap.internal.model.common.Type#getPropertyWriteAccessors: line 465
Please see unit test:
Source:
public class Source {
private Date updatedOn;
public Source(Date updatedOn) {
this.updatedOn = updatedOn;
}
public Date getUpdatedOn() {
return updatedOn;
}
public void setUpdatedOn(Date updatedOn) {
this.updatedOn = updatedOn;
}
}
Target:
public class Target {
private long updatedOn;
public long getUpdatedOn() {
return updatedOn;
}
public void setUpdatedOn( long updatedOn ) {
this.updatedOn = updatedOn;
}
public void setUpdatedOn( Date updatedOn ) {
if (updatedOn == null) {
return;
}
this.updatedOn = updatedOn.getTime();
}
}
Mapper:
@Mapper
public interface SourceTargetMapper {
SourceTargetMapper INSTANCE = Mappers.getMapper( SourceTargetMapper.class );
@Mapping(target = "updatedOn", source = "updatedOn")
Target sourceToTarget( Source source );
}
UnitTest:
@WithClasses({
SourceTargetMapper.class,
Source.class,
Target.class
})
@RunWith(AnnotationProcessorTestRunner.class)
public class OverloadingTest {
@Test
public void testShouldGenerateCorrectMapperImplementation() {
Source source = new Source( new Date() );
Target target = SourceTargetMapper.INSTANCE.sourceToTarget( source );
Assert.assertTrue( target.getUpdatedOn() > 0 );
}
}
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.