From bd2c206f7f7fb8eadb62b368694c1e4cea4aff6c Mon Sep 17 00:00:00 2001 From: Sjaak Derksen Date: Wed, 29 Aug 2018 21:11:22 +0200 Subject: [PATCH] #1590 ArrayList missing as import for NVMS.RETURN_DEFAULT (#1598) --- ...perForCollectionsAndMapsWithNullCheck.java | 3 ++ .../mapstruct/ap/test/bugs/_1590/Book.java | 9 ++++ .../ap/test/bugs/_1590/BookMapper.java | 21 ++++++++++ .../ap/test/bugs/_1590/BookShelf.java | 20 +++++++++ .../ap/test/bugs/_1590/BookShelfMapper.java | 21 ++++++++++ .../ap/test/bugs/_1590/Issue1590Test.java | 41 +++++++++++++++++++ 6 files changed, 115 insertions(+) create mode 100644 processor/src/test/java/org/mapstruct/ap/test/bugs/_1590/Book.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/bugs/_1590/BookMapper.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/bugs/_1590/BookShelf.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/bugs/_1590/BookShelfMapper.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/bugs/_1590/Issue1590Test.java diff --git a/processor/src/main/java/org/mapstruct/ap/internal/model/assignment/SetterWrapperForCollectionsAndMapsWithNullCheck.java b/processor/src/main/java/org/mapstruct/ap/internal/model/assignment/SetterWrapperForCollectionsAndMapsWithNullCheck.java index f38e90b71..9d8795243 100644 --- a/processor/src/main/java/org/mapstruct/ap/internal/model/assignment/SetterWrapperForCollectionsAndMapsWithNullCheck.java +++ b/processor/src/main/java/org/mapstruct/ap/internal/model/assignment/SetterWrapperForCollectionsAndMapsWithNullCheck.java @@ -63,6 +63,9 @@ public class SetterWrapperForCollectionsAndMapsWithNullCheck extends WrapperForC if (isDirectAssignment() || getSourcePresenceCheckerReference() == null ) { imported.addAll( getNullCheckLocalVarType().getImportTypes() ); } + if ( isMapNullToDefault() && ( targetType.getImplementationType() != null ) ) { + imported.add( targetType.getImplementationType() ); + } return imported; } diff --git a/processor/src/test/java/org/mapstruct/ap/test/bugs/_1590/Book.java b/processor/src/test/java/org/mapstruct/ap/test/bugs/_1590/Book.java new file mode 100644 index 000000000..53355ee60 --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/bugs/_1590/Book.java @@ -0,0 +1,9 @@ +/* + * 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._1590; + +public class Book { +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/bugs/_1590/BookMapper.java b/processor/src/test/java/org/mapstruct/ap/test/bugs/_1590/BookMapper.java new file mode 100644 index 000000000..31acd1885 --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/bugs/_1590/BookMapper.java @@ -0,0 +1,21 @@ +/* + * 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._1590; + +import java.util.List; + +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +@Mapper +public interface BookMapper { + + BookMapper INSTANCE = Mappers.getMapper( BookMapper.class ); + + Book map(Book book); + + List map(List books); +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/bugs/_1590/BookShelf.java b/processor/src/test/java/org/mapstruct/ap/test/bugs/_1590/BookShelf.java new file mode 100644 index 000000000..056b409d4 --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/bugs/_1590/BookShelf.java @@ -0,0 +1,20 @@ +/* + * 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._1590; + +import java.util.List; + +public class BookShelf { + private List books; + + public List getBooks() { + return books; + } + + public void setBooks(List books) { + this.books = books; + } +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/bugs/_1590/BookShelfMapper.java b/processor/src/test/java/org/mapstruct/ap/test/bugs/_1590/BookShelfMapper.java new file mode 100644 index 000000000..46f53f646 --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/bugs/_1590/BookShelfMapper.java @@ -0,0 +1,21 @@ +/* + * 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._1590; + +import org.mapstruct.Mapper; +import org.mapstruct.NullValueCheckStrategy; +import org.mapstruct.NullValueMappingStrategy; +import org.mapstruct.factory.Mappers; + +@Mapper(uses = BookMapper.class, + nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, + nullValueMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT) +public interface BookShelfMapper { + + BookShelfMapper INSTANCE = Mappers.getMapper( BookShelfMapper.class ); + + BookShelf map(BookShelf bookShelf); +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/bugs/_1590/Issue1590Test.java b/processor/src/test/java/org/mapstruct/ap/test/bugs/_1590/Issue1590Test.java new file mode 100644 index 000000000..30613d1a2 --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/bugs/_1590/Issue1590Test.java @@ -0,0 +1,41 @@ +/* + * 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._1590; + +import java.util.Arrays; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mapstruct.ap.testutil.IssueKey; +import org.mapstruct.ap.testutil.WithClasses; +import org.mapstruct.ap.testutil.runner.AnnotationProcessorTestRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author Sjaak Derksen + */ +@WithClasses({ + BookMapper.class, + BookShelfMapper.class, + Book.class, + BookShelf.class +}) +@RunWith(AnnotationProcessorTestRunner.class) +@IssueKey("1590") +public class Issue1590Test { + + @Test + public void shouldTestMappingLocalDates() { + BookShelf source = new BookShelf(); + source.setBooks( Arrays.asList( new Book() ) ); + + BookShelf target = BookShelfMapper.INSTANCE.map( source ); + + assertThat( target ).isNotNull(); + assertThat( target.getBooks() ).isNotNull(); + } +}