From 9753fdc17a1bf995ec690ae2d3167bcb7fe1accc Mon Sep 17 00:00:00 2001 From: Gunnar Morling Date: Wed, 21 Sep 2016 19:52:53 +0200 Subject: [PATCH] #765 Omitting "return" key word when returning from decorated void method --- .../ap/internal/model/DelegatingMethod.ftl | 2 +- .../ap/test/decorator/AddressDto.java | 7 +++++++ .../ap/test/decorator/DecoratorTest.java | 18 ++++++++++++++++++ .../ap/test/decorator/PersonMapper.java | 3 +++ 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/processor/src/main/resources/org/mapstruct/ap/internal/model/DelegatingMethod.ftl b/processor/src/main/resources/org/mapstruct/ap/internal/model/DelegatingMethod.ftl index e69c3099a..4c6ce86ab 100644 --- a/processor/src/main/resources/org/mapstruct/ap/internal/model/DelegatingMethod.ftl +++ b/processor/src/main/resources/org/mapstruct/ap/internal/model/DelegatingMethod.ftl @@ -20,7 +20,7 @@ --> @Override public <@includeModel object=returnType/> ${name}(<#list parameters as param><@includeModel object=param/><#if param_has_next>, ) <@throws/> { - return delegate.${name}( <#list parameters as param>${param.name}<#if param_has_next>, ); + <#if returnType.name != "void">return delegate.${name}( <#list parameters as param>${param.name}<#if param_has_next>, ); } <#macro throws> <@compress single_line=true> diff --git a/processor/src/test/java/org/mapstruct/ap/test/decorator/AddressDto.java b/processor/src/test/java/org/mapstruct/ap/test/decorator/AddressDto.java index 1fa3e953d..3b8dcf9cc 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/decorator/AddressDto.java +++ b/processor/src/test/java/org/mapstruct/ap/test/decorator/AddressDto.java @@ -22,6 +22,13 @@ public class AddressDto { private String addressLine; + public AddressDto() { + } + + public AddressDto(String addressLine) { + this.addressLine = addressLine; + } + public String getAddressLine() { return addressLine; } diff --git a/processor/src/test/java/org/mapstruct/ap/test/decorator/DecoratorTest.java b/processor/src/test/java/org/mapstruct/ap/test/decorator/DecoratorTest.java index 572dc5b17..05abcded8 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/decorator/DecoratorTest.java +++ b/processor/src/test/java/org/mapstruct/ap/test/decorator/DecoratorTest.java @@ -86,6 +86,24 @@ public class DecoratorTest { assertThat( addressDto.getAddressLine() ).isEqualTo( "42 Ocean View Drive" ); } + @Test + @WithClasses({ + PersonMapper.class, + PersonMapperDecorator.class + }) + @IssueKey("765") + public void shouldDelegateNonDecoratedVoidMethodsToDefaultImplementation() { + //given + AddressDto addressDto = new AddressDto( "42 Ocean View Drive" ); + + //when + Address address = new Address( "Main Street" ); + PersonMapper.INSTANCE.updateAddressFromDto( addressDto, address ); + + //then + assertThat( address.getAddressLine() ).isEqualTo( "42 Ocean View Drive" ); + } + @Test @WithClasses({ AnotherPersonMapper.class, diff --git a/processor/src/test/java/org/mapstruct/ap/test/decorator/PersonMapper.java b/processor/src/test/java/org/mapstruct/ap/test/decorator/PersonMapper.java index 4bcfc0d1c..883ab49bb 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/decorator/PersonMapper.java +++ b/processor/src/test/java/org/mapstruct/ap/test/decorator/PersonMapper.java @@ -21,6 +21,7 @@ package org.mapstruct.ap.test.decorator; import org.mapstruct.DecoratedWith; import org.mapstruct.Mapper; import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; import org.mapstruct.factory.Mappers; @Mapper @@ -33,4 +34,6 @@ public interface PersonMapper { PersonDto personToPersonDto(Person person); AddressDto addressToAddressDto(Address address); + + void updateAddressFromDto(AddressDto dto, @MappingTarget Address address); }