From 68b7c0494dd263b680ab004b72a8e1466ef0e282 Mon Sep 17 00:00:00 2001 From: sjaakd Date: Sun, 5 Jul 2020 09:41:47 +0200 Subject: [PATCH 1/3] #2139 reproducer --- .../ap/test/bugs/_2101/Issue2101Test.java | 5 ++++ .../_2101/Issue2102IgnoreAllButMapper.java | 30 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 processor/src/test/java/org/mapstruct/ap/test/bugs/_2101/Issue2102IgnoreAllButMapper.java diff --git a/processor/src/test/java/org/mapstruct/ap/test/bugs/_2101/Issue2101Test.java b/processor/src/test/java/org/mapstruct/ap/test/bugs/_2101/Issue2101Test.java index 36c2c32134..d8974394fe 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/bugs/_2101/Issue2101Test.java +++ b/processor/src/test/java/org/mapstruct/ap/test/bugs/_2101/Issue2101Test.java @@ -64,4 +64,9 @@ public void shouldMapSomeAdditionalTests2() { assertThat( target.value3 ).isEqualTo( "test" ); } + + @Test + @WithClasses(Issue2102IgnoreAllButMapper.class) + public void shouldCompile() { + } } diff --git a/processor/src/test/java/org/mapstruct/ap/test/bugs/_2101/Issue2102IgnoreAllButMapper.java b/processor/src/test/java/org/mapstruct/ap/test/bugs/_2101/Issue2102IgnoreAllButMapper.java new file mode 100644 index 0000000000..3c6975cbec --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/bugs/_2101/Issue2102IgnoreAllButMapper.java @@ -0,0 +1,30 @@ +package org.mapstruct.ap.test.bugs._2101; + +import org.mapstruct.BeanMapping; +import org.mapstruct.InheritConfiguration; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; + +@Mapper +public interface Issue2102IgnoreAllButMapper { + + @BeanMapping( ignoreByDefault = true ) + @Mapping(target = "value1") // but do map value1 + Target map1(Source source); + + @InheritConfiguration + @Mapping(target = "value1", source = "value2" ) + Target map2(Source source); + + //CHECKSTYLE:OFF + class Source { + public String value1; + public String value2; + } + + class Target { + public String value1; + } + //CHECKSTYLE:ON + +} From 2cf33fe1f40d8ce59fb3ac2d7a2eeeee9437eec1 Mon Sep 17 00:00:00 2001 From: sjaakd Date: Sun, 5 Jul 2020 09:52:29 +0200 Subject: [PATCH 2/3] #2139 solution --- .../internal/model/source/MappingMethodOptions.java | 4 ++-- .../mapstruct/ap/test/bugs/_2101/Issue2101Test.java | 13 ++++++++++++- .../bugs/_2101/Issue2102IgnoreAllButMapper.java | 3 +++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/processor/src/main/java/org/mapstruct/ap/internal/model/source/MappingMethodOptions.java b/processor/src/main/java/org/mapstruct/ap/internal/model/source/MappingMethodOptions.java index 4a06acdd4b..e0007949a9 100644 --- a/processor/src/main/java/org/mapstruct/ap/internal/model/source/MappingMethodOptions.java +++ b/processor/src/main/java/org/mapstruct/ap/internal/model/source/MappingMethodOptions.java @@ -238,10 +238,10 @@ private boolean isRedefined(Set redefinedNames, String inheritedName ) { } private boolean elementsAreContainedIn( String redefinedName, String inheritedName ) { - if ( redefinedName.startsWith( inheritedName ) ) { + if ( inheritedName != null && redefinedName.startsWith( inheritedName ) ) { // it is possible to redefine an exact matching source name, because the same source can be mapped to // multiple targets. It is not possible for target, but caught by the Set and equals methoded in - // MappingOptions + // MappingOptions. SourceName == null also could hint at redefinition if ( redefinedName.length() > inheritedName.length() ) { // redefined.lenght() > inherited.length(), first following character should be separator return '.' == redefinedName.charAt( inheritedName.length() ); diff --git a/processor/src/test/java/org/mapstruct/ap/test/bugs/_2101/Issue2101Test.java b/processor/src/test/java/org/mapstruct/ap/test/bugs/_2101/Issue2101Test.java index d8974394fe..9148184b25 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/bugs/_2101/Issue2101Test.java +++ b/processor/src/test/java/org/mapstruct/ap/test/bugs/_2101/Issue2101Test.java @@ -67,6 +67,17 @@ public void shouldMapSomeAdditionalTests2() { @Test @WithClasses(Issue2102IgnoreAllButMapper.class) - public void shouldCompile() { + public void shouldApplyIgnoreAllButTemplateOfMethod1() { + + Issue2102IgnoreAllButMapper.Source source = new Issue2102IgnoreAllButMapper.Source(); + source.value1 = "value1"; + source.value2 = "value2"; + + Issue2102IgnoreAllButMapper.Target target = Issue2102IgnoreAllButMapper.INSTANCE.map1( source ); + assertThat( target.value1 ).isEqualTo( "value1" ); + + target = Issue2102IgnoreAllButMapper.INSTANCE.map2( source ); + assertThat( target.value1 ).isEqualTo( "value2" ); + } } diff --git a/processor/src/test/java/org/mapstruct/ap/test/bugs/_2101/Issue2102IgnoreAllButMapper.java b/processor/src/test/java/org/mapstruct/ap/test/bugs/_2101/Issue2102IgnoreAllButMapper.java index 3c6975cbec..6ce0934380 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/bugs/_2101/Issue2102IgnoreAllButMapper.java +++ b/processor/src/test/java/org/mapstruct/ap/test/bugs/_2101/Issue2102IgnoreAllButMapper.java @@ -4,10 +4,13 @@ import org.mapstruct.InheritConfiguration; import org.mapstruct.Mapper; import org.mapstruct.Mapping; +import org.mapstruct.factory.Mappers; @Mapper public interface Issue2102IgnoreAllButMapper { + Issue2102IgnoreAllButMapper INSTANCE = Mappers.getMapper( Issue2102IgnoreAllButMapper.class ); + @BeanMapping( ignoreByDefault = true ) @Mapping(target = "value1") // but do map value1 Target map1(Source source); From ed92dfcfe3069bd093616794a06375633c1d1543 Mon Sep 17 00:00:00 2001 From: sjaakd Date: Sun, 5 Jul 2020 10:12:21 +0200 Subject: [PATCH 3/3] #2139 license --- .../ap/test/bugs/_2101/Issue2102IgnoreAllButMapper.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/processor/src/test/java/org/mapstruct/ap/test/bugs/_2101/Issue2102IgnoreAllButMapper.java b/processor/src/test/java/org/mapstruct/ap/test/bugs/_2101/Issue2102IgnoreAllButMapper.java index 6ce0934380..9634ed310b 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/bugs/_2101/Issue2102IgnoreAllButMapper.java +++ b/processor/src/test/java/org/mapstruct/ap/test/bugs/_2101/Issue2102IgnoreAllButMapper.java @@ -1,3 +1,8 @@ +/* + * Copyright MapStruct Authors. + * + * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ package org.mapstruct.ap.test.bugs._2101; import org.mapstruct.BeanMapping;