mirror of
https://github.com/mapstruct/mapstruct.git
synced 2025-07-12 00:00:08 +08:00
#92 Making generated code more null-safe and avoiding unnecessary collection instantiation
This commit is contained in:
parent
8dd505b63e
commit
d7864e0566
@ -39,7 +39,7 @@ public class PropertyMapping extends AbstractModelElement {
|
||||
private final String targetName;
|
||||
private final String targetAccessorName;
|
||||
private final Type targetType;
|
||||
private final boolean isHasTargetSetter;
|
||||
private final boolean isTargetAccessorSetter;
|
||||
|
||||
private final MappingMethodReference mappingMethod;
|
||||
private final TypeConversion conversion;
|
||||
@ -56,7 +56,7 @@ public class PropertyMapping extends AbstractModelElement {
|
||||
this.targetName = targetName;
|
||||
this.targetAccessorName = targetAccessorName;
|
||||
this.targetType = targetType;
|
||||
this.isHasTargetSetter = targetAccessorName.startsWith( "set" );
|
||||
this.isTargetAccessorSetter = targetAccessorName.startsWith( "set" );
|
||||
|
||||
this.mappingMethod = mappingMethod;
|
||||
this.conversion = conversion;
|
||||
@ -98,8 +98,15 @@ public class PropertyMapping extends AbstractModelElement {
|
||||
return conversion;
|
||||
}
|
||||
|
||||
public boolean isHasTargetSetter() {
|
||||
return isHasTargetSetter;
|
||||
/**
|
||||
* Whether the target accessor is a setter method or not. The only case where it is not a setter but a getter is a
|
||||
* collection-typed property without a getter, to which elements are set by adding the source elements to the
|
||||
* collection retrieved via the getter.
|
||||
*
|
||||
* @return {@code true} if the target accessor is a setter, {@code false} otherwise
|
||||
*/
|
||||
public boolean isTargetAccessorSetter() {
|
||||
return isTargetAccessorSetter;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -20,11 +20,11 @@
|
||||
-->
|
||||
<#-- a) invoke mapping method -->
|
||||
<#if mappingMethod??>
|
||||
<#if hasTargetSetter>
|
||||
<#if targetAccessorSetter>
|
||||
${ext.targetBeanName}.${targetAccessorName}( <@includeModel object=mappingMethod input="${sourceBeanName}.${sourceAccessorName}()"/> );
|
||||
<#else>
|
||||
if ( ${sourceBeanName}.${sourceAccessorName}() != null ) {
|
||||
${ext.targetBeanName}.${targetAccessorName}().addAll( <@includeModel object=mappingMethod input="${sourceBeanName}.${sourceAccessorName}()"/> );
|
||||
<#elseif targetType.collectionType>
|
||||
if ( ${sourceBeanName}.${sourceAccessorName}() != null && ${ext.targetBeanName}.${targetAccessorName}() != null ) {
|
||||
${ext.targetBeanName}.${targetAccessorName}().addAll( <@includeModel object=mappingMethod input="${sourceBeanName}.${sourceAccessorName}()"/> );
|
||||
}
|
||||
</#if>
|
||||
<#-- b) simple conversion -->
|
||||
@ -39,13 +39,15 @@ if ( ${sourceBeanName}.${sourceAccessorName}() != null ) {
|
||||
<#-- c) simply set -->
|
||||
<#else>
|
||||
<#if targetType.collectionType || targetType.mapType>
|
||||
<#if targetAccessorSetter>
|
||||
if ( ${sourceBeanName}.${sourceAccessorName}() != null ) {
|
||||
<#if hasTargetSetter>
|
||||
${ext.targetBeanName}.${targetAccessorName}( new <#if targetType.implementationType??><@includeModel object=targetType.implementationType/><#else><@includeModel object=targetType/></#if>( ${sourceBeanName}.${sourceAccessorName}() ) );
|
||||
<#else>
|
||||
${ext.targetBeanName}.${targetAccessorName}().addAll( new <#if targetType.implementationType??><@includeModel object=targetType.implementationType/><#else><@includeModel object=targetType/></#if>( ${sourceBeanName}.${sourceAccessorName}() ) );
|
||||
</#if>
|
||||
}
|
||||
<#else>
|
||||
if ( ${sourceBeanName}.${sourceAccessorName}() != null && ${ext.targetBeanName}.${targetAccessorName}() != null ) {
|
||||
${ext.targetBeanName}.${targetAccessorName}().addAll( ${sourceBeanName}.${sourceAccessorName}() );
|
||||
}
|
||||
</#if>
|
||||
<#else>
|
||||
${ext.targetBeanName}.${targetAccessorName}( ${sourceBeanName}.${sourceAccessorName}() );
|
||||
</#if>
|
||||
|
Loading…
x
Reference in New Issue
Block a user