#157 removing String array for opening and closing expression in favour of ConversionExpression

This commit is contained in:
sjaakd 2014-04-14 20:16:44 +02:00
parent b10e60d4b5
commit 909b5142b7
17 changed files with 135 additions and 77 deletions

View File

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

View File

@ -44,13 +44,13 @@ public class BigDecimalToPrimitiveConversion extends SimpleConversion {
}
@Override
public String[] getToExpressions(ConversionContext conversionContext) {
return new String[]{ "", "." + targetType.getName() + "Value()" };
public ConversionExpression getToExpressions(ConversionContext conversionContext) {
return new ConversionExpression( "", "." + targetType.getName() + "Value()" );
}
@Override
public String[] getFromExpressions(ConversionContext conversionContext) {
return new String[]{ "BigDecimal.valueOf( ", " )" };
public ConversionExpression getFromExpressions(ConversionContext conversionContext) {
return new ConversionExpression( "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[] getToExpressions(ConversionContext conversionContext) {
return new String[]{ "", ".toString()" };
public ConversionExpression getToExpressions(ConversionContext conversionContext) {
return new ConversionExpression( "", ".toString()" );
}
@Override
public String[] getFromExpressions(ConversionContext conversionContext) {
return new String[]{ "new BigDecimal( ", " )" };
public ConversionExpression getFromExpressions(ConversionContext conversionContext) {
return new ConversionExpression( "new BigDecimal( ", " )" );
}
@Override

View File

@ -45,13 +45,13 @@ public class BigDecimalToWrapperConversion extends SimpleConversion {
}
@Override
public String[] getToExpressions(ConversionContext conversionContext) {
return new String[]{ "", "." + targetType.getName() + "Value()" };
public ConversionExpression getToExpressions(ConversionContext conversionContext) {
return new ConversionExpression( "", "." + targetType.getName() + "Value()" );
}
@Override
public String[] getFromExpressions(ConversionContext conversionContext) {
return new String[]{ "BigDecimal.valueOf( ", " )" };
public ConversionExpression getFromExpressions(ConversionContext conversionContext) {
return new ConversionExpression( "BigDecimal.valueOf( ", " )" );
}
@Override

View File

@ -44,17 +44,17 @@ public class BigIntegerToPrimitiveConversion extends SimpleConversion {
}
@Override
public String[] getToExpressions(ConversionContext conversionContext) {
return new String[]{ "", "." + targetType.getName() + "Value()" };
public ConversionExpression getToExpressions(ConversionContext conversionContext) {
return new ConversionExpression( "", "." + targetType.getName() + "Value()" );
}
@Override
public String[] getFromExpressions(ConversionContext conversionContext) {
public ConversionExpression getFromExpressions(ConversionContext conversionContext) {
String castString = "";
if ( targetType == float.class || targetType == double.class ) {
castString = "(long) ";
}
return new String[]{ "BigInteger.valueOf( " + castString, " )" };
return new ConversionExpression( "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[] getToExpressions(ConversionContext conversionContext) {
return new String[]{ "", ".toString()" };
public ConversionExpression getToExpressions(ConversionContext conversionContext) {
return new ConversionExpression( "", ".toString()" );
}
@Override
public String[] getFromExpressions(ConversionContext conversionContext) {
return new String[]{ "new BigInteger( ", " )" };
public ConversionExpression getFromExpressions(ConversionContext conversionContext) {
return new ConversionExpression( "new BigInteger( ", " )" );
}
@Override

View File

@ -45,19 +45,19 @@ public class BigIntegerToWrapperConversion extends SimpleConversion {
}
@Override
public String[] getToExpressions(ConversionContext conversionContext) {
return new String[]{ "", "." + targetType.getName() + "Value()" };
public ConversionExpression getToExpressions(ConversionContext conversionContext) {
return new ConversionExpression( "", "." + targetType.getName() + "Value()" );
}
@Override
public String[] getFromExpressions(ConversionContext conversionContext) {
public ConversionExpression getFromExpressions(ConversionContext conversionContext) {
String toLongValueStr = "";
if ( targetType == float.class || targetType == double.class ) {
toLongValueStr = ".longValue()";
}
return new String[]{ "BigInteger.valueOf( ", toLongValueStr + " )" };
return new ConversionExpression( "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[] getToExpressions(ConversionContext conversionContext) {
return new String[]{ "String.valueOf( ", " )" };
public ConversionExpression getToExpressions(ConversionContext conversionContext) {
return new ConversionExpression( "String.valueOf( ", " )" );
}
@Override
public String[] getFromExpressions(ConversionContext conversionContext) {
return new String[]{ "", ".charAt( 0 )" };
public ConversionExpression getFromExpressions(ConversionContext conversionContext) {
return new ConversionExpression( "", ".charAt( 0 )" );
}
}

View File

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

View File

@ -0,0 +1,56 @@
/**
* Copyright 2012-2014 Gunnar Morling (http://www.gunnarmorling.de/)
* and/or other contributors as indicated by the @authors tag. See the
* copyright.txt file in the distribution for a full listing of all
* contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.mapstruct.ap.conversion;
/**
*
* @author Sjaak Derksen
*/
public class ConversionExpression {
private final String openExpression;
private final String closeExpression;
private String expression;
public static ConversionExpression empty() {
return new ConversionExpression( "", "" );
}
public ConversionExpression( String openExpression, String closeExpression ) {
this.openExpression = openExpression;
this.closeExpression = closeExpression;
}
public String getOpenExpression() {
return openExpression;
}
public String getCloseExpression() {
return closeExpression;
}
public String getExpression() {
return expression;
}
public void setExpression( String expression ) {
this.expression = expression;
}
}

View File

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

View File

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

View File

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

View File

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

View File

@ -34,24 +34,24 @@ public abstract class SimpleConversion implements ConversionProvider {
@Override
public TypeConversion to(String sourceReference, ConversionContext conversionContext) {
String[] toExpressions = getToExpressions( conversionContext );
ConversionExpression toExpressions = getToExpressions( conversionContext );
return new TypeConversion(
getToConversionImportTypes( conversionContext ),
Collections.<Type>emptyList(),
toExpressions[0],
toExpressions.getOpenExpression(),
sourceReference,
toExpressions[1] );
toExpressions.getCloseExpression() );
}
@Override
public TypeConversion from(String targetReference, ConversionContext conversionContext) {
String[] fromExpressions = getFromExpressions( conversionContext );
ConversionExpression fromExpressions = getFromExpressions( conversionContext );
return new TypeConversion(
getFromConversionImportTypes( conversionContext ),
Collections.<Type>emptyList(),
fromExpressions[0],
fromExpressions.getOpenExpression(),
targetReference,
fromExpressions[1] );
fromExpressions.getCloseExpression() );
}
/**
@ -59,10 +59,10 @@ public abstract class SimpleConversion implements ConversionProvider {
*
* @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
* @return The conversion string from source to target. toConversionExpressions[0] = openConversionExpression,
toConversionExpressions[1] = closeConversionExpression
*/
protected abstract String[] getToExpressions( ConversionContext conversionContext );
protected abstract ConversionExpression getToExpressions( ConversionContext conversionContext );
/**
* Creates the conversion string (opening and closing part) from target to source.
@ -70,10 +70,10 @@ public abstract class SimpleConversion implements ConversionProvider {
* @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
* @return The conversion string from target to source, fromConversionExpressions[0] = openConversionExpression,
fromConversionExpressions[1] = closeConversionExpression
*/
protected abstract String[] getFromExpressions( ConversionContext conversionContext );
protected abstract ConversionExpression getFromExpressions( ConversionContext conversionContext );
/**
* Returns a set with imported types of the "from" conversion. Defaults to an empty set; can be overridden in

View File

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

View File

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