#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 {
@Override
public String getToConversionString(String sourceReference, ConversionContext conversionContext) {
return sourceReference + ".toBigInteger()";
public String[] getToExpressions(ConversionContext conversionContext) {
return new String[]{ "", ".toBigInteger()" };
}
@Override
public String getFromConversionString(String targetReference, ConversionContext conversionContext) {
return "new BigDecimal( " + targetReference + " )";
public String[] getFromExpressions(ConversionContext conversionContext) {
return new String[]{"new BigDecimal( ", " )"};
}
@Override

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -42,7 +42,9 @@ public class DateToStringConversion implements ConversionProvider {
return new TypeConversion(
asSet( conversionContext.getTypeFactory().getType( SimpleDateFormat.class ) ),
Collections.<Type>emptyList(),
getConversionString( sourceReference, conversionContext, "format" )
getOpenExpression( conversionContext, "format" ),
sourceReference,
getCloseExpression()
);
}
@ -51,11 +53,13 @@ public class DateToStringConversion implements ConversionProvider {
return new TypeConversion(
asSet( conversionContext.getTypeFactory().getType( SimpleDateFormat.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(" );
if ( conversionContext.getDateFormat() != null ) {
@ -67,9 +71,11 @@ public class DateToStringConversion implements ConversionProvider {
conversionString.append( ")." );
conversionString.append( method );
conversionString.append( "( " );
conversionString.append( targetReference );
conversionString.append( " )" );
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 {
@Override
public String getToConversionString(String sourceReference, ConversionContext conversionContext) {
return sourceReference + ".toString()";
public String[] getToExpressions(ConversionContext conversionContext) {
return new String[] {"", ".toString()" };
}
@Override
public String getFromConversionString(String targetReference, ConversionContext conversionContext) {
return "Enum.valueOf( " + conversionContext.getTargetType().getName() + ".class, " + targetReference + " )";
public String[] getFromExpressions(ConversionContext conversionContext) {
return new String[] { "Enum.valueOf( " + conversionContext.getTargetType().getName() + ".class, ", " )" };
}
@Override

View File

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

View File

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

View File

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

View File

@ -34,22 +34,47 @@ public abstract class SimpleConversion implements ConversionProvider {
@Override
public TypeConversion to(String sourceReference, ConversionContext conversionContext) {
String[] toExpressions = getToExpressions( conversionContext );
return new TypeConversion(
getToConversionImportTypes( conversionContext ),
Collections.<Type>emptyList(),
getToConversionString( sourceReference, conversionContext )
);
getToConversionImportTypes( conversionContext ),
Collections.<Type>emptyList(),
toExpressions[0],
sourceReference,
toExpressions[1] );
}
@Override
public TypeConversion from(String targetReference, ConversionContext conversionContext) {
String[] fromExpressions = getFromExpressions( conversionContext );
return new TypeConversion(
getFromConversionImportTypes( conversionContext ),
Collections.<Type>emptyList(),
getFromConversionString( targetReference, conversionContext )
);
getFromConversionImportTypes( conversionContext ),
Collections.<Type>emptyList(),
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
* sub-classes to return the required types.
@ -72,25 +97,4 @@ public abstract class SimpleConversion implements ConversionProvider {
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
public String getToConversionString(String sourceReference, ConversionContext conversionContext) {
return "String.valueOf( " + sourceReference + " )";
public String[] getToExpressions(ConversionContext conversionContext) {
return new String[] { "String.valueOf( ", " )" };
}
@Override
public String getFromConversionString(String targetReference, ConversionContext conversionContext) {
return sourceType.getSimpleName() + ".parse" + Strings.capitalize( primitiveType.getSimpleName() ) + "( " +
targetReference + " )";
public String[] getFromExpressions(ConversionContext conversionContext) {
return new String[] { sourceType.getSimpleName() + ".parse" +
Strings.capitalize( primitiveType.getSimpleName() ) + "( ", " )" };
}
}

View File

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

View File

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

View File

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