diff --git a/processor/src/main/java/org/mapstruct/ap/model/common/Type.java b/processor/src/main/java/org/mapstruct/ap/model/common/Type.java index c9763e22d..93c50bf92 100644 --- a/processor/src/main/java/org/mapstruct/ap/model/common/Type.java +++ b/processor/src/main/java/org/mapstruct/ap/model/common/Type.java @@ -32,6 +32,7 @@ import javax.lang.model.element.Modifier; import javax.lang.model.element.Name; import javax.lang.model.element.TypeElement; import javax.lang.model.element.VariableElement; +import javax.lang.model.type.TypeKind; import javax.lang.model.type.TypeMirror; import javax.lang.model.util.Elements; import javax.lang.model.util.Types; @@ -72,6 +73,8 @@ public class Type extends ModelElement implements Comparable { private final boolean isCollectionType; private final boolean isMapType; private final boolean isImported; + private final boolean isVoid; + private final List enumConstants; private List getters = null; @@ -103,6 +106,7 @@ public class Type extends ModelElement implements Comparable { this.isCollectionType = isCollectionType; this.isMapType = isMapType; this.isImported = isImported; + this.isVoid = typeMirror.getKind().equals( TypeKind.VOID ); if ( isEnumType ) { enumConstants = new ArrayList(); @@ -154,6 +158,10 @@ public class Type extends ModelElement implements Comparable { return isEnumType; } + public boolean isVoid() { + return isVoid; + } + /** * Returns this type's enum constants in case it is an enum, an empty list otherwise. */ diff --git a/processor/src/main/java/org/mapstruct/ap/model/common/TypeFactory.java b/processor/src/main/java/org/mapstruct/ap/model/common/TypeFactory.java index 1f8009e61..547409cc9 100644 --- a/processor/src/main/java/org/mapstruct/ap/model/common/TypeFactory.java +++ b/processor/src/main/java/org/mapstruct/ap/model/common/TypeFactory.java @@ -193,7 +193,10 @@ public class TypeFactory { */ public Type classTypeOf(Type type) { TypeMirror typeToUse; - if ( type.isPrimitive() ) { + if ( type.isVoid() ) { + return null; + } + else if ( type.isPrimitive() ) { typeToUse = typeUtils.boxedClass( (PrimitiveType) type.getTypeMirror() ).asType(); } else { diff --git a/processor/src/test/java/org/mapstruct/ap/test/collection/forged/CollectionMapper.java b/processor/src/test/java/org/mapstruct/ap/test/collection/forged/CollectionMapper.java index 7462a4f19..fc52c88cb 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/collection/forged/CollectionMapper.java +++ b/processor/src/test/java/org/mapstruct/ap/test/collection/forged/CollectionMapper.java @@ -18,14 +18,27 @@ */ package org.mapstruct.ap.test.collection.forged; +import java.util.Set; import org.mapstruct.Mapper; +import org.mapstruct.TargetType; import org.mapstruct.factory.Mappers; @Mapper -public interface CollectionMapper { +public abstract class CollectionMapper { - CollectionMapper INSTANCE = Mappers.getMapper( CollectionMapper.class ); + public static final CollectionMapper INSTANCE = Mappers.getMapper( CollectionMapper.class ); - Target sourceToTarget(Source source); - Source targetToSource(Target target); + public abstract Target sourceToTarget(Source source); + public abstract Source targetToSource(Target target); + + + // this method is added to reproduce issue 306 + protected void dummy1( Set arg ) { + throw new RuntimeException(); + } + + // this method is added to reproduce issue 306 + protected Set dummy2( Object object, @TargetType Class clazz ) { + throw new RuntimeException(); + } } diff --git a/processor/src/test/java/org/mapstruct/ap/test/collection/forged/CollectionMappingTest.java b/processor/src/test/java/org/mapstruct/ap/test/collection/forged/CollectionMappingTest.java index 8b680bbdc..13a2073f2 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/collection/forged/CollectionMappingTest.java +++ b/processor/src/test/java/org/mapstruct/ap/test/collection/forged/CollectionMappingTest.java @@ -34,7 +34,7 @@ import org.mapstruct.ap.util.Collections; * * @author Sjaak Derksen */ -@IssueKey("4") +@IssueKey("4, 306") @RunWith(AnnotationProcessorTestRunner.class) public class CollectionMappingTest {