diff --git a/processor/src/main/java/org/mapstruct/ap/spi/DefaultAccessorNamingStrategy.java b/processor/src/main/java/org/mapstruct/ap/spi/DefaultAccessorNamingStrategy.java index 0744f7582..72b910d1e 100644 --- a/processor/src/main/java/org/mapstruct/ap/spi/DefaultAccessorNamingStrategy.java +++ b/processor/src/main/java/org/mapstruct/ap/spi/DefaultAccessorNamingStrategy.java @@ -102,6 +102,7 @@ public class DefaultAccessorNamingStrategy implements AccessorNamingStrategy { protected boolean isBuilderSetter(ExecutableElement method) { return method.getParameters().size() == 1 && !JAVA_JAVAX_PACKAGE.matcher( method.getEnclosingElement().asType().toString() ).matches() && + !isAdderMethod( method ) && //TODO The Types need to be compared with Types#isSameType(TypeMirror, TypeMirror) method.getReturnType().toString().equals( method.getEnclosingElement().asType().toString() ); } diff --git a/processor/src/test/java/org/mapstruct/ap/test/builder/simple/SimpleBuilderMapper.java b/processor/src/test/java/org/mapstruct/ap/test/builder/simple/SimpleBuilderMapper.java index 8ccb94c66..3b430b824 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/builder/simple/SimpleBuilderMapper.java +++ b/processor/src/test/java/org/mapstruct/ap/test/builder/simple/SimpleBuilderMapper.java @@ -18,11 +18,12 @@ */ package org.mapstruct.ap.test.builder.simple; +import org.mapstruct.CollectionMappingStrategy; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.Mappings; -@Mapper +@Mapper(collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED) public interface SimpleBuilderMapper { @Mappings({ diff --git a/processor/src/test/java/org/mapstruct/ap/test/builder/simple/SimpleImmutableBuilderTest.java b/processor/src/test/java/org/mapstruct/ap/test/builder/simple/SimpleImmutableBuilderTest.java index a2489753e..3bf9120f9 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/builder/simple/SimpleImmutableBuilderTest.java +++ b/processor/src/test/java/org/mapstruct/ap/test/builder/simple/SimpleImmutableBuilderTest.java @@ -18,6 +18,8 @@ */ package org.mapstruct.ap.test.builder.simple; +import java.util.Arrays; + import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -48,6 +50,7 @@ public class SimpleImmutableBuilderTest { SimpleMutablePerson source = new SimpleMutablePerson(); source.setAge( 3 ); source.setFullName( "Bob" ); + source.setChildren( Arrays.asList( "Alice", "Tom" ) ); SimpleImmutablePerson targetObject = mapper.toImmutable( source ); @@ -55,6 +58,7 @@ public class SimpleImmutableBuilderTest { assertThat( targetObject.getName() ).isEqualTo( "Bob" ); assertThat( targetObject.getJob() ).isEqualTo( "programmer" ); assertThat( targetObject.getCity() ).isEqualTo( "Bengalore" ); + assertThat( targetObject.getChildren() ).contains( "Alice", "Tom" ); } @Test diff --git a/processor/src/test/java/org/mapstruct/ap/test/builder/simple/SimpleImmutablePerson.java b/processor/src/test/java/org/mapstruct/ap/test/builder/simple/SimpleImmutablePerson.java index 3e6668d14..a4c98f8e0 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/builder/simple/SimpleImmutablePerson.java +++ b/processor/src/test/java/org/mapstruct/ap/test/builder/simple/SimpleImmutablePerson.java @@ -18,17 +18,22 @@ */ package org.mapstruct.ap.test.builder.simple; +import java.util.ArrayList; +import java.util.List; + public class SimpleImmutablePerson { private final String name; private final int age; private final String job; private final String city; + private final List children; SimpleImmutablePerson(Builder builder) { this.name = builder.name; this.age = builder.age; this.job = builder.job; this.city = builder.city; + this.children = new ArrayList( builder.children ); } public static Builder builder() { @@ -51,11 +56,16 @@ public class SimpleImmutablePerson { return city; } + public List getChildren() { + return children; + } + public static class Builder { private String name; private int age; private String job; private String city; + private List children = new ArrayList(); public Builder age(int age) { this.age = age; @@ -80,5 +90,14 @@ public class SimpleImmutablePerson { this.city = city; return this; } + + public List getChildren() { + throw new UnsupportedOperationException( "This is just a marker method" ); + } + + public Builder addChild(String child) { + this.children.add( child ); + return this; + } } } diff --git a/processor/src/test/java/org/mapstruct/ap/test/builder/simple/SimpleMutablePerson.java b/processor/src/test/java/org/mapstruct/ap/test/builder/simple/SimpleMutablePerson.java index 559f81d94..2e608b32f 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/builder/simple/SimpleMutablePerson.java +++ b/processor/src/test/java/org/mapstruct/ap/test/builder/simple/SimpleMutablePerson.java @@ -18,9 +18,12 @@ */ package org.mapstruct.ap.test.builder.simple; +import java.util.List; + public class SimpleMutablePerson { private String fullName; private int age; + private List children; public int getAge() { return age; @@ -37,4 +40,12 @@ public class SimpleMutablePerson { public void setFullName(String fullName) { this.fullName = fullName; } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } }