org.mapstruct.ap.internal.model.BeanMappingMethod.ftl Maven / Gradle / Ivy
<#--
Copyright MapStruct Authors.
Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
-->
<#-- @ftlvariable name="" type="org.mapstruct.ap.internal.model.BeanMappingMethod" -->
<#if overridden>@Override
<#lt>${accessibility.keyword} <@includeModel object=returnType/> ${name}(<#list parameters as param><@includeModel object=param/><#if param_has_next>, )<@throws/> {
<#assign targetType = resultType />
<#if !existingInstanceMapping>
<#assign targetType = returnTypeToConstruct />
<#list beforeMappingReferencesWithoutMappingTarget as callback>
<@includeModel object=callback targetBeanName=resultName targetType=targetType/>
<#if !callback_has_next>
<#if !mapNullToDefault>
if ( <#list sourceParametersExcludingPrimitives as sourceParam>${sourceParam.name} == null<#if sourceParam_has_next> && ) {
return<#if returnType.name != "void"> <#if existingInstanceMapping>${resultName}<#if finalizerMethod??>.<@includeModel object=finalizerMethod /><#else>null;
}
<#if hasSubclassMappings()>
<#list subclassMappings as subclass>
<#if subclass_index > 0>else if (${subclass.sourceArgument} instanceof <@includeModel object=subclass.sourceType/>) {
<@includeModel object=subclass.assignment existingInstanceMapping=existingInstanceMapping/>
}
else {
<#if isAbstractReturnType()>
throw new IllegalArgumentException("Not all subclasses are supported for this mapping. Missing for " + ${subclassMappings[0].sourceArgument}.getClass());
<#else>
<#if !existingInstanceMapping>
<#if hasConstructorMappings()>
<#if (sourceParameters?size > 1)>
<#list sourceParametersNeedingNullCheck as sourceParam>
<#if (constructorPropertyMappingsByParameter(sourceParam)?size > 0)>
<#list constructorPropertyMappingsByParameter(sourceParam) as propertyMapping>
<@includeModel object=propertyMapping.targetType /> ${propertyMapping.targetWriteAccessorName} = ${propertyMapping.targetType.null};
if ( ${sourceParam.name} != null ) {
<#list constructorPropertyMappingsByParameter(sourceParam) as propertyMapping>
<@includeModel object=propertyMapping existingInstanceMapping=existingInstanceMapping defaultValueAssignment=propertyMapping.defaultValueAssignment/>
}
<#list sourceParametersNotNeedingNullCheck as sourceParam>
<#if (constructorPropertyMappingsByParameter(sourceParam)?size > 0)>
<#list constructorPropertyMappingsByParameter(sourceParam) as propertyMapping>
<@includeModel object=propertyMapping.targetType /> ${propertyMapping.targetWriteAccessorName} = ${propertyMapping.targetType.null};
<@includeModel object=propertyMapping existingInstanceMapping=existingInstanceMapping defaultValueAssignment=propertyMapping.defaultValueAssignment/>
<#else>
<#list constructorPropertyMappingsByParameter(sourceParameters[0]) as propertyMapping>
<@includeModel object=propertyMapping.targetType /> ${propertyMapping.targetWriteAccessorName} = ${propertyMapping.targetType.null};
<#if mapNullToDefault>if ( ${sourceParameters[0].name} != null ) {
<#list constructorPropertyMappingsByParameter(sourceParameters[0]) as propertyMapping>
<@includeModel object=propertyMapping existingInstanceMapping=existingInstanceMapping defaultValueAssignment=propertyMapping.defaultValueAssignment/>
<#if mapNullToDefault>
}
<#list constructorConstantMappings as constantMapping>
<@compress single_line=true>
<@includeModel object=constantMapping.targetType /> <@includeModel object=constantMapping existingInstanceMapping=existingInstanceMapping/>
<@includeModel object=returnTypeToConstruct/> ${resultName} = <@includeModel object=factoryMethod targetType=returnTypeToConstruct/>;
<#else >
<@includeModel object=returnTypeToConstruct/> ${resultName} = <#if factoryMethod??><@includeModel object=factoryMethod targetType=returnTypeToConstruct/><#else>new <@includeModel object=returnTypeToConstruct/>();
<#list beforeMappingReferencesWithMappingTarget as callback>
<@includeModel object=callback targetBeanName=resultName targetType=targetType/>
<#if !callback_has_next>
<#if (sourceParameters?size > 1)>
<#list sourceParametersNeedingNullCheck as sourceParam>
<#if (propertyMappingsByParameter(sourceParam)?size > 0)>
if ( ${sourceParam.name} != null ) {
<#list propertyMappingsByParameter(sourceParam) as propertyMapping>
<@includeModel object=propertyMapping targetBeanName=resultName existingInstanceMapping=existingInstanceMapping defaultValueAssignment=propertyMapping.defaultValueAssignment/>
}
<#list sourceParametersNotNeedingNullCheck as sourceParam>
<#if (propertyMappingsByParameter(sourceParam)?size > 0)>
<#list propertyMappingsByParameter(sourceParam) as propertyMapping>
<@includeModel object=propertyMapping targetBeanName=resultName existingInstanceMapping=existingInstanceMapping defaultValueAssignment=propertyMapping.defaultValueAssignment/>
<#else>
<#if mapNullToDefault>if ( ${sourceParameters[0].name} != null ) {
<#list propertyMappingsByParameter(sourceParameters[0]) as propertyMapping>
<@includeModel object=propertyMapping targetBeanName=resultName existingInstanceMapping=existingInstanceMapping defaultValueAssignment=propertyMapping.defaultValueAssignment/>
<#if mapNullToDefault>}
<#list constantMappings as constantMapping>
<@includeModel object=constantMapping targetBeanName=resultName existingInstanceMapping=existingInstanceMapping/>
<#list afterMappingReferences as callback>
<#if callback_index = 0>
<@includeModel object=callback targetBeanName=resultName targetType=targetType/>
<#if returnType.name != "void">
<#if finalizerMethod??>
return ${resultName}.<@includeModel object=finalizerMethod />;
<#else>
return ${resultName};
<#if hasSubclassMappings()>
}
}
<#macro throws>
<#if (thrownTypes?size > 0)><#lt> throws <@compress single_line=true>
<#list thrownTypes as exceptionType>
<@includeModel object=exceptionType/>
<#if exceptionType_has_next>, <#t>