diff --git a/processor/src/main/java/org/mapstruct/ap/MapperGenerationVisitor.java b/processor/src/main/java/org/mapstruct/ap/MapperGenerationVisitor.java index 9c51222ca..0fee23e4d 100644 --- a/processor/src/main/java/org/mapstruct/ap/MapperGenerationVisitor.java +++ b/processor/src/main/java/org/mapstruct/ap/MapperGenerationVisitor.java @@ -21,6 +21,7 @@ package org.mapstruct.ap; import java.beans.Introspector; import java.io.IOException; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; @@ -69,7 +70,7 @@ public class MapperGenerationVisitor extends ElementKindVisitor6 { private final TypeUtil typeUtil; private final Options options; - private boolean mappingErronuous = false; + private boolean mappingErroneous = false; public MapperGenerationVisitor(ProcessingEnvironment processingEnvironment, Options options) { this.processingEnvironment = processingEnvironment; @@ -83,7 +84,7 @@ public class MapperGenerationVisitor extends ElementKindVisitor6 { public Void visitTypeAsInterface(TypeElement element, Void p) { Mapper model = retrieveModel( element ); - if ( !mappingErronuous ) { + if ( !mappingErroneous ) { String sourceFileName = element.getQualifiedName() + IMPLEMENTATION_SUFFIX; writeModelToSourceFile( sourceFileName, model ); } @@ -254,7 +255,7 @@ public class MapperGenerationVisitor extends ElementKindVisitor6 { method.getExecutable() ); - mappingErronuous = true; + mappingErroneous = true; if ( reverseMethod == null || reversePropertyMappingMethod != null || @@ -349,7 +350,29 @@ public class MapperGenerationVisitor extends ElementKindVisitor6 { for ( ExecutableElement method : methodsIn( element.getEnclosedElements() ) ) { Parameter parameter = retrieveParameter( method ); Type returnType = retrieveReturnType( method ); - List properties = retrieveMappedProperties( method ); + + if ( declaringMapper == null ) { + if ( parameter.getType().isIterableType() && !returnType.isIterableType() ) { + reportError( "Can't generate mapping method from iterable type to non-iterable ype.", method ); + } + if ( !parameter.getType().isIterableType() && returnType.isIterableType() ) { + reportError( "Can't generate mapping method from non-iterable type to iterable ype.", method ); + } + if ( parameter.getType().isPrimitive() ) { + reportError( "Can't generate mapping method with primitive parameter type.", method ); + } + if ( returnType.isPrimitive() ) { + reportError( "Can't generate mapping method with primitive return type.", method ); + } + + if ( mappingErroneous ) { + continue; + } + } + + //retrieve property mappings if an implementation for the method needs to be generated + List properties = declaringMapper == null ? retrieveMappedProperties( method ) : Collections + .emptyList(); methods.add( new Method( @@ -361,16 +384,6 @@ public class MapperGenerationVisitor extends ElementKindVisitor6 { properties ) ); - - if ( declaringMapper == null ) { - if ( parameter.getType().isIterableType() && !returnType.isIterableType() ) { - reportError( "Can't generate mapping method from iterable type to non-iterable ype.", method ); - } - - if ( !parameter.getType().isIterableType() && returnType.isIterableType() ) { - reportError( "Can't generate mapping method from non-iterable type to iterable ype.", method ); - } - } } MapperPrism mapperPrism = MapperPrism.getInstanceOn( element ); @@ -481,6 +494,6 @@ public class MapperGenerationVisitor extends ElementKindVisitor6 { private void reportError(String message, Element element) { processingEnvironment.getMessager().printMessage( Kind.ERROR, message, element ); - mappingErronuous = true; + mappingErroneous = true; } } diff --git a/processor/src/main/java/org/mapstruct/ap/model/source/Mapping.java b/processor/src/main/java/org/mapstruct/ap/model/source/Mapping.java index 77551bc7b..0f748b2c3 100644 --- a/processor/src/main/java/org/mapstruct/ap/model/source/Mapping.java +++ b/processor/src/main/java/org/mapstruct/ap/model/source/Mapping.java @@ -35,4 +35,12 @@ public class Mapping { public String getTargetName() { return targetName; } + + @Override + public String toString() { + return "Mapping {" + + "\n sourceName='" + sourceName + "\'," + + "\n targetName='" + targetName + "\'," + + "\n}"; + } } diff --git a/processor/src/test/java/org/mapstruct/ap/test/erronuous/ErronuousMapper.java b/processor/src/test/java/org/mapstruct/ap/test/erroneous/ErroneousMapper.java similarity index 86% rename from processor/src/test/java/org/mapstruct/ap/test/erronuous/ErronuousMapper.java rename to processor/src/test/java/org/mapstruct/ap/test/erroneous/ErroneousMapper.java index 8d0527601..9041587b5 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/erronuous/ErronuousMapper.java +++ b/processor/src/test/java/org/mapstruct/ap/test/erroneous/ErroneousMapper.java @@ -16,14 +16,18 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.mapstruct.ap.test.erronuous; +package org.mapstruct.ap.test.erroneous; import org.mapstruct.Mapper; @Mapper -public interface ErronuousMapper { +public interface ErroneousMapper { Target sourceToTarget(Source source); Source targetToSource(Target target); + + long sourceToLong(Source source); + + Source longToSource(long id); } diff --git a/processor/src/test/java/org/mapstruct/ap/test/erronuous/MappedPropertiesWithDifferentTypesTest.java b/processor/src/test/java/org/mapstruct/ap/test/erroneous/ErroneousMappingsTest.java similarity index 72% rename from processor/src/test/java/org/mapstruct/ap/test/erronuous/MappedPropertiesWithDifferentTypesTest.java rename to processor/src/test/java/org/mapstruct/ap/test/erroneous/ErroneousMappingsTest.java index 9e55a3096..c869a9ccb 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/erronuous/MappedPropertiesWithDifferentTypesTest.java +++ b/processor/src/test/java/org/mapstruct/ap/test/erroneous/ErroneousMappingsTest.java @@ -16,7 +16,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.mapstruct.ap.test.erronuous; +package org.mapstruct.ap.test.erroneous; import javax.tools.Diagnostic.Kind; @@ -28,18 +28,20 @@ import org.mapstruct.ap.testutil.compilation.annotation.Diagnostic; import org.mapstruct.ap.testutil.compilation.annotation.ExpectedCompilationOutcome; import org.testng.annotations.Test; -@WithClasses({ ErronuousMapper.class, Source.class, Target.class }) -public class MappedPropertiesWithDifferentTypesTest extends MapperTestBase { +@WithClasses({ ErroneousMapper.class, Source.class, Target.class }) +public class ErroneousMappingsTest extends MapperTestBase { @Test @IssueKey("6") @ExpectedCompilationOutcome( value = CompilationResult.FAILED, diagnostics = { - @Diagnostic(type = ErronuousMapper.class, kind = Kind.ERROR, line = 26), - @Diagnostic(type = ErronuousMapper.class, kind = Kind.ERROR, line = 28) + @Diagnostic(type = ErroneousMapper.class, kind = Kind.ERROR, line = 26), + @Diagnostic(type = ErroneousMapper.class, kind = Kind.ERROR, line = 28), + @Diagnostic(type = ErroneousMapper.class, kind = Kind.ERROR, line = 30), + @Diagnostic(type = ErroneousMapper.class, kind = Kind.ERROR, line = 32) } ) - public void shouldFailToGenerateMappingFromListToString() { + public void shouldFailToGenerateMappings() { } } diff --git a/processor/src/test/java/org/mapstruct/ap/test/erronuous/Source.java b/processor/src/test/java/org/mapstruct/ap/test/erroneous/Source.java similarity index 95% rename from processor/src/test/java/org/mapstruct/ap/test/erronuous/Source.java rename to processor/src/test/java/org/mapstruct/ap/test/erroneous/Source.java index 7ade6b879..9990cabe6 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/erronuous/Source.java +++ b/processor/src/test/java/org/mapstruct/ap/test/erroneous/Source.java @@ -16,7 +16,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.mapstruct.ap.test.erronuous; +package org.mapstruct.ap.test.erroneous; public class Source { diff --git a/processor/src/test/java/org/mapstruct/ap/test/erronuous/Target.java b/processor/src/test/java/org/mapstruct/ap/test/erroneous/Target.java similarity index 95% rename from processor/src/test/java/org/mapstruct/ap/test/erronuous/Target.java rename to processor/src/test/java/org/mapstruct/ap/test/erroneous/Target.java index 0eb284a31..3a47e2fbe 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/erronuous/Target.java +++ b/processor/src/test/java/org/mapstruct/ap/test/erroneous/Target.java @@ -16,7 +16,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.mapstruct.ap.test.erronuous; +package org.mapstruct.ap.test.erroneous; public class Target {