diff --git a/integrationtest/src/test/java/org/mapstruct/itest/tests/ImmutablesBuilderTest.java b/integrationtest/src/test/java/org/mapstruct/itest/tests/ImmutablesBuilderTest.java
new file mode 100644
index 000000000..e8d3922fc
--- /dev/null
+++ b/integrationtest/src/test/java/org/mapstruct/itest/tests/ImmutablesBuilderTest.java
@@ -0,0 +1,31 @@
+/**
+ * Copyright 2012-2017 Gunnar Morling (http://www.gunnarmorling.de/)
+ * and/or other contributors as indicated by the @authors tag. See the
+ * copyright.txt file in the distribution for a full listing of all
+ * contributors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.mapstruct.itest.tests;
+
+import org.junit.runner.RunWith;
+import org.mapstruct.itest.testutil.runner.ProcessorSuite;
+import org.mapstruct.itest.testutil.runner.ProcessorSuiteRunner;
+
+/**
+ * @author Filip Hrisafov
+ */
+@RunWith( ProcessorSuiteRunner.class )
+@ProcessorSuite( baseDir = "immutablesBuilderTest" )
+public class ImmutablesBuilderTest {
+}
diff --git a/integrationtest/src/test/resources/immutablesBuilderTest/pom.xml b/integrationtest/src/test/resources/immutablesBuilderTest/pom.xml
new file mode 100644
index 000000000..4906dc997
--- /dev/null
+++ b/integrationtest/src/test/resources/immutablesBuilderTest/pom.xml
@@ -0,0 +1,42 @@
+
+
+
+ 4.0.0
+
+
+ org.mapstruct
+ mapstruct-it-parent
+ 1.0.0
+ ../pom.xml
+
+
+ immutablesIntegrationTest
+ jar
+
+
+
+ org.immutables
+ value
+ provided
+
+
+
diff --git a/integrationtest/src/test/resources/immutablesBuilderTest/src/main/java/org/mapstruct/itest/immutables/Address.java b/integrationtest/src/test/resources/immutablesBuilderTest/src/main/java/org/mapstruct/itest/immutables/Address.java
new file mode 100644
index 000000000..2e96845e6
--- /dev/null
+++ b/integrationtest/src/test/resources/immutablesBuilderTest/src/main/java/org/mapstruct/itest/immutables/Address.java
@@ -0,0 +1,26 @@
+/**
+ * Copyright 2012-2017 Gunnar Morling (http://www.gunnarmorling.de/)
+ * and/or other contributors as indicated by the @authors tag. See the
+ * copyright.txt file in the distribution for a full listing of all
+ * contributors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.mapstruct.itest.immutables;
+
+import org.immutables.value.Value;
+
+@Value.Immutable
+public interface Address {
+ String getAddressLine();
+}
diff --git a/integrationtest/src/test/resources/immutablesBuilderTest/src/main/java/org/mapstruct/itest/immutables/AddressDto.java b/integrationtest/src/test/resources/immutablesBuilderTest/src/main/java/org/mapstruct/itest/immutables/AddressDto.java
new file mode 100644
index 000000000..7accf8559
--- /dev/null
+++ b/integrationtest/src/test/resources/immutablesBuilderTest/src/main/java/org/mapstruct/itest/immutables/AddressDto.java
@@ -0,0 +1,40 @@
+/**
+ * Copyright 2012-2017 Gunnar Morling (http://www.gunnarmorling.de/)
+ * and/or other contributors as indicated by the @authors tag. See the
+ * copyright.txt file in the distribution for a full listing of all
+ * contributors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.mapstruct.itest.immutables;
+
+public class AddressDto {
+
+ private String addressLine;
+
+ public AddressDto() {
+
+ }
+
+ public AddressDto(String addressLine) {
+ this.addressLine = addressLine;
+ }
+
+ public String getAddressLine() {
+ return addressLine;
+ }
+
+ public void setAddressLine(String addressLine) {
+ this.addressLine = addressLine;
+ }
+}
diff --git a/integrationtest/src/test/resources/immutablesBuilderTest/src/main/java/org/mapstruct/itest/immutables/Person.java b/integrationtest/src/test/resources/immutablesBuilderTest/src/main/java/org/mapstruct/itest/immutables/Person.java
new file mode 100644
index 000000000..295102394
--- /dev/null
+++ b/integrationtest/src/test/resources/immutablesBuilderTest/src/main/java/org/mapstruct/itest/immutables/Person.java
@@ -0,0 +1,28 @@
+/**
+ * Copyright 2012-2017 Gunnar Morling (http://www.gunnarmorling.de/)
+ * and/or other contributors as indicated by the @authors tag. See the
+ * copyright.txt file in the distribution for a full listing of all
+ * contributors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.mapstruct.itest.immutables;
+
+import org.immutables.value.Value;
+
+@Value.Immutable
+public interface Person {
+ String getName();
+ int getAge();
+ Address getAddress();
+}
diff --git a/integrationtest/src/test/resources/immutablesBuilderTest/src/main/java/org/mapstruct/itest/immutables/PersonDto.java b/integrationtest/src/test/resources/immutablesBuilderTest/src/main/java/org/mapstruct/itest/immutables/PersonDto.java
new file mode 100644
index 000000000..99027926b
--- /dev/null
+++ b/integrationtest/src/test/resources/immutablesBuilderTest/src/main/java/org/mapstruct/itest/immutables/PersonDto.java
@@ -0,0 +1,58 @@
+/**
+ * Copyright 2012-2017 Gunnar Morling (http://www.gunnarmorling.de/)
+ * and/or other contributors as indicated by the @authors tag. See the
+ * copyright.txt file in the distribution for a full listing of all
+ * contributors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.mapstruct.itest.immutables;
+
+public class PersonDto {
+ private String name;
+ private int age;
+ private AddressDto address;
+
+ public PersonDto() {
+ }
+
+ public PersonDto(String name, int age, AddressDto address) {
+ this.name = name;
+ this.age = age;
+ this.address = address;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getAge() {
+ return age;
+ }
+
+ public void setAge(int age) {
+ this.age = age;
+ }
+
+ public AddressDto getAddress() {
+ return address;
+ }
+
+ public void setAddress(AddressDto address) {
+ this.address = address;
+ }
+}
diff --git a/integrationtest/src/test/resources/immutablesBuilderTest/src/main/java/org/mapstruct/itest/immutables/PersonMapper.java b/integrationtest/src/test/resources/immutablesBuilderTest/src/main/java/org/mapstruct/itest/immutables/PersonMapper.java
new file mode 100644
index 000000000..b52821fe6
--- /dev/null
+++ b/integrationtest/src/test/resources/immutablesBuilderTest/src/main/java/org/mapstruct/itest/immutables/PersonMapper.java
@@ -0,0 +1,32 @@
+/**
+ * Copyright 2012-2017 Gunnar Morling (http://www.gunnarmorling.de/)
+ * and/or other contributors as indicated by the @authors tag. See the
+ * copyright.txt file in the distribution for a full listing of all
+ * contributors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.mapstruct.itest.immutables;
+
+import org.mapstruct.Mapper;
+import org.mapstruct.ReportingPolicy;
+import org.mapstruct.factory.Mappers;
+
+@Mapper(unmappedTargetPolicy = ReportingPolicy.ERROR)
+public interface PersonMapper {
+
+ PersonMapper INSTANCE = Mappers.getMapper( PersonMapper.class );
+
+ Person fromDto(PersonDto personDto);
+ PersonDto toDto(Person personDto);
+}
diff --git a/integrationtest/src/test/resources/immutablesBuilderTest/src/test/java/org/mapstruct/itest/immutables/ImmutablesMapperTest.java b/integrationtest/src/test/resources/immutablesBuilderTest/src/test/java/org/mapstruct/itest/immutables/ImmutablesMapperTest.java
new file mode 100644
index 000000000..9b526f1a5
--- /dev/null
+++ b/integrationtest/src/test/resources/immutablesBuilderTest/src/test/java/org/mapstruct/itest/immutables/ImmutablesMapperTest.java
@@ -0,0 +1,55 @@
+/**
+ * Copyright 2012-2017 Gunnar Morling (http://www.gunnarmorling.de/)
+ * and/or other contributors as indicated by the @authors tag. See the
+ * copyright.txt file in the distribution for a full listing of all
+ * contributors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.mapstruct.itest.immutables;
+
+import org.junit.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Test for generation of Lombok Builder Mapper implementations
+ *
+ * @author Eric Martineau
+ */
+public class ImmutablesMapperTest {
+
+ @Test
+ public void testSimpleImmutableBuilderHappyPath() {
+ PersonDto personDto = PersonMapper.INSTANCE.toDto( ImmutablePerson.builder()
+ .age( 33 )
+ .name( "Bob" )
+ .address( ImmutableAddress.builder()
+ .addressLine( "Wild Drive" )
+ .build() )
+ .build() );
+ assertThat( personDto.getAge() ).isEqualTo( 33 );
+ assertThat( personDto.getName() ).isEqualTo( "Bob" );
+ assertThat( personDto.getAddress() ).isNotNull();
+ assertThat( personDto.getAddress().getAddressLine() ).isEqualTo( "Wild Drive" );
+ }
+
+ @Test
+ public void testLombokToImmutable() {
+ Person person = PersonMapper.INSTANCE.fromDto( new PersonDto( "Bob", 33, new AddressDto( "Wild Drive" ) ) );
+ assertThat( person.getAge() ).isEqualTo( 33 );
+ assertThat( person.getName() ).isEqualTo( "Bob" );
+ assertThat( person.getAddress() ).isNotNull();
+ assertThat( person.getAddress().getAddressLine() ).isEqualTo( "Wild Drive" );
+ }
+}
diff --git a/parent/pom.xml b/parent/pom.xml
index e87a80569..57ee90735 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -199,6 +199,11 @@
lombok
1.16.18
+
+ org.immutables
+ value
+ 2.5.6
+