mirror of
https://github.com/mapstruct/mapstruct.git
synced 2025-07-12 00:00:08 +08:00
This commit is contained in:
parent
51bd43fc1b
commit
6c1108d5bb
@ -378,6 +378,10 @@ public class MappingResolverImpl implements MappingResolver {
|
||||
* <li>there is a method from B to C, methodY</li>
|
||||
* </ul>
|
||||
* then this method tries to resolve this combination and make a mapping methodY( conversionX ( parameter ) )
|
||||
*
|
||||
* In stead of directly using a built in method candidate all the return types as 'B' of all available built-in
|
||||
* methods are used to resolve a mapping (assignment) from result type to 'B'. If a match is found, an attempt
|
||||
* is done to find a matching type conversion.
|
||||
*/
|
||||
private Assignment resolveViaConversionAndMethod(Type sourceType, Type targetType) {
|
||||
|
||||
@ -421,7 +425,11 @@ public class MappingResolverImpl implements MappingResolver {
|
||||
* <li>there is a conversion from A to B, conversionX</li>
|
||||
* <li>there is a method from B to C, methodY</li>
|
||||
* </ul>
|
||||
* then this method tries to resolve this combination and make a mapping methodY( conversionX ( parameter ) )
|
||||
* then this method tries to resolve this combination and make a mapping conversionY( methodX ( parameter ) )
|
||||
*
|
||||
* In stead of directly using a built in method candidate all the return types as 'B' of all available built-in
|
||||
* methods are used to resolve a mapping (assignment) from source type to 'B'. If a match is found, an attempt
|
||||
* is done to find a matching type conversion.
|
||||
*/
|
||||
private ConversionAssignment resolveViaMethodAndConversion(Type sourceType, Type targetType) {
|
||||
|
||||
|
@ -5,8 +5,7 @@
|
||||
*/
|
||||
package org.mapstruct.ap.test.builtin;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.ZoneId;
|
||||
@ -19,7 +18,6 @@ import java.util.GregorianCalendar;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.TimeZone;
|
||||
|
||||
import javax.xml.bind.JAXBElement;
|
||||
import javax.xml.datatype.DatatypeConfigurationException;
|
||||
import javax.xml.datatype.DatatypeFactory;
|
||||
@ -34,10 +32,13 @@ import org.junit.runner.RunWith;
|
||||
import org.junit.runners.MethodSorters;
|
||||
import org.mapstruct.ap.test.builtin._target.IterableTarget;
|
||||
import org.mapstruct.ap.test.builtin._target.MapTarget;
|
||||
import org.mapstruct.ap.test.builtin.bean.BigDecimalProperty;
|
||||
import org.mapstruct.ap.test.builtin.bean.CalendarProperty;
|
||||
import org.mapstruct.ap.test.builtin.bean.DateProperty;
|
||||
import org.mapstruct.ap.test.builtin.bean.JaxbElementListProperty;
|
||||
import org.mapstruct.ap.test.builtin.bean.JaxbElementProperty;
|
||||
import org.mapstruct.ap.test.builtin.bean.SomeType;
|
||||
import org.mapstruct.ap.test.builtin.bean.SomeTypeProperty;
|
||||
import org.mapstruct.ap.test.builtin.bean.StringListProperty;
|
||||
import org.mapstruct.ap.test.builtin.bean.StringProperty;
|
||||
import org.mapstruct.ap.test.builtin.bean.XmlGregorianCalendarProperty;
|
||||
@ -64,6 +65,8 @@ import org.mapstruct.ap.testutil.IssueKey;
|
||||
import org.mapstruct.ap.testutil.WithClasses;
|
||||
import org.mapstruct.ap.testutil.runner.AnnotationProcessorTestRunner;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Test for the generation of built-in mapping methods.
|
||||
*
|
||||
@ -78,24 +81,11 @@ import org.mapstruct.ap.testutil.runner.AnnotationProcessorTestRunner;
|
||||
JaxbElementProperty.class,
|
||||
StringListProperty.class,
|
||||
StringProperty.class,
|
||||
BigDecimalProperty.class,
|
||||
SomeTypeProperty.class,
|
||||
SomeType.class,
|
||||
XmlGregorianCalendarProperty.class,
|
||||
ZonedDateTimeProperty.class,
|
||||
CalendarToZonedDateTimeMapper.class,
|
||||
ZonedDateTimeToCalendarMapper.class,
|
||||
CalendarToDateMapper.class,
|
||||
CalendarToStringMapper.class,
|
||||
CalendarToXmlGregCalMapper.class,
|
||||
DateToCalendarMapper.class,
|
||||
DateToXmlGregCalMapper.class,
|
||||
IterableSourceTargetMapper.class,
|
||||
JaxbListMapper.class,
|
||||
JaxbMapper.class,
|
||||
MapSourceTargetMapper.class,
|
||||
StringToCalendarMapper.class,
|
||||
StringToXmlGregCalMapper.class,
|
||||
XmlGregCalToCalendarMapper.class,
|
||||
XmlGregCalToDateMapper.class,
|
||||
XmlGregCalToStringMapper.class,
|
||||
IterableSource.class,
|
||||
MapSource.class
|
||||
})
|
||||
@ -117,8 +107,8 @@ public class BuiltInTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldApplyBuiltInOnJAXBElement() throws ParseException, DatatypeConfigurationException {
|
||||
|
||||
@WithClasses( JaxbMapper.class )
|
||||
public void shouldApplyBuiltInOnJAXBElement() {
|
||||
JaxbElementProperty source = new JaxbElementProperty();
|
||||
source.setProp( createJaxb( "TEST" ) );
|
||||
source.publicProp = createJaxb( "PUBLIC TEST" );
|
||||
@ -130,6 +120,30 @@ public class BuiltInTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@WithClasses( JaxbMapper.class )
|
||||
@IssueKey( "1698" )
|
||||
public void shouldApplyBuiltInOnJAXBElementExtra() {
|
||||
JaxbElementProperty source = new JaxbElementProperty();
|
||||
source.setProp( createJaxb( "5" ) );
|
||||
source.publicProp = createJaxb( "5" );
|
||||
|
||||
BigDecimalProperty target = JaxbMapper.INSTANCE.mapBD( source );
|
||||
assertThat( target ).isNotNull();
|
||||
assertThat( target.getProp() ).isEqualTo( new BigDecimal( "5" ) );
|
||||
assertThat( target.publicProp ).isEqualTo( new BigDecimal( "5" ) );
|
||||
|
||||
JaxbElementProperty source2 = new JaxbElementProperty();
|
||||
source2.setProp( createJaxb( "5" ) );
|
||||
source2.publicProp = createJaxb( "5" );
|
||||
|
||||
SomeTypeProperty target2 = JaxbMapper.INSTANCE.mapSomeType( source2 );
|
||||
assertThat( target2 ).isNotNull();
|
||||
assertThat( target2.publicProp ).isNotNull();
|
||||
assertThat( target2.getProp() ).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
@WithClasses( JaxbListMapper.class )
|
||||
@IssueKey( "141" )
|
||||
public void shouldApplyBuiltInOnJAXBElementList() throws ParseException, DatatypeConfigurationException {
|
||||
|
||||
@ -144,6 +158,7 @@ public class BuiltInTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@WithClasses( DateToXmlGregCalMapper.class )
|
||||
public void shouldApplyBuiltInOnDateToXmlGregCal() throws ParseException, DatatypeConfigurationException {
|
||||
|
||||
DateProperty source = new DateProperty();
|
||||
@ -159,6 +174,7 @@ public class BuiltInTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@WithClasses( XmlGregCalToDateMapper.class )
|
||||
public void shouldApplyBuiltInOnXmlGregCalToDate() throws ParseException, DatatypeConfigurationException {
|
||||
|
||||
XmlGregorianCalendarProperty source = new XmlGregorianCalendarProperty();
|
||||
@ -175,6 +191,7 @@ public class BuiltInTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@WithClasses( StringToXmlGregCalMapper.class )
|
||||
public void shouldApplyBuiltInStringToXmlGregCal() throws ParseException, DatatypeConfigurationException {
|
||||
|
||||
StringProperty source = new StringProperty();
|
||||
@ -209,6 +226,7 @@ public class BuiltInTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@WithClasses( XmlGregCalToStringMapper.class )
|
||||
public void shouldApplyBuiltInXmlGregCalToString() throws ParseException, DatatypeConfigurationException {
|
||||
|
||||
XmlGregorianCalendarProperty source = new XmlGregorianCalendarProperty();
|
||||
@ -235,6 +253,7 @@ public class BuiltInTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@WithClasses( CalendarToXmlGregCalMapper.class )
|
||||
public void shouldApplyBuiltInOnCalendarToXmlGregCal() throws ParseException, DatatypeConfigurationException {
|
||||
|
||||
CalendarProperty source = new CalendarProperty();
|
||||
@ -250,6 +269,7 @@ public class BuiltInTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@WithClasses( XmlGregCalToCalendarMapper.class )
|
||||
public void shouldApplyBuiltInOnXmlGregCalToCalendar() throws ParseException, DatatypeConfigurationException {
|
||||
|
||||
XmlGregorianCalendarProperty source = new XmlGregorianCalendarProperty();
|
||||
@ -267,6 +287,7 @@ public class BuiltInTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@WithClasses( CalendarToDateMapper.class )
|
||||
public void shouldApplyBuiltInOnCalendarToDate() throws ParseException, DatatypeConfigurationException {
|
||||
|
||||
CalendarProperty source = new CalendarProperty();
|
||||
@ -282,6 +303,7 @@ public class BuiltInTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@WithClasses( DateToCalendarMapper.class )
|
||||
public void shouldApplyBuiltInOnDateToCalendar() throws ParseException, DatatypeConfigurationException {
|
||||
|
||||
DateProperty source = new DateProperty();
|
||||
@ -298,6 +320,7 @@ public class BuiltInTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@WithClasses( CalendarToStringMapper.class )
|
||||
public void shouldApplyBuiltInOnCalendarToString() throws ParseException, DatatypeConfigurationException {
|
||||
|
||||
CalendarProperty source = new CalendarProperty();
|
||||
@ -313,6 +336,7 @@ public class BuiltInTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@WithClasses( StringToCalendarMapper.class )
|
||||
public void shouldApplyBuiltInOnStringToCalendar() throws ParseException, DatatypeConfigurationException {
|
||||
|
||||
StringProperty source = new StringProperty();
|
||||
@ -329,6 +353,7 @@ public class BuiltInTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@WithClasses( IterableSourceTargetMapper.class )
|
||||
public void shouldApplyBuiltInOnIterable() throws ParseException, DatatypeConfigurationException {
|
||||
|
||||
IterableSource source = new IterableSource();
|
||||
@ -342,6 +367,7 @@ public class BuiltInTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@WithClasses( MapSourceTargetMapper.class )
|
||||
public void shouldApplyBuiltInOnMap() throws ParseException, DatatypeConfigurationException {
|
||||
|
||||
MapSource source = new MapSource();
|
||||
@ -357,6 +383,7 @@ public class BuiltInTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@WithClasses( CalendarToZonedDateTimeMapper.class )
|
||||
public void shouldApplyBuiltInOnCalendarToZonedDateTime() throws ParseException {
|
||||
assertThat( CalendarToZonedDateTimeMapper.INSTANCE.map( null ) ).isNull();
|
||||
|
||||
@ -373,6 +400,7 @@ public class BuiltInTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@WithClasses( ZonedDateTimeToCalendarMapper.class )
|
||||
public void shouldApplyBuiltInOnZonedDateTimeToCalendar() throws ParseException {
|
||||
assertThat( ZonedDateTimeToCalendarMapper.INSTANCE.map( null ) ).isNull();
|
||||
|
||||
|
@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Copyright MapStruct Authors.
|
||||
*
|
||||
* Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
package org.mapstruct.ap.test.builtin.bean;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
public class BigDecimalProperty {
|
||||
|
||||
// CHECKSTYLE:OFF
|
||||
public BigDecimal publicProp;
|
||||
// CHECKSTYLE:ON
|
||||
|
||||
private BigDecimal prop;
|
||||
|
||||
public BigDecimal getProp() {
|
||||
return prop;
|
||||
}
|
||||
|
||||
public void setProp( BigDecimal prop ) {
|
||||
this.prop = prop;
|
||||
}
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
/*
|
||||
* Copyright MapStruct Authors.
|
||||
*
|
||||
* Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
package org.mapstruct.ap.test.builtin.bean;
|
||||
|
||||
public class SomeType {
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
/*
|
||||
* Copyright MapStruct Authors.
|
||||
*
|
||||
* Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
package org.mapstruct.ap.test.builtin.bean;
|
||||
|
||||
public class SomeTypeProperty {
|
||||
|
||||
// CHECKSTYLE:OFF
|
||||
public SomeType publicProp;
|
||||
// CHECKSTYLE:ON
|
||||
|
||||
private SomeType prop;
|
||||
|
||||
public SomeType getProp() {
|
||||
return prop;
|
||||
}
|
||||
|
||||
public void setProp( SomeType prop ) {
|
||||
this.prop = prop;
|
||||
}
|
||||
}
|
@ -6,6 +6,9 @@
|
||||
package org.mapstruct.ap.test.builtin.mapper;
|
||||
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.ap.test.builtin.bean.BigDecimalProperty;
|
||||
import org.mapstruct.ap.test.builtin.bean.SomeType;
|
||||
import org.mapstruct.ap.test.builtin.bean.SomeTypeProperty;
|
||||
import org.mapstruct.ap.test.builtin.bean.JaxbElementProperty;
|
||||
import org.mapstruct.ap.test.builtin.bean.StringProperty;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
@ -16,4 +19,12 @@ public interface JaxbMapper {
|
||||
JaxbMapper INSTANCE = Mappers.getMapper( JaxbMapper.class );
|
||||
|
||||
StringProperty map(JaxbElementProperty source);
|
||||
|
||||
BigDecimalProperty mapBD(JaxbElementProperty source);
|
||||
|
||||
SomeTypeProperty mapSomeType(JaxbElementProperty source);
|
||||
|
||||
default SomeType map( String in ) {
|
||||
return new SomeType();
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user