#157 accomodating for conversionY( methodX ( parameter ) )

This commit is contained in:
sjaakd 2014-03-22 22:19:19 +01:00
parent 3c58551649
commit 23f3d4a3c1
19 changed files with 136 additions and 130 deletions

View File

@ -35,13 +35,13 @@ import static org.mapstruct.ap.util.Collections.asSet;
public class BigDecimalToBigIntegerConversion extends SimpleConversion { public class BigDecimalToBigIntegerConversion extends SimpleConversion {
@Override @Override
public String getToConversionString(String sourceReference, ConversionContext conversionContext) { public String[] getToExpressions(ConversionContext conversionContext) {
return sourceReference + ".toBigInteger()"; return new String[]{ "", ".toBigInteger()" };
} }
@Override @Override
public String getFromConversionString(String targetReference, ConversionContext conversionContext) { public String[] getFromExpressions(ConversionContext conversionContext) {
return "new BigDecimal( " + targetReference + " )"; return new String[]{"new BigDecimal( ", " )"};
} }
@Override @Override

View File

@ -44,16 +44,13 @@ public class BigDecimalToPrimitiveConversion extends SimpleConversion {
} }
@Override @Override
public String getToConversionString(String sourceReference, ConversionContext conversionContext) { public String[] getToExpressions(ConversionContext conversionContext) {
return sourceReference + "." + targetType.getName() + "Value()"; return new String[]{ "", "." + targetType.getName() + "Value()" };
} }
@Override @Override
public String getFromConversionString(String targetReference, ConversionContext conversionContext) { public String[] getFromExpressions(ConversionContext conversionContext) {
StringBuilder conversion = new StringBuilder( "BigDecimal.valueOf( " ); return new String[]{ "BigDecimal.valueOf( ", " )" };
conversion.append( targetReference ).append( " )" );
return conversion.toString();
} }
@Override @Override

View File

@ -34,13 +34,13 @@ import static org.mapstruct.ap.util.Collections.asSet;
public class BigDecimalToStringConversion extends SimpleConversion { public class BigDecimalToStringConversion extends SimpleConversion {
@Override @Override
public String getToConversionString(String sourceReference, ConversionContext conversionContext) { public String[] getToExpressions(ConversionContext conversionContext) {
return sourceReference + ".toString()"; return new String[]{ "", ".toString()" };
} }
@Override @Override
public String getFromConversionString(String targetReference, ConversionContext conversionContext) { public String[] getFromExpressions(ConversionContext conversionContext) {
return "new BigDecimal( " + targetReference + " )"; return new String[]{ "new BigDecimal( ", " )" };
} }
@Override @Override

View File

@ -45,17 +45,13 @@ public class BigDecimalToWrapperConversion extends SimpleConversion {
} }
@Override @Override
public String getToConversionString(String sourceReference, ConversionContext conversionContext) { public String[] getToExpressions(ConversionContext conversionContext) {
return sourceReference + "." + targetType.getName() + "Value()"; return new String[]{ "", "." + targetType.getName() + "Value()" };
} }
@Override @Override
public String getFromConversionString(String targetReference, ConversionContext conversionContext) { public String[] getFromExpressions(ConversionContext conversionContext) {
StringBuilder conversion = new StringBuilder( "BigDecimal.valueOf( " ); return new String[]{ "BigDecimal.valueOf( ", " )" };
conversion.append( targetReference );
conversion.append( " )" );
return conversion.toString();
} }
@Override @Override

View File

@ -44,21 +44,17 @@ public class BigIntegerToPrimitiveConversion extends SimpleConversion {
} }
@Override @Override
public String getToConversionString(String sourceReference, ConversionContext conversionContext) { public String[] getToExpressions(ConversionContext conversionContext) {
return sourceReference + "." + targetType.getName() + "Value()"; return new String[]{ "", "." + targetType.getName() + "Value()" };
} }
@Override @Override
public String getFromConversionString(String targetReference, ConversionContext conversionContext) { public String[] getFromExpressions(ConversionContext conversionContext) {
StringBuilder conversion = new StringBuilder( "BigInteger.valueOf( " ); String castString = "";
if ( targetType == float.class || targetType == double.class ) { if ( targetType == float.class || targetType == double.class ) {
conversion.append( "(long) " ); castString = "(long) ";
} }
return new String[]{ "BigInteger.valueOf( " + castString, " )" };
conversion.append( targetReference ).append( " )" );
return conversion.toString();
} }
@Override @Override

View File

@ -34,13 +34,13 @@ import static org.mapstruct.ap.util.Collections.asSet;
public class BigIntegerToStringConversion extends SimpleConversion { public class BigIntegerToStringConversion extends SimpleConversion {
@Override @Override
public String getToConversionString(String sourceReference, ConversionContext conversionContext) { public String[] getToExpressions(ConversionContext conversionContext) {
return sourceReference + ".toString()"; return new String[]{ "", ".toString()" };
} }
@Override @Override
public String getFromConversionString(String targetReference, ConversionContext conversionContext) { public String[] getFromExpressions(ConversionContext conversionContext) {
return "new BigInteger( " + targetReference + " )"; return new String[]{ "new BigInteger( ", " )" };
} }
@Override @Override

View File

@ -45,24 +45,19 @@ public class BigIntegerToWrapperConversion extends SimpleConversion {
} }
@Override @Override
public String getToConversionString(String sourceReference, ConversionContext conversionContext) { public String[] getToExpressions(ConversionContext conversionContext) {
return sourceReference + "." + targetType.getName() + "Value()"; return new String[]{ "", "." + targetType.getName() + "Value()" };
} }
@Override @Override
public String getFromConversionString(String targetReference, ConversionContext conversionContext) { public String[] getFromExpressions(ConversionContext conversionContext) {
StringBuilder conversion = new StringBuilder( "BigInteger.valueOf( " );
conversion.append( targetReference );
String toLongValueStr = "";
if ( targetType == float.class || targetType == double.class ) { if ( targetType == float.class || targetType == double.class ) {
conversion.append( ".longValue()" ); toLongValueStr = ".longValue()";
} }
conversion.append( " )" ); return new String[]{ "BigInteger.valueOf( ", toLongValueStr + " )" };
return conversion.toString();
} }
@Override @Override

View File

@ -28,12 +28,12 @@ import org.mapstruct.ap.model.common.ConversionContext;
public class CharToStringConversion extends SimpleConversion { public class CharToStringConversion extends SimpleConversion {
@Override @Override
public String getToConversionString(String sourceReference, ConversionContext conversionContext) { public String[] getToExpressions(ConversionContext conversionContext) {
return "String.valueOf( " + sourceReference + " )"; return new String[]{ "String.valueOf( ", " )" };
} }
@Override @Override
public String getFromConversionString(String targetReference, ConversionContext conversionContext) { public String[] getFromExpressions(ConversionContext conversionContext) {
return targetReference + ".charAt( 0 )"; return new String[]{ "", ".charAt( 0 )" };
} }
} }

View File

@ -28,12 +28,12 @@ import org.mapstruct.ap.model.common.ConversionContext;
public class CharWrapperToStringConversion extends SimpleConversion { public class CharWrapperToStringConversion extends SimpleConversion {
@Override @Override
public String getToConversionString(String sourceReference, ConversionContext conversionContext) { public String[] getToExpressions(ConversionContext conversionContext) {
return sourceReference + ".toString()"; return new String[]{ "", ".toString()" };
} }
@Override @Override
public String getFromConversionString(String targetReference, ConversionContext conversionContext) { public String[] getFromExpressions(ConversionContext conversionContext) {
return targetReference + ".charAt( 0 )"; return new String[]{ "", ".charAt( 0 )" };
} }
} }

View File

@ -42,7 +42,9 @@ public class DateToStringConversion implements ConversionProvider {
return new TypeConversion( return new TypeConversion(
asSet( conversionContext.getTypeFactory().getType( SimpleDateFormat.class ) ), asSet( conversionContext.getTypeFactory().getType( SimpleDateFormat.class ) ),
Collections.<Type>emptyList(), Collections.<Type>emptyList(),
getConversionString( sourceReference, conversionContext, "format" ) getOpenExpression( conversionContext, "format" ),
sourceReference,
getCloseExpression()
); );
} }
@ -51,11 +53,13 @@ public class DateToStringConversion implements ConversionProvider {
return new TypeConversion( return new TypeConversion(
asSet( conversionContext.getTypeFactory().getType( SimpleDateFormat.class ) ), asSet( conversionContext.getTypeFactory().getType( SimpleDateFormat.class ) ),
Arrays.asList( conversionContext.getTypeFactory().getType( ParseException.class ) ), Arrays.asList( conversionContext.getTypeFactory().getType( ParseException.class ) ),
getConversionString( targetReference, conversionContext, "parse" ) getOpenExpression( conversionContext, "parse" ),
targetReference,
getCloseExpression()
); );
} }
private String getConversionString(String targetReference, ConversionContext conversionContext, String method) { private String getOpenExpression(ConversionContext conversionContext, String method) {
StringBuilder conversionString = new StringBuilder( "new SimpleDateFormat(" ); StringBuilder conversionString = new StringBuilder( "new SimpleDateFormat(" );
if ( conversionContext.getDateFormat() != null ) { if ( conversionContext.getDateFormat() != null ) {
@ -67,9 +71,11 @@ public class DateToStringConversion implements ConversionProvider {
conversionString.append( ")." ); conversionString.append( ")." );
conversionString.append( method ); conversionString.append( method );
conversionString.append( "( " ); conversionString.append( "( " );
conversionString.append( targetReference );
conversionString.append( " )" );
return conversionString.toString(); return conversionString.toString();
} }
private String getCloseExpression() {
return " )";
}
} }

View File

@ -33,13 +33,13 @@ import static org.mapstruct.ap.util.Collections.asSet;
public class EnumStringConversion extends SimpleConversion { public class EnumStringConversion extends SimpleConversion {
@Override @Override
public String getToConversionString(String sourceReference, ConversionContext conversionContext) { public String[] getToExpressions(ConversionContext conversionContext) {
return sourceReference + ".toString()"; return new String[] {"", ".toString()" };
} }
@Override @Override
public String getFromConversionString(String targetReference, ConversionContext conversionContext) { public String[] getFromExpressions(ConversionContext conversionContext) {
return "Enum.valueOf( " + conversionContext.getTargetType().getName() + ".class, " + targetReference + " )"; return new String[] { "Enum.valueOf( " + conversionContext.getTargetType().getName() + ".class, ", " )" };
} }
@Override @Override

View File

@ -38,12 +38,12 @@ public class PrimitiveToPrimitiveConversion extends SimpleConversion {
} }
@Override @Override
public String getToConversionString(String sourceReference, ConversionContext conversionContext) { public String[] getToExpressions(ConversionContext conversionContext) {
return sourceReference; return new String[] {"", ""};
} }
@Override @Override
public String getFromConversionString(String targetReference, ConversionContext conversionContext) { public String[] getFromExpressions(ConversionContext conversionContext) {
return "(" + sourceType + ") " + targetReference; return new String[] { "(" + sourceType + ") ", "" };
} }
} }

