diff --git a/processor/src/main/java/org/mapstruct/ap/processor/MapperCreationProcessor.java b/processor/src/main/java/org/mapstruct/ap/processor/MapperCreationProcessor.java index a9b8cf467..be9a79ba5 100644 --- a/processor/src/main/java/org/mapstruct/ap/processor/MapperCreationProcessor.java +++ b/processor/src/main/java/org/mapstruct/ap/processor/MapperCreationProcessor.java @@ -1075,7 +1075,7 @@ public class MapperCreationProcessor implements ModelElementProcessor { + private final T wrapped; + + public GenericWrapper(T someType) { + this.wrapped = someType; + } + + public T getWrapped() { + return wrapped; + } +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/references/ReferencedMapperTest.java b/processor/src/test/java/org/mapstruct/ap/test/references/ReferencedMapperTest.java index 6c8486511..139d2c325 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/references/ReferencedMapperTest.java +++ b/processor/src/test/java/org/mapstruct/ap/test/references/ReferencedMapperTest.java @@ -86,17 +86,20 @@ public class ReferencedMapperTest extends MapperTestBase { @Test @IssueKey( "136" ) - @WithClasses( { SourceTargetMapperWithPrimitives.class, SourceWithWrappers.class, TargetWithPrimitives.class } ) + @WithClasses( { SourceTargetMapperWithPrimitives.class, SourceWithWrappers.class, TargetWithPrimitives.class, + GenericWrapper.class } ) public void shouldMapPrimitivesWithCustomMapper() { SourceWithWrappers source = new SourceWithWrappers(); source.setProp1( new SomeType( "42" ) ); source.setProp2( new SomeType( "1701" ) ); source.setProp3( new SomeType( "true" ) ); + source.setProp4( new GenericWrapper( new SomeType( "x" ) ) ); TargetWithPrimitives result = SourceTargetMapperWithPrimitives.INSTANCE.sourceToTarget( source ); assertThat( result.getProp1() ).isEqualTo( 42 ); assertThat( result.getProp2() ).isEqualTo( 1701 ); assertThat( result.isProp3() ).isEqualTo( true ); + assertThat( result.getProp4() ).isEqualTo( 'x' ); } } diff --git a/processor/src/test/java/org/mapstruct/ap/test/references/SourceTargetMapperWithPrimitives.java b/processor/src/test/java/org/mapstruct/ap/test/references/SourceTargetMapperWithPrimitives.java index e3189b0c9..4e650a2b0 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/references/SourceTargetMapperWithPrimitives.java +++ b/processor/src/test/java/org/mapstruct/ap/test/references/SourceTargetMapperWithPrimitives.java @@ -44,7 +44,14 @@ public abstract class SourceTargetMapperWithPrimitives { else if ( clazz == boolean.class ) { return (T) Boolean.valueOf( wrapper.getValue() ); } + else if ( clazz == char.class ) { + return (T) Character.valueOf( wrapper.getValue().charAt( 0 ) ); + } return null; } + + public T unwrapGenericWrapper(GenericWrapper source, @TargetType Class targetType) { + return source.getWrapped(); + } } diff --git a/processor/src/test/java/org/mapstruct/ap/test/references/SourceWithWrappers.java b/processor/src/test/java/org/mapstruct/ap/test/references/SourceWithWrappers.java index 4b9a81968..92574ed5c 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/references/SourceWithWrappers.java +++ b/processor/src/test/java/org/mapstruct/ap/test/references/SourceWithWrappers.java @@ -26,6 +26,7 @@ public class SourceWithWrappers { private SomeType prop1; private SomeType prop2; private SomeType prop3; + private GenericWrapper prop4; public SomeType getProp1() { return prop1; @@ -51,4 +52,11 @@ public class SourceWithWrappers { this.prop3 = prop3; } + public GenericWrapper getProp4() { + return prop4; + } + + public void setProp4(GenericWrapper prop4) { + this.prop4 = prop4; + } } diff --git a/processor/src/test/java/org/mapstruct/ap/test/references/TargetWithPrimitives.java b/processor/src/test/java/org/mapstruct/ap/test/references/TargetWithPrimitives.java index 12fb466c0..adb84eeb6 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/references/TargetWithPrimitives.java +++ b/processor/src/test/java/org/mapstruct/ap/test/references/TargetWithPrimitives.java @@ -26,6 +26,7 @@ public class TargetWithPrimitives { private int prop1; private long prop2; private boolean prop3; + private char prop4; public int getProp1() { return prop1; @@ -50,4 +51,12 @@ public class TargetWithPrimitives { public void setProp3(boolean prop3) { this.prop3 = prop3; } + + public char getProp4() { + return prop4; + } + + public void setProp4(char prop4) { + this.prop4 = prop4; + } }