#361 returning mutable objects iso immutable objects when RETURN_DEFAULT

This commit is contained in:
sjaakd 2014-11-26 20:24:23 +01:00 committed by Gunnar Morling
parent 5c323458fc
commit 403995af9a
4 changed files with 45 additions and 18 deletions

View File

@ -18,7 +18,6 @@
*/
package org.mapstruct.ap.model;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import javax.lang.model.type.TypeMirror;
@ -156,10 +155,6 @@ public class IterableMappingMethod extends MappingMethod {
types.addAll( elementAssignment.getImportTypes() );
}
if ( mapNullToDefault ) {
types.add( typeFactory.getType( Collections.class ) );
}
return types;
}

View File

@ -18,7 +18,6 @@
*/
package org.mapstruct.ap.model;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import javax.lang.model.type.TypeMirror;
@ -201,10 +200,6 @@ public class MapMappingMethod extends MappingMethod {
types.addAll( valueAssignment.getImportTypes() );
}
if ( mapNullToDefault ) {
types.add( typeFactory.getType( Collections.class ) );
}
return types;
}

View File

@ -22,17 +22,17 @@
<#lt>${accessibility.keyword} <@includeModel object=returnType/> ${name}(<#list parameters as param><@includeModel object=param/><#if param_has_next>, </#if></#list>) <@throws/> {
if ( ${sourceParameter.name} == null ) {
<#if !mapNullToDefault>
return<#if returnType.name != "void"> null</#if>;
return<#if returnType.name != "void"> null</#if>;
<#else>
return Collections.<${resultType.typeParameters[0].name}>emptyList();
return <@returnObjectCreation/>;
</#if>
}
<#if existingInstanceMapping>
${resultName}.clear();
${resultName}.clear();
<#else>
<#-- Use the interface type on the left side, except it is java.lang.Iterable; use the implementation type - if present - on the right side -->
<#if resultType.fullyQualifiedName == "java.lang.Iterable"><@includeModel object=resultType.implementationType/><#else><@includeModel object=resultType/></#if> ${resultName} = <#if factoryMethod??><@includeModel object=factoryMethod/><#else>new <#if resultType.implementationType??><@includeModel object=resultType.implementationType/><#else><@includeModel object=resultType/></#if>()</#if>;
<@localVarDefinition/> = <@returnObjectCreation/>;
</#if>
for ( <@includeModel object=sourceParameter.type.typeParameters[0]/> ${loopVariableName} : ${sourceParameter.name} ) {
@ -51,4 +51,27 @@
<#if exceptionType_has_next>, </#if>
</#list>
</@compress>
</#macro>
<#macro localVarDefinition>
<@compress single_line=true>
<#if resultType.fullyQualifiedName == "java.lang.Iterable">
<@includeModel object=resultType.implementationType/>
<#else>
<@includeModel object=resultType/>
</#if> ${resultName}
</@compress>
</#macro>
<#macro returnObjectCreation>
<@compress single_line=true>
<#if factoryMethod??>
<@includeModel object=factoryMethod/>
<#else>
new
<#if resultType.implementationType??>
<@includeModel object=resultType.implementationType/>
<#else>
<@includeModel object=resultType/>
</#if>()
</#if>
</@compress>
</#macro>

View File

@ -22,16 +22,16 @@
<#lt>${accessibility.keyword} <@includeModel object=returnType /> ${name}(<#list parameters as param><@includeModel object=param/><#if param_has_next>, </#if></#list>) <@throws/> {
if ( ${sourceParameter.name} == null ) {
<#if !mapNullToDefault>
return<#if returnType.name != "void"> null</#if>;
return<#if returnType.name != "void"> null</#if>;
<#else>
return Collections.<${resultType.typeParameters[0].name}, ${resultType.typeParameters[1].name}>emptyMap();
return <@returnObjectCreation/>;
</#if>
}
<#if existingInstanceMapping>
${resultName}.clear();
${resultName}.clear();
<#else>
<@includeModel object=resultType /> ${resultName} = <#if factoryMethod??><@includeModel object=factoryMethod/><#else>new <#if resultType.implementationType??><@includeModel object=resultType.implementationType /><#else><@includeModel object=resultType /></#if>()</#if>;
<@includeModel object=resultType /> ${resultName} = <@returnObjectCreation/>;
</#if>
<#-- Once #148 has been addressed, the simple name of Map.Entry can be used -->
@ -61,4 +61,18 @@
<#if exceptionType_has_next>, </#if>
</#list>
</@compress>
</#macro>
<#macro returnObjectCreation>
<@compress single_line=true>
<#if factoryMethod??>
<@includeModel object=factoryMethod/>
<#else>
new
<#if resultType.implementationType??>
<@includeModel object=resultType.implementationType />
<#else>
<@includeModel object=resultType />
</#if>()
</#if>
</@compress>
</#macro>