View File

@ -43,13 +43,13 @@ public class PrimitiveToStringConversion extends SimpleConversion {
} }
@Override @Override
public String getToConversionString(String sourceReference, ConversionContext conversionContext) { public String[] getToExpressions(ConversionContext conversionContext) {
return "String.valueOf( " + sourceReference + " )"; return new String[] { "String.valueOf( ", " )" };
} }
@Override @Override
public String getFromConversionString(String targetReference, ConversionContext conversionContext) { public String[] getFromExpressions(ConversionContext conversionContext) {
return wrapperType.getSimpleName() + ".parse" + Strings.capitalize( sourceType.getSimpleName() ) + "( " + return new String[] { wrapperType.getSimpleName() + ".parse" +
targetReference + " )"; Strings.capitalize( sourceType.getSimpleName() ) + "( ", " )" };
} }
} }

View File

@ -45,17 +45,17 @@ public class PrimitiveToWrapperConversion extends SimpleConversion {
} }
@Override @Override
public String getToConversionString(String sourceReference, ConversionContext conversionContext) { public String[] getToExpressions(ConversionContext conversionContext) {
if ( sourceType == targetType ) { if ( sourceType == targetType ) {
return sourceReference; return new String[] { "", "" };
} }
else { else {
return "(" + targetType.getName() + ") " + sourceReference; return new String[] { "(" + targetType.getName() + ") ", "" };
} }
} }
@Override @Override
public String getFromConversionString(String targetReference, ConversionContext conversionContext) { public String[] getFromExpressions(ConversionContext conversionContext) {
return targetReference + "." + sourceType.getName() + "Value()"; return new String[] { "", "." + sourceType.getName() + "Value()" };
} }
} }

