diff --git a/processor/src/main/java/org/mapstruct/ap/model/BeanMappingMethod.java b/processor/src/main/java/org/mapstruct/ap/model/BeanMappingMethod.java index 88968f500..4e414d380 100644 --- a/processor/src/main/java/org/mapstruct/ap/model/BeanMappingMethod.java +++ b/processor/src/main/java/org/mapstruct/ap/model/BeanMappingMethod.java @@ -27,8 +27,8 @@ import java.util.Map; import java.util.Set; import javax.lang.model.element.ExecutableElement; import javax.tools.Diagnostic; -import org.mapstruct.CollectionMappingStrategy; +import org.mapstruct.CollectionMappingStrategy; import org.mapstruct.ap.model.common.Parameter; import org.mapstruct.ap.model.common.Type; import org.mapstruct.ap.model.source.Mapping; @@ -54,7 +54,7 @@ public class BeanMappingMethod extends MappingMethod { private final FactoryMethod factoryMethod; - public static class Builder { + public static class Builder { private MappingContext ctx; private SourceMethod method; @@ -64,7 +64,7 @@ public class BeanMappingMethod extends MappingMethod { return this; } - public Builder souceMethod( SourceMethod sourceMethod ) { + public Builder souceMethod(SourceMethod sourceMethod) { this.method = sourceMethod; return this; } @@ -103,7 +103,7 @@ public class BeanMappingMethod extends MappingMethod { // the current target accessor can also be a getter method. // The following if block, checks if the target accessor should be overruled by an add method. if ( cmStrategy.equals( CollectionMappingStrategy.SETTER_PREFERRED ) - || cmStrategy.equals( CollectionMappingStrategy.ADDER_PREFERRED ) ) { + || cmStrategy.equals( CollectionMappingStrategy.ADDER_PREFERRED ) ) { // first check if there's a setter method. ExecutableElement adderMethod = null; @@ -115,7 +115,7 @@ public class BeanMappingMethod extends MappingMethod { } } else if ( Executables.isGetterMethod( targetAccessor ) ) { - // the current accessor is a getter (no setter available). But still, an add method is according + // the current accessor is a getter (no setter available). But still, an add method is according // to the above strategy (SETTER_PREFERRED || ADDER_PREFERRED) preferred over the getter. Type targetType = ctx.getTypeFactory().getReturnType( targetAccessor ); adderMethod = method.getResultType().getAdderForType( targetType, targetPropertyName ); @@ -135,41 +135,41 @@ public class BeanMappingMethod extends MappingMethod { PropertyMapping.PropertyMappingBuilder builder = new PropertyMapping.PropertyMappingBuilder(); propertyMapping = builder - .mappingContext( ctx ) - .souceMethod( method ) - .targetAccessor( targetAccessor ) - .targetPropertyName( targetPropertyName ) - .parameter( parameter ) - .build(); + .mappingContext( ctx ) + .souceMethod( method ) + .targetAccessor( targetAccessor ) + .targetPropertyName( targetPropertyName ) + .parameter( parameter ) + .build(); } else if ( Executables.isSetterMethod( targetAccessor ) - || Executables.isGetterMethod( targetAccessor ) ) { + || Executables.isGetterMethod( targetAccessor ) ) { if ( !mapping.getConstant().isEmpty() ) { // its a constant PropertyMapping.ConstantMappingBuilder builder = - new PropertyMapping.ConstantMappingBuilder(); + new PropertyMapping.ConstantMappingBuilder(); propertyMapping = builder - .mappingContext( ctx ) - .sourceMethod( method ) - .constantExpression( "\"" + mapping.getConstant() + "\"" ) - .targetAccessor( targetAccessor ) - .dateFormat( mapping.getDateFormat() ) - .qualifiers( mapping.getQualifiers() ) - .build(); + .mappingContext( ctx ) + .sourceMethod( method ) + .constantExpression( "\"" + mapping.getConstant() + "\"" ) + .targetAccessor( targetAccessor ) + .dateFormat( mapping.getDateFormat() ) + .qualifiers( mapping.getQualifiers() ) + .build(); } else if ( !mapping.getJavaExpression().isEmpty() ) { // its an expression PropertyMapping.JavaExpressionMappingBuilder builder = - new PropertyMapping.JavaExpressionMappingBuilder(); + new PropertyMapping.JavaExpressionMappingBuilder(); propertyMapping = builder - .mappingContext( ctx ) - .souceMethod( method ) - .javaExpression( mapping.getJavaExpression() ) - .targetAccessor( targetAccessor ) - .build(); + .mappingContext( ctx ) + .souceMethod( method ) + .javaExpression( mapping.getJavaExpression() ) + .targetAccessor( targetAccessor ) + .build(); } } } @@ -178,19 +178,19 @@ public class BeanMappingMethod extends MappingMethod { for ( Parameter sourceParameter : method.getSourceParameters() ) { PropertyMapping.PropertyMappingBuilder builder = new PropertyMapping.PropertyMappingBuilder(); PropertyMapping newPropertyMapping = builder - .mappingContext( ctx ) - .souceMethod( method ) - .targetAccessor( targetAccessor ) - .targetPropertyName( targetPropertyName ) - .parameter( sourceParameter ) - .build(); + .mappingContext( ctx ) + .souceMethod( method ) + .targetAccessor( targetAccessor ) + .targetPropertyName( targetPropertyName ) + .parameter( sourceParameter ) + .build(); if ( propertyMapping != null && newPropertyMapping != null ) { ctx.getMessager().printMessage( - Diagnostic.Kind.ERROR, - "Several possible source properties for target property \"" + targetPropertyName + - "\".", - method.getExecutable() + Diagnostic.Kind.ERROR, + "Several possible source properties for target property \"" + targetPropertyName + + "\".", + method.getExecutable() ); break; } @@ -209,11 +209,11 @@ public class BeanMappingMethod extends MappingMethod { Set targetProperties = Executables.getPropertyNames( targetAccessors ); reportErrorForUnmappedTargetPropertiesIfRequired( - method, - unmappedTargetPolicy, - targetProperties, - mappedTargetProperties, - ignoredTargetProperties + method, + unmappedTargetPolicy, + targetProperties, + mappedTargetProperties, + ignoredTargetProperties ); FactoryMethod factoryMethod = AssignmentFactory.createFactoryMethod( method.getReturnType(), ctx ); return new BeanMappingMethod( method, propertyMappings, factoryMethod ); @@ -235,7 +235,7 @@ public class BeanMappingMethod extends MappingMethod { ReportingPolicy annotationValue = ReportingPolicy.valueOf( mapperSettings.unmappedTargetPolicy() ); if ( setViaAnnotation - || ctx.getOptions().getUnmappedTargetPolicy() == null ) { + || ctx.getOptions().getUnmappedTargetPolicy() == null ) { return annotationValue; } else { @@ -271,34 +271,34 @@ public class BeanMappingMethod extends MappingMethod { if ( mappedProperty.getSourceParameterName() != null ) { Parameter sourceParameter = method.getSourceParameter( - mappedProperty.getSourceParameterName() + mappedProperty.getSourceParameterName() ); if ( sourceParameter == null ) { ctx.getMessager().printMessage( - Diagnostic.Kind.ERROR, - String.format( - "Method has no parameter named \"%s\".", - mappedProperty.getSourceParameterName() - ), - method.getExecutable(), - mappedProperty.getMirror(), - mappedProperty.getSourceAnnotationValue() + Diagnostic.Kind.ERROR, + String.format( + "Method has no parameter named \"%s\".", + mappedProperty.getSourceParameterName() + ), + method.getExecutable(), + mappedProperty.getMirror(), + mappedProperty.getSourceAnnotationValue() ); foundUnmappedProperty = true; } else { if ( !hasSourceProperty( sourceParameter, mappedProperty.getSourcePropertyName() ) ) { ctx.getMessager().printMessage( - Diagnostic.Kind.ERROR, - String.format( - "The type of parameter \"%s\" has no property named \"%s\".", - mappedProperty.getSourceParameterName(), - mappedProperty.getSourcePropertyName() - ), - method.getExecutable(), - mappedProperty.getMirror(), - mappedProperty.getSourceAnnotationValue() + Diagnostic.Kind.ERROR, + String.format( + "The type of parameter \"%s\" has no property named \"%s\".", + mappedProperty.getSourceParameterName(), + mappedProperty.getSourcePropertyName() + ), + method.getExecutable(), + mappedProperty.getMirror(), + mappedProperty.getSourceAnnotationValue() ); foundUnmappedProperty = true; } @@ -306,31 +306,31 @@ public class BeanMappingMethod extends MappingMethod { } else if ( mappedProperty.getConstant().isEmpty() - && mappedProperty.getJavaExpression().isEmpty() - && !hasSourceProperty( mappedProperty.getSourcePropertyName() ) ) { + && mappedProperty.getJavaExpression().isEmpty() + && !hasSourceProperty( mappedProperty.getSourcePropertyName() ) ) { ctx.getMessager().printMessage( - Diagnostic.Kind.ERROR, - String.format( - "No property named \"%s\" exists in source parameter(s).", - mappedProperty.getSourceName() - ), - method.getExecutable(), - mappedProperty.getMirror(), - mappedProperty.getSourceAnnotationValue() + Diagnostic.Kind.ERROR, + String.format( + "No property named \"%s\" exists in source parameter(s).", + mappedProperty.getSourceName() + ), + method.getExecutable(), + mappedProperty.getMirror(), + mappedProperty.getSourceAnnotationValue() ); foundUnmappedProperty = true; } if ( !targetProperties.contains( mappedProperty.getTargetName() ) ) { ctx.getMessager().printMessage( - Diagnostic.Kind.ERROR, - String.format( - "Unknown property \"%s\" in return type %s.", - mappedProperty.getTargetName(), - method.getResultType() - ), - method.getExecutable(), - mappedProperty.getMirror(), - mappedProperty.getTargetAnnotationValue() + Diagnostic.Kind.ERROR, + String.format( + "Unknown property \"%s\" in return type %s.", + mappedProperty.getTargetName(), + method.getResultType() + ), + method.getExecutable(), + mappedProperty.getMirror(), + mappedProperty.getTargetAnnotationValue() ); foundUnmappedProperty = true; } @@ -339,11 +339,11 @@ public class BeanMappingMethod extends MappingMethod { return !foundUnmappedProperty; } - private void reportErrorForUnmappedTargetPropertiesIfRequired( SourceMethod method, - ReportingPolicy unmappedTargetPolicy, - Set targetProperties, - Set mappedTargetProperties, - Set ignoredTargetProperties ) { + private void reportErrorForUnmappedTargetPropertiesIfRequired(SourceMethod method, + ReportingPolicy unmappedTargetPolicy, + Set targetProperties, + Set mappedTargetProperties, + Set ignoredTargetProperties) { Set unmappedTargetProperties = new HashSet(); @@ -355,18 +355,18 @@ public class BeanMappingMethod extends MappingMethod { if ( !unmappedTargetProperties.isEmpty() && unmappedTargetPolicy.requiresReport() ) { ctx.getMessager().printMessage( - unmappedTargetPolicy.getDiagnosticKind(), - MessageFormat.format( - "Unmapped target {0,choice,1#property|1 getters = parameter.getType().getGetters(); return Executables.getPropertyNames( getters ).contains( propertyName ); } @@ -384,8 +384,8 @@ public class BeanMappingMethod extends MappingMethod { } private BeanMappingMethod(SourceMethod method, - List propertyMappings, - FactoryMethod factoryMethod) { + List propertyMappings, + FactoryMethod factoryMethod) { super( method ); this.propertyMappings = propertyMappings; diff --git a/processor/src/main/java/org/mapstruct/ap/model/IterableMappingMethod.java b/processor/src/main/java/org/mapstruct/ap/model/IterableMappingMethod.java index eb5b573de..9ed811c20 100644 --- a/processor/src/main/java/org/mapstruct/ap/model/IterableMappingMethod.java +++ b/processor/src/main/java/org/mapstruct/ap/model/IterableMappingMethod.java @@ -18,11 +18,12 @@ */ package org.mapstruct.ap.model; -import org.mapstruct.ap.model.assignment.Assignment; import java.util.List; import java.util.Set; import javax.lang.model.type.TypeMirror; import javax.tools.Diagnostic; + +import org.mapstruct.ap.model.assignment.Assignment; import org.mapstruct.ap.model.assignment.SetterWrapper; import org.mapstruct.ap.model.common.Parameter; import org.mapstruct.ap.model.common.Type; @@ -41,57 +42,58 @@ public class IterableMappingMethod extends MappingMethod { private final FactoryMethod factoryMethod; private final boolean overridden; - public static class Builder { + public static class Builder { private Method method; private MappingContext ctx; private String dateFormat; private List qualifiers; - public Builder mappingContext( MappingContext mappingContext ) { + public Builder mappingContext(MappingContext mappingContext) { this.ctx = mappingContext; return this; } - public Builder method( Method sourceMethod ) { + public Builder method(Method sourceMethod) { this.method = sourceMethod; return this; } - public Builder dateFormat( String dateFormat ) { + public Builder dateFormat(String dateFormat) { this.dateFormat = dateFormat; return this; } - public Builder qualifiers( List qualifiers ) { + public Builder qualifiers(List qualifiers) { this.qualifiers = qualifiers; return this; } - public IterableMappingMethod build( ) { + public IterableMappingMethod build() { Type sourceElementType = - method.getSourceParameters().iterator().next().getType().getTypeParameters().get( 0 ); + method.getSourceParameters().iterator().next().getType().getTypeParameters().get( 0 ); Type targetElementType = - method.getResultType().getTypeParameters().get( 0 ); + method.getResultType().getTypeParameters().get( 0 ); String conversionStr = - Strings.getSaveVariableName( sourceElementType.getName(), method.getParameterNames() ); + Strings.getSaveVariableName( sourceElementType.getName(), method.getParameterNames() ); - Assignment assignment = ctx.getMappingResolver().getTargetAssignment( method, - "collection element", - sourceElementType, - targetElementType, - null, // there is no targetPropertyName - dateFormat, - qualifiers, - conversionStr + Assignment assignment = ctx.getMappingResolver().getTargetAssignment( + method, + "collection element", + sourceElementType, + targetElementType, + null, // there is no targetPropertyName + dateFormat, + qualifiers, + conversionStr ); if ( assignment == null ) { String message = String.format( - "Can't create implementation of method %s. Found no method nor built-in conversion for mapping " + "Can't create implementation of method %s. Found no method nor built-in conversion for mapping " + "source element type into target element type.", - method + method ); method.printMessage( ctx.getMessager(), Diagnostic.Kind.ERROR, message ); } @@ -169,7 +171,7 @@ public class IterableMappingMethod extends MappingMethod { } IterableMappingMethod other = (IterableMappingMethod) obj; - if ( !getResultType().equals( other.getResultType() ) ) { + if ( !getResultType().equals( other.getResultType() ) ) { return false; } @@ -177,9 +179,9 @@ public class IterableMappingMethod extends MappingMethod { return false; } - for (int i = 0; i < getSourceParameters().size(); i++ ) { + for ( int i = 0; i < getSourceParameters().size(); i++ ) { if ( !getSourceParameters().get( i ).getType().getTypeParameters().get( 0 ) - .equals( other.getSourceParameters().get( i ).getType().getTypeParameters().get( 0 ) ) ) { + .equals( other.getSourceParameters().get( i ).getType().getTypeParameters().get( 0 ) ) ) { return false; } } diff --git a/processor/src/main/java/org/mapstruct/ap/model/MapMappingMethod.java b/processor/src/main/java/org/mapstruct/ap/model/MapMappingMethod.java index 91b6f3bd1..037667ae8 100644 --- a/processor/src/main/java/org/mapstruct/ap/model/MapMappingMethod.java +++ b/processor/src/main/java/org/mapstruct/ap/model/MapMappingMethod.java @@ -18,11 +18,12 @@ */ package org.mapstruct.ap.model; -import org.mapstruct.ap.model.assignment.Assignment; import java.util.List; import java.util.Set; import javax.lang.model.type.TypeMirror; import javax.tools.Diagnostic; + +import org.mapstruct.ap.model.assignment.Assignment; import org.mapstruct.ap.model.assignment.LocalVarWrapper; import org.mapstruct.ap.model.common.Parameter; import org.mapstruct.ap.model.common.Type; @@ -42,7 +43,7 @@ public class MapMappingMethod extends MappingMethod { private final FactoryMethod factoryMethod; private final boolean overridden; - public static class Builder { + public static class Builder { private String keyDateFormat; private String valueDateFormat; @@ -51,32 +52,32 @@ public class MapMappingMethod extends MappingMethod { private Method method; private MappingContext ctx; - public Builder mappingContext( MappingContext mappingContext ) { + public Builder mappingContext(MappingContext mappingContext) { this.ctx = mappingContext; return this; } - public Builder method( Method sourceMethod ) { + public Builder method(Method sourceMethod) { this.method = sourceMethod; return this; } - public Builder keyDateFormat( String keyDateFormat ) { + public Builder keyDateFormat(String keyDateFormat) { this.keyDateFormat = keyDateFormat; return this; } - public Builder valueDateFormat( String valueDateFormat ) { + public Builder valueDateFormat(String valueDateFormat) { this.valueDateFormat = valueDateFormat; return this; } - public Builder keyQualifiers( List keyQualifiers ) { + public Builder keyQualifiers(List keyQualifiers) { this.keyQualifiers = keyQualifiers; return this; } - public Builder valueQualifiers( List valueQualifiers ) { + public Builder valueQualifiers(List valueQualifiers) { this.valueQualifiers = valueQualifiers; return this; } @@ -90,19 +91,22 @@ public class MapMappingMethod extends MappingMethod { Type keySourceType = sourceTypeParams.get( 0 ); Type keyTargetType = resultTypeParams.get( 0 ); - Assignment keyAssignment = ctx.getMappingResolver().getTargetAssignment( method, - "map key", - keySourceType, - keyTargetType, - null, // there is no targetPropertyName - keyDateFormat, - keyQualifiers, - "entry.getKey()" + Assignment keyAssignment = ctx.getMappingResolver().getTargetAssignment( + method, + "map key", + keySourceType, + keyTargetType, + null, // there is no targetPropertyName + keyDateFormat, + keyQualifiers, + "entry.getKey()" ); if ( keyAssignment == null ) { - String message = String.format( "Can't create implementation of method %s. Found no method nor " - + "built-in conversion for mapping source key type to target key type.", method ); + String message = String.format( + "Can't create implementation of method %s. Found no method nor " + + "built-in conversion for mapping source key type to target key type.", method + ); method.printMessage( ctx.getMessager(), Diagnostic.Kind.ERROR, message ); } @@ -110,19 +114,22 @@ public class MapMappingMethod extends MappingMethod { Type valueSourceType = sourceTypeParams.get( 1 ); Type valueTargetType = resultTypeParams.get( 1 ); - Assignment valueAssignment = ctx.getMappingResolver().getTargetAssignment( method, - "map value", - valueSourceType, - valueTargetType, - null, // there is no targetPropertyName - valueDateFormat, - valueQualifiers, - "entry.getValue()" + Assignment valueAssignment = ctx.getMappingResolver().getTargetAssignment( + method, + "map value", + valueSourceType, + valueTargetType, + null, // there is no targetPropertyName + valueDateFormat, + valueQualifiers, + "entry.getValue()" ); if ( valueAssignment == null ) { - String message = String.format( "Can't create implementation of method %s. Found no method nor " - + "built-in conversion for mapping source value type to target value type.", method ); + String message = String.format( + "Can't create implementation of method %s. Found no method nor " + + "built-in conversion for mapping source value type to target value type.", method + ); method.printMessage( ctx.getMessager(), Diagnostic.Kind.ERROR, message ); } @@ -137,7 +144,7 @@ public class MapMappingMethod extends MappingMethod { } private MapMappingMethod(Method method, Assignment keyAssignment, Assignment valueAssignment, - FactoryMethod factoryMethod) { + FactoryMethod factoryMethod) { super( method ); this.keyAssignment = keyAssignment; @@ -232,9 +239,9 @@ public class MapMappingMethod extends MappingMethod { return false; } - for (int i = 0; i < getSourceParameters().size(); i++ ) { + for ( int i = 0; i < getSourceParameters().size(); i++ ) { if ( !getSourceParameters().get( i ).getType().getTypeParameters().get( 0 ) - .equals( other.getSourceParameters().get( i ).getType().getTypeParameters().get( 0 ) ) ) { + .equals( other.getSourceParameters().get( i ).getType().getTypeParameters().get( 0 ) ) ) { return false; } } diff --git a/processor/src/main/java/org/mapstruct/ap/processor/MapperCreationProcessor.java b/processor/src/main/java/org/mapstruct/ap/processor/MapperCreationProcessor.java index 4b03c8595..cee4bf208 100644 --- a/processor/src/main/java/org/mapstruct/ap/processor/MapperCreationProcessor.java +++ b/processor/src/main/java/org/mapstruct/ap/processor/MapperCreationProcessor.java @@ -25,7 +25,6 @@ import java.util.List; import java.util.Map; import java.util.SortedSet; import java.util.TreeSet; - import javax.annotation.processing.Messager; import javax.lang.model.element.ExecutableElement; import javax.lang.model.element.TypeElement; @@ -70,7 +69,7 @@ public class MapperCreationProcessor implements ModelElementProcessor sourceModel) { @@ -82,16 +81,23 @@ public class MapperCreationProcessor implements ModelElementProcessor mapperReferences = initReferencedMappers( mapperTypeElement ); - MappingContext ctx = new MappingContext( - typeFactory, + MappingContext ctx = new MappingContext( + typeFactory, + elementUtils, + typeUtils, + messager, + options, + new MappingResolverImpl( + context.getMessager(), elementUtils, typeUtils, - messager, - options, - new MappingResolverImpl( context.getMessager(), elementUtils, typeUtils, typeFactory, sourceModel, mapperReferences ), - mapperTypeElement, + typeFactory, sourceModel, mapperReferences + ), + mapperTypeElement, + sourceModel, + mapperReferences ); this.mappingContext = ctx; return getMapper( mapperTypeElement, sourceModel ); @@ -232,7 +238,7 @@ public class MapperCreationProcessor implements ModelElementProcessor getMappingMethods(List methods ) { + private List getMappingMethods(List methods) { List mappingMethods = new ArrayList(); for ( SourceMethod method : methods ) { @@ -245,7 +251,7 @@ public class MapperCreationProcessor implements ModelElementProcessor usedVirtualMappings = new HashSet(); - public MappingResolverImpl(Messager messager, Elements elementUtils, Types typeUtils, TypeFactory typeFactory, List sourceModel, List mapperReferences) { + public MappingResolverImpl(Messager messager, Elements elementUtils, Types typeUtils, TypeFactory typeFactory, + List sourceModel, List mapperReferences) { this.messager = messager; this.typeUtils = typeUtils; this.typeFactory = typeFactory; @@ -85,9 +85,9 @@ public class MappingResolverImpl implements MappingResolver { this.conversions = new Conversions( elementUtils, typeFactory ); this.builtInMethods = new BuiltInMappingMethods( typeFactory ); this.methodSelectors = new MethodSelectors( - typeUtils, - elementUtils, - typeFactory + typeUtils, + elementUtils, + typeFactory ); } @@ -113,23 +113,24 @@ public class MappingResolverImpl implements MappingResolver { */ @Override public Assignment getTargetAssignment( - Method mappingMethod, - String mappedElement, - Type sourceType, - Type targetType, - String targetPropertyName, - String dateFormat, - List qualifiers, - String sourceReference ) { + Method mappingMethod, + String mappedElement, + Type sourceType, + Type targetType, + String targetPropertyName, + String dateFormat, + List qualifiers, + String sourceReference) { - ResolvingAttempt attempt = new ResolvingAttempt( sourceModel, - mapperReferences, - mappingMethod, - mappedElement, - targetPropertyName, - dateFormat, - qualifiers, - sourceReference + ResolvingAttempt attempt = new ResolvingAttempt( + sourceModel, + mapperReferences, + mappingMethod, + mappedElement, + targetPropertyName, + dateFormat, + qualifiers, + sourceReference ); return attempt.getTargetAssignment( sourceType, targetType ); @@ -155,14 +156,14 @@ public class MappingResolverImpl implements MappingResolver { // so this set must be cleared. private final Set virtualMethodCandidates; - private ResolvingAttempt( List sourceModel, - List mapperReferences, - Method mappingMethod, - String mappedElement, - String targetPropertyName, - String dateFormat, - List qualifiers, - String sourceReference ) { + private ResolvingAttempt(List sourceModel, + List mapperReferences, + Method mappingMethod, + String mappedElement, + String targetPropertyName, + String dateFormat, + List qualifiers, + String sourceReference) { this.mappingMethod = mappingMethod; this.mappedElement = mappedElement; this.methods = sourceModel; @@ -173,7 +174,7 @@ public class MappingResolverImpl implements MappingResolver { this.virtualMethodCandidates = new HashSet(); } - private Assignment getTargetAssignment( Type sourceType, Type targetType ) { + private Assignment getTargetAssignment(Type sourceType, Type targetType) { // first simple mapping method Assignment referencedMethod = resolveViaMethod( sourceType, targetType ); @@ -192,7 +193,7 @@ public class MappingResolverImpl implements MappingResolver { // then type conversion Assignment conversion = resolveViaConversion( sourceType, targetType ); if ( conversion != null ) { - conversion.setAssignment( AssignmentFactory.createSimple( sourceReference) ); + conversion.setAssignment( AssignmentFactory.createSimple( sourceReference ) ); return conversion; } @@ -221,7 +222,7 @@ public class MappingResolverImpl implements MappingResolver { return null; } - private Assignment resolveViaConversion( Type sourceType, Type targetType ) { + private Assignment resolveViaConversion(Type sourceType, Type targetType) { ConversionProvider conversionProvider = conversions.getConversion( sourceType, targetType ); if ( conversionProvider == null ) { @@ -229,16 +230,15 @@ public class MappingResolverImpl implements MappingResolver { } ConversionContext ctx = - new DefaultConversionContext( typeFactory, targetType, dateFormat ); + new DefaultConversionContext( typeFactory, targetType, dateFormat ); return conversionProvider.to( ctx ); } /** * Returns a reference to a method mapping the given source type to the given target type, if such a method * exists. - * */ - private Assignment resolveViaMethod( Type sourceType, Type targetType ) { + private Assignment resolveViaMethod(Type sourceType, Type targetType) { // first try to find a matching source method SourceMethod matchingSourceMethod = getBestMatch( methods, sourceType, targetType ); @@ -249,13 +249,13 @@ public class MappingResolverImpl implements MappingResolver { // then a matching built-in method BuiltInMethod matchingBuiltInMethod = - getBestMatch( builtInMethods.getBuiltInMethods(), sourceType, targetType ); + getBestMatch( builtInMethods.getBuiltInMethods(), sourceType, targetType ); if ( matchingBuiltInMethod != null ) { virtualMethodCandidates.add( new VirtualMappingMethod( matchingBuiltInMethod ) ); ConversionContext ctx = - new DefaultConversionContext( typeFactory, targetType, dateFormat ); - Assignment methodReference = AssignmentFactory.createMethodReference( matchingBuiltInMethod, ctx ); + new DefaultConversionContext( typeFactory, targetType, dateFormat ); + Assignment methodReference = AssignmentFactory.createMethodReference( matchingBuiltInMethod, ctx ); methodReference.setAssignment( AssignmentFactory.createSimple( sourceReference ) ); return methodReference; } @@ -273,7 +273,7 @@ public class MappingResolverImpl implements MappingResolver { * * then this method tries to resolve this combination and make a mapping methodY( methodX ( parameter ) ) */ - private Assignment resolveViaMethodAndMethod( Type sourceType, Type targetType ) { + private Assignment resolveViaMethodAndMethod(Type sourceType, Type targetType) { List methodYCandidates = new ArrayList( methods ); methodYCandidates.addAll( builtInMethods.getBuiltInMethods() ); @@ -288,12 +288,14 @@ public class MappingResolverImpl implements MappingResolver { // a nested method call can be called. so C = methodY( methodX (A) ) for ( Method methodYCandidate : methodYCandidates ) { if ( methodYCandidate.getSourceParameters().size() == 1 ) { - methodRefY = resolveViaMethod( methodYCandidate.getSourceParameters().get( 0 ).getType(), - targetType ); + methodRefY = resolveViaMethod( + methodYCandidate.getSourceParameters().get( 0 ).getType(), + targetType + ); if ( methodRefY != null ) { - Assignment methodRefX = resolveViaMethod( - sourceType, - methodYCandidate.getSourceParameters().get( 0 ).getType() + Assignment methodRefX = resolveViaMethod( + sourceType, + methodYCandidate.getSourceParameters().get( 0 ).getType() ); if ( methodRefX != null ) { methodRefY.setAssignment( methodRefX ); @@ -319,7 +321,7 @@ public class MappingResolverImpl implements MappingResolver { * * then this method tries to resolve this combination and make a mapping methodY( conversionX ( parameter ) ) */ - private Assignment resolveViaConversionAndMethod( Type sourceType, Type targetType ) { + private Assignment resolveViaConversionAndMethod(Type sourceType, Type targetType) { List methodYCandidates = new ArrayList( methods ); methodYCandidates.addAll( builtInMethods.getBuiltInMethods() ); @@ -329,13 +331,13 @@ public class MappingResolverImpl implements MappingResolver { for ( Method methodYCandidate : methodYCandidates ) { if ( methodYCandidate.getSourceParameters().size() == 1 ) { methodRefY = resolveViaMethod( - methodYCandidate.getSourceParameters().get( 0 ).getType(), - targetType + methodYCandidate.getSourceParameters().get( 0 ).getType(), + targetType ); if ( methodRefY != null ) { Assignment conversionXRef = resolveViaConversion( - sourceType, - methodYCandidate.getSourceParameters().get( 0 ).getType() + sourceType, + methodYCandidate.getSourceParameters().get( 0 ).getType() ); if ( conversionXRef != null ) { methodRefY.setAssignment( conversionXRef ); @@ -361,7 +363,7 @@ public class MappingResolverImpl implements MappingResolver { * * then this method tries to resolve this combination and make a mapping methodY( conversionX ( parameter ) ) */ - private Assignment resolveViaMethodAndConversion( Type sourceType, Type targetType ) { + private Assignment resolveViaMethodAndConversion(Type sourceType, Type targetType) { List methodXCandidates = new ArrayList( methods ); methodXCandidates.addAll( builtInMethods.getBuiltInMethods() ); @@ -372,8 +374,8 @@ public class MappingResolverImpl implements MappingResolver { for ( Method methodXCandidate : methodXCandidates ) { if ( methodXCandidate.getSourceParameters().size() == 1 ) { Assignment methodRefX = resolveViaMethod( - sourceType, - methodXCandidate.getReturnType() + sourceType, + methodXCandidate.getReturnType() ); if ( methodRefX != null ) { conversionYRef = resolveViaConversion( methodXCandidate.getReturnType(), targetType ); @@ -393,26 +395,27 @@ public class MappingResolverImpl implements MappingResolver { return conversionYRef; } - private T getBestMatch( List methods, Type sourceType, Type returnType ) { + private T getBestMatch(List methods, Type sourceType, Type returnType) { List candidates = methodSelectors.getMatchingMethods( - mappingMethod, - methods, - sourceType, - returnType, - qualifiers, - targetPropertyName + mappingMethod, + methods, + sourceType, + returnType, + qualifiers, + targetPropertyName ); // raise an error if more than one mapping method is suitable to map the given source type // into the target type if ( candidates.size() > 1 ) { - String errorMsg = String.format( - "Ambiguous mapping methods found for mapping " + mappedElement + " from %s to %s: %s.", - sourceType, - returnType, - Strings.join( candidates, ", " ) ); + String errorMsg = String.format( + "Ambiguous mapping methods found for mapping " + mappedElement + " from %s to %s: %s.", + sourceType, + returnType, + Strings.join( candidates, ", " ) + ); mappingMethod.printMessage( messager, Kind.ERROR, errorMsg ); } @@ -424,18 +427,18 @@ public class MappingResolverImpl implements MappingResolver { return null; } - private Assignment getMappingMethodReference( SourceMethod method, - Type targetType ) { + private Assignment getMappingMethodReference(SourceMethod method, + Type targetType) { MapperReference mapperReference = findMapperReference( method ); return AssignmentFactory.createMethodReference( - method, - mapperReference, - SourceMethod.containsTargetTypeParameter( method.getParameters() ) ? targetType : null + method, + mapperReference, + SourceMethod.containsTargetTypeParameter( method.getParameters() ) ? targetType : null ); } - private MapperReference findMapperReference( SourceMethod method ) { + private MapperReference findMapperReference(SourceMethod method) { for ( MapperReference ref : mapperReferences ) { if ( ref.getType().equals( method.getDeclaringMapper() ) ) { return ref; @@ -459,27 +462,27 @@ public class MappingResolverImpl implements MappingResolver { * * @return {@code true} if the specified property can be mapped, {@code false} otherwise. */ - private boolean isPropertyMappable( Type sourceType, Type targetType ) { + private boolean isPropertyMappable(Type sourceType, Type targetType) { boolean collectionOrMapTargetTypeHasCompatibleConstructor = false; if ( sourceType.isCollectionType() && targetType.isCollectionType() ) { collectionOrMapTargetTypeHasCompatibleConstructor = collectionTypeHasCompatibleConstructor( - sourceType, - targetType.getImplementationType() != null - ? targetType.getImplementationType() : targetType + sourceType, + targetType.getImplementationType() != null + ? targetType.getImplementationType() : targetType ); } if ( sourceType.isMapType() && targetType.isMapType() ) { collectionOrMapTargetTypeHasCompatibleConstructor = mapTypeHasCompatibleConstructor( - sourceType, - targetType.getImplementationType() != null - ? targetType.getImplementationType() : targetType + sourceType, + targetType.getImplementationType() != null + ? targetType.getImplementationType() : targetType ); } if ( ( ( targetType.isCollectionType() || targetType.isMapType() ) - && collectionOrMapTargetTypeHasCompatibleConstructor ) ) { + && collectionOrMapTargetTypeHasCompatibleConstructor ) ) { return true; } @@ -495,19 +498,19 @@ public class MappingResolverImpl implements MappingResolver { * @return {@code true} if the target type has a constructor accepting the given source type, {@code false} * otherwise. */ - private boolean collectionTypeHasCompatibleConstructor( Type sourceType, Type targetType ) { + private boolean collectionTypeHasCompatibleConstructor(Type sourceType, Type targetType) { // note (issue #127): actually this should check for the presence of a matching constructor, with help of // Types#asMemberOf(); but this method seems to not work correctly in the Eclipse implementation, so instead // we just check whether the target type is parameterized in a way that it implicitly should have a // constructor which accepts the source type TypeMirror sourceElementType = sourceType.getTypeParameters().isEmpty() - ? typeFactory.getType( Object.class ).getTypeMirror() - : sourceType.getTypeParameters().get( 0 ).getTypeMirror(); + ? typeFactory.getType( Object.class ).getTypeMirror() + : sourceType.getTypeParameters().get( 0 ).getTypeMirror(); TypeMirror targetElementType = targetType.getTypeParameters().isEmpty() - ? typeFactory.getType( Object.class ).getTypeMirror() - : targetType.getTypeParameters().get( 0 ).getTypeMirror(); + ? typeFactory.getType( Object.class ).getTypeMirror() + : targetType.getTypeParameters().get( 0 ).getTypeMirror(); return typeUtils.isAssignable( sourceElementType, targetElementType ); } @@ -521,7 +524,7 @@ public class MappingResolverImpl implements MappingResolver { * @return {@code true} if the target type has a constructor accepting the given source type, {@code false} * otherwise. */ - private boolean mapTypeHasCompatibleConstructor( Type sourceType, Type targetType ) { + private boolean mapTypeHasCompatibleConstructor(Type sourceType, Type targetType) { // note (issue #127): actually this should check for the presence of a matching constructor, with help of // Types#asMemberOf(); but this method seems to not work correctly in the Eclipse implementation, so instead // we just check whether the target type is parameterized in a way that it implicitly should have a @@ -551,7 +554,7 @@ public class MappingResolverImpl implements MappingResolver { } return typeUtils.isAssignable( sourceKeyType, targetKeyType ) - && typeUtils.isAssignable( sourceValueType, targetValueType ); + && typeUtils.isAssignable( sourceValueType, targetValueType ); } } }