mirror of
https://github.com/mapstruct/mapstruct.git
synced 2025-07-12 00:00:08 +08:00
#229 Add null-check before auto-unboxing in direct assignments
This commit is contained in:
parent
a6a9971c30
commit
5afc627735
@ -791,13 +791,13 @@ public class MapperCreationProcessor implements ModelElementProcessor<List<Sourc
|
||||
if ( assignment.getType() == DIRECT ) {
|
||||
assignment = new NullCheckWrapper( assignment );
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
|
||||
if ( targetAccessorType == TargetAccessorType.SETTER ) {
|
||||
assignment = new SetterWrapper( assignment, method.getThrownTypes() );
|
||||
if ( !sourceType.isPrimitive() && ( assignment.getType() == TYPE_CONVERTED ) ) {
|
||||
if ( !sourceType.isPrimitive() &&
|
||||
( assignment.getType() == TYPE_CONVERTED ||
|
||||
assignment.getType() == DIRECT && targetType.isPrimitive() ) ) {
|
||||
// for primitive types null check is not possible at all, but a conversion needs
|
||||
// a null check.
|
||||
assignment = new NullCheckWrapper( assignment );
|
||||
|
@ -18,13 +18,14 @@
|
||||
*/
|
||||
package org.mapstruct.ap.test.conversion.nativetypes;
|
||||
|
||||
import static org.fest.assertions.Assertions.assertThat;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mapstruct.ap.testutil.IssueKey;
|
||||
import org.mapstruct.ap.testutil.WithClasses;
|
||||
import org.mapstruct.ap.testutil.runner.AnnotationProcessorTestRunner;
|
||||
|
||||
import static org.fest.assertions.Assertions.assertThat;
|
||||
|
||||
@WithClasses({
|
||||
BooleanSource.class,
|
||||
BooleanTarget.class,
|
||||
@ -58,4 +59,14 @@ public class BooleanConversionTest {
|
||||
assertThat( source.isB() ).isEqualTo( true );
|
||||
assertThat( source.getBool() ).isEqualTo( true );
|
||||
}
|
||||
|
||||
@Test
|
||||
@IssueKey( "229" )
|
||||
public void wrapperToPrimitveIsNullSafe() {
|
||||
BooleanTarget target = new BooleanTarget();
|
||||
|
||||
BooleanSource source = BooleanMapper.INSTANCE.targetToSource( target );
|
||||
|
||||
assertThat( source ).isNotNull();
|
||||
}
|
||||
}
|
||||
|
@ -18,13 +18,14 @@
|
||||
*/
|
||||
package org.mapstruct.ap.test.conversion.nativetypes;
|
||||
|
||||
import static org.fest.assertions.Assertions.assertThat;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mapstruct.ap.testutil.IssueKey;
|
||||
import org.mapstruct.ap.testutil.WithClasses;
|
||||
import org.mapstruct.ap.testutil.runner.AnnotationProcessorTestRunner;
|
||||
|
||||
import static org.fest.assertions.Assertions.assertThat;
|
||||
|
||||
@WithClasses({
|
||||
CharSource.class,
|
||||
CharTarget.class,
|
||||
@ -54,4 +55,14 @@ public class CharConversionTest {
|
||||
assertThat( source ).isNotNull();
|
||||
assertThat( source.getC() ).isEqualTo( 'G' );
|
||||
}
|
||||
|
||||
@Test
|
||||
@IssueKey( "229" )
|
||||
public void wrapperToPrimitveIsNullSafe() {
|
||||
CharTarget target = new CharTarget();
|
||||
|
||||
CharSource source = CharMapper.INSTANCE.targetToSource( target );
|
||||
|
||||
assertThat( source ).isNotNull();
|
||||
}
|
||||
}
|
||||
|
@ -18,13 +18,14 @@
|
||||
*/
|
||||
package org.mapstruct.ap.test.conversion.nativetypes;
|
||||
|
||||
import static org.fest.assertions.Assertions.assertThat;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mapstruct.ap.testutil.IssueKey;
|
||||
import org.mapstruct.ap.testutil.WithClasses;
|
||||
import org.mapstruct.ap.testutil.runner.AnnotationProcessorTestRunner;
|
||||
|
||||
import static org.fest.assertions.Assertions.assertThat;
|
||||
|
||||
@WithClasses({
|
||||
ByteSource.class,
|
||||
ByteTarget.class,
|
||||
@ -450,4 +451,15 @@ public class NumberConversionTest {
|
||||
assertThat( target.getD() ).isEqualTo( 11d );
|
||||
assertThat( target.getDd() ).isEqualTo( Double.valueOf( 12d ) );
|
||||
}
|
||||
|
||||
@Test
|
||||
@IssueKey( "229" )
|
||||
public void wrapperToPrimitveIsNullSafe() {
|
||||
assertThat( SourceTargetMapper.INSTANCE.sourceToTarget( new ByteWrapperSource() ) ).isNotNull();
|
||||
assertThat( SourceTargetMapper.INSTANCE.sourceToTarget( new DoubleWrapperSource() ) ).isNotNull();
|
||||
assertThat( SourceTargetMapper.INSTANCE.sourceToTarget( new ShortWrapperSource() ) ).isNotNull();
|
||||
assertThat( SourceTargetMapper.INSTANCE.sourceToTarget( new IntWrapperSource() ) ).isNotNull();
|
||||
assertThat( SourceTargetMapper.INSTANCE.sourceToTarget( new FloatWrapperSource() ) ).isNotNull();
|
||||
assertThat( SourceTargetMapper.INSTANCE.sourceToTarget( new LongWrapperSource() ) ).isNotNull();
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user