View File

@ -34,22 +34,47 @@ public abstract class SimpleConversion implements ConversionProvider {
@Override @Override
public TypeConversion to(String sourceReference, ConversionContext conversionContext) { public TypeConversion to(String sourceReference, ConversionContext conversionContext) {
String[] toExpressions = getToExpressions( conversionContext );
return new TypeConversion( return new TypeConversion(
getToConversionImportTypes( conversionContext ), getToConversionImportTypes( conversionContext ),
Collections.<Type>emptyList(), Collections.<Type>emptyList(),
getToConversionString( sourceReference, conversionContext ) toExpressions[0],
); sourceReference,
toExpressions[1] );
} }
@Override @Override
public TypeConversion from(String targetReference, ConversionContext conversionContext) { public TypeConversion from(String targetReference, ConversionContext conversionContext) {
String[] fromExpressions = getFromExpressions( conversionContext );
return new TypeConversion( return new TypeConversion(
getFromConversionImportTypes( conversionContext ), getFromConversionImportTypes( conversionContext ),
Collections.<Type>emptyList(), Collections.<Type>emptyList(),
getFromConversionString( targetReference, conversionContext ) fromExpressions[0],
); targetReference,
fromExpressions[1] );
} }
/**
* Returns the conversion string (opening and closing part) from source to target.
*
* @param conversionContext ConversionContext providing optional information required for creating the conversion.
*
* @return The conversion string from source to target. toExpressions[0] = openExpression,
* toExpressions[1] = closeExpression
*/
protected abstract String[] getToExpressions( ConversionContext conversionContext );
/**
* Creates the conversion string (opening and closing part) from target to source.
*
* @param conversionContext ConversionContext providing optional information required for creating
* the conversion.
*
* @return The conversion string from target to source, fromExpressions[0] = openExpression,
* fromExpressions[1] = closeExpression
*/
protected abstract String[] getFromExpressions( ConversionContext conversionContext );
/** /**
* Returns a set with imported types of the "from" conversion. Defaults to an empty set; can be overridden in * Returns a set with imported types of the "from" conversion. Defaults to an empty set; can be overridden in
* sub-classes to return the required types. * sub-classes to return the required types.
@ -72,25 +97,4 @@ public abstract class SimpleConversion implements ConversionProvider {
return Collections.<Type>emptySet(); return Collections.<Type>emptySet();
} }
/**
* Returns the conversion string from source to target.
*
* @param sourceReference A reference to the source object, e.g. {@code beanName.getFoo()}.
* @param conversionContext ConversionContext providing optional information required for creating the conversion.
*
* @return The conversion string from source to target.
*/
protected abstract String getToConversionString(String sourceReference, ConversionContext conversionContext);
/**
* Creates the conversion string from target to source.
*
* @param targetReference A reference to the targetReference object, e.g.
* {@code beanName.getFoo()}.
* @param conversionContext ConversionContext providing optional information required for creating
* the conversion.
*
* @return The conversion string from target to source.
*/
protected abstract String getFromConversionString(String targetReference, ConversionContext conversionContext);
} }

View File

@ -42,13 +42,13 @@ public class WrapperToStringConversion extends SimpleConversion {
} }
@Override @Override
public String getToConversionString(String sourceReference, ConversionContext conversionContext) { public String[] getToExpressions(ConversionContext conversionContext) {
return "String.valueOf( " + sourceReference + " )"; return new String[] { "String.valueOf( ", " )" };
} }
@Override @Override
public String getFromConversionString(String targetReference, ConversionContext conversionContext) { public String[] getFromExpressions(ConversionContext conversionContext) {
return sourceType.getSimpleName() + ".parse" + Strings.capitalize( primitiveType.getSimpleName() ) + "( " + return new String[] { sourceType.getSimpleName() + ".parse" +
targetReference + " )"; Strings.capitalize( primitiveType.getSimpleName() ) + "( ", " )" };
} }
} }

View File

@ -44,22 +44,22 @@ public class WrapperToWrapperConversion extends SimpleConversion {
} }
@Override @Override
public String getToConversionString(String sourceReference, ConversionContext conversionContext) { public String[] getToExpressions(ConversionContext conversionContext) {
if ( sourceType == targetType ) { if ( sourceType == targetType ) {
return sourceReference; return new String[] { "", "" };
} }
else { else {
return sourceReference + "." + targetType.getName() + "Value()"; return new String[] { "", "." + targetType.getName() + "Value()" };
} }
} }
@Override @Override
public String getFromConversionString(String targetReference, ConversionContext conversionContext) { public String[] getFromExpressions(ConversionContext conversionContext) {
if ( sourceType == targetType ) { if ( sourceType == targetType ) {
return targetReference; return new String[] { "", "" };
} }
else { else {
return targetReference + "." + sourceType.getName() + "Value()"; return new String[] { "", "." + sourceType.getName() + "Value()" };
} }
} }
} }

View File

@ -18,7 +18,6 @@
*/ */
package org.mapstruct.ap.model; package org.mapstruct.ap.model;
import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
@ -33,19 +32,24 @@ import org.mapstruct.ap.model.common.Type;
*/ */
public class TypeConversion extends ModelElement { public class TypeConversion extends ModelElement {
private final Set<Type> importTypes; private final Set<Type> importTypes;
private final List<Type> exceptionTypes; private final List<Type> exceptionTypes;
private final String conversionString; private final String sourceReference;
private final String openExpression;
private final String closeExpression;
public TypeConversion(String conversionString) { public TypeConversion( Set<Type> importTypes,
this( Collections.<Type>emptySet(), Collections.<Type>emptyList(), conversionString ); List<Type> exceptionTypes,
} String openExpression,
String sourceReference,
public TypeConversion(Set<Type> importTypes, List<Type> exceptionTypes, String conversionString) { String closeExpression ) {
this.importTypes = new HashSet<Type>( importTypes ); this.importTypes = new HashSet<Type>( importTypes );
this.importTypes.addAll( exceptionTypes ); this.importTypes.addAll( exceptionTypes );
this.exceptionTypes = exceptionTypes; this.exceptionTypes = exceptionTypes;
this.conversionString = conversionString; this.openExpression = openExpression;
this.sourceReference = sourceReference;
this.closeExpression = closeExpression;
} }
@Override @Override
@ -57,7 +61,15 @@ public class TypeConversion extends ModelElement {
return exceptionTypes; return exceptionTypes;
} }
public String getConversionString() { public String getOpenExpression() {
return conversionString; return openExpression;
}
public String getSourceReference() {
return sourceReference;
}
public String getCloseExpression() {
return closeExpression;
} }
} }

View File

@ -18,4 +18,4 @@
limitations under the License. limitations under the License.
--> -->
${conversionString} ${openExpression}${sourceReference}${closeExpression}