diff --git a/processor/src/main/java/org/mapstruct/ap/internal/model/PropertyMapping.java b/processor/src/main/java/org/mapstruct/ap/internal/model/PropertyMapping.java index 9e22f69e0..fa12d0b97 100644 --- a/processor/src/main/java/org/mapstruct/ap/internal/model/PropertyMapping.java +++ b/processor/src/main/java/org/mapstruct/ap/internal/model/PropertyMapping.java @@ -522,7 +522,7 @@ public class PropertyMapping extends ModelElement { name = Strings.getSaveVariableName( name, ctx.getNamesOfMappingsToGenerate() ); if ( ( sourceType.isCollectionType() || sourceType.isArrayType() ) - && ( targetType.isCollectionType() || targetType.isArrayType() ) ) { + && ( targetType.isIterableType() ) ) { // copy mapper configuration from the source method, its the same mapper MapperConfiguration config = method.getMapperConfiguration(); diff --git a/processor/src/test/java/org/mapstruct/ap/test/bugs/_775/IterableContainer.java b/processor/src/test/java/org/mapstruct/ap/test/bugs/_775/IterableContainer.java new file mode 100644 index 000000000..1565af2ab --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/bugs/_775/IterableContainer.java @@ -0,0 +1,34 @@ +/** + * Copyright 2012-2016 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.ap.test.bugs._775; + +/** + * @author Andreas Gudian + */ +public class IterableContainer { + private Iterable values; + + public void setValues(Iterable values) { + this.values = values; + } + + public Iterable getValues() { + return values; + } +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/bugs/_775/IterableWithBoundedElementTypeTest.java b/processor/src/test/java/org/mapstruct/ap/test/bugs/_775/IterableWithBoundedElementTypeTest.java new file mode 100644 index 000000000..407cb8beb --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/bugs/_775/IterableWithBoundedElementTypeTest.java @@ -0,0 +1,57 @@ +/** + * Copyright 2012-2016 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.ap.test.bugs._775; + +import static org.fest.assertions.Assertions.assertThat; + +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; + +/** + * Verifies: + * + * + * @author Andreas Gudian + */ +@RunWith(AnnotationProcessorTestRunner.class) +@IssueKey("775") +@WithClasses({ + MapperWithForgedIterableMapping.class, + ListContainer.class, + IterableContainer.class +}) +public class IterableWithBoundedElementTypeTest { + + @Test + public void createsForgedMethodForIterableLowerBoundInteger() { + ListContainer source = new ListContainer(); + + source.setValues( Arrays.asList( "42", "47" ) ); + IterableContainer result = MapperWithForgedIterableMapping.INSTANCE.toContainerWithIterable( source ); + + assertThat( result.getValues() ).contains( Integer.valueOf( 42 ), Integer.valueOf( 47 ) ); + } +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/bugs/_775/ListContainer.java b/processor/src/test/java/org/mapstruct/ap/test/bugs/_775/ListContainer.java new file mode 100644 index 000000000..92eafd51f --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/bugs/_775/ListContainer.java @@ -0,0 +1,37 @@ +/** + * Copyright 2012-2016 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.ap.test.bugs._775; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Andreas Gudian + */ +public class ListContainer { + private List values = new ArrayList(); + + public List getValues() { + return values; + } + + public void setValues(List values) { + this.values = values; + } +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/bugs/_775/MapperWithCustomListMapping.java b/processor/src/test/java/org/mapstruct/ap/test/bugs/_775/MapperWithCustomListMapping.java new file mode 100644 index 000000000..2cab1fa84 --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/bugs/_775/MapperWithCustomListMapping.java @@ -0,0 +1,46 @@ +/** + * Copyright 2012-2016 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.ap.test.bugs._775; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * @author Andreas Gudian + */ +@Mapper +public abstract class MapperWithCustomListMapping { + public static final MapperWithCustomListMapping INSTANCE = + Mappers.getMapper( MapperWithCustomListMapping.class ); + + public abstract IterableContainer toContainerWithIterable(ListContainer source); + + protected List hexListToIntList(Collection source) { + List iterable = new ArrayList( source.size() ); + for ( String string : source ) { + iterable.add( Integer.parseInt( string, 16 ) ); + } + + return iterable; + } +}