mirror of
https://github.com/mapstruct/mapstruct.git
synced 2025-07-12 00:00:08 +08:00
#157 accomodating for conversionY( methodX ( parameter ) )
This commit is contained in:
parent
3c58551649
commit
23f3d4a3c1
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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 )" };
|
||||
}
|
||||
}
|
||||
|
@ -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 )" };
|
||||
}
|
||||
}
|
||||
|
@ -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 " )";
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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 + ") ", "" };
|
||||
}
|
||||
}
|
||||
|
@ -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() ) + "( ", " )" };
|
||||
}
|
||||
}
|
||||
|
@ -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()" };
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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() ) + "( ", " )" };
|
||||
}
|
||||
}
|
||||
|
@ -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()" };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -18,4 +18,4 @@
|
||||
limitations under the License.
|
||||
|
||||
-->
|
||||
${conversionString}
|
||||
${openExpression}${sourceReference}${closeExpression}
|
Loading…
x
Reference in New Issue
Block a user