From 9881a8803cead1ebf7594940c5d71ebc6cadf743 Mon Sep 17 00:00:00 2001 From: Filip Hrisafov Date: Wed, 15 Mar 2017 22:04:58 +0100 Subject: [PATCH] #1104 use unmapped target policy for forged name based mappings --- .../ap/internal/model/BeanMappingMethod.java | 89 +++++--- .../mapstruct/ap/internal/util/Message.java | 2 + ...=> AbstractSourceTargetMapperPrivate.java} | 6 +- .../ReferencedAccessibilityTest.java | 83 ++++--- ...va => SourceTargetMapperDefaultOther.java} | 6 +- ...te.java => SourceTargetMapperPrivate.java} | 4 +- .../nestedbeans/DottedErrorMessageTest.java | 214 ++++++++++++------ .../BaseCollectionElementPropertyMapper.java} | 9 +- .../BaseDeepListMapper.java} | 9 +- .../BaseDeepMapKeyMapper.java} | 9 +- .../BaseDeepMapValueMapper.java} | 9 +- .../BaseDeepNestingMapper.java} | 9 +- .../BaseValuePropertyMapper.java} | 9 +- .../{erroneous => unmappable}/Car.java | 2 +- .../{erroneous => unmappable}/CarDto.java | 2 +- .../{erroneous => unmappable}/Cat.java | 2 +- .../{erroneous => unmappable}/CatDto.java | 2 +- .../{erroneous => unmappable}/Color.java | 2 +- .../{erroneous => unmappable}/ColorDto.java | 2 +- .../{erroneous => unmappable}/Computer.java | 2 +- .../ComputerDto.java | 2 +- .../{erroneous => unmappable}/Dictionary.java | 2 +- .../DictionaryDto.java | 2 +- .../ExternalRoofType.java | 2 +- .../ForeignWord.java | 2 +- .../ForeignWordDto.java | 2 +- .../{erroneous => unmappable}/House.java | 2 +- .../{erroneous => unmappable}/HouseDto.java | 2 +- .../{erroneous => unmappable}/Info.java | 2 +- .../{erroneous => unmappable}/InfoDto.java | 2 +- .../{erroneous => unmappable}/Roof.java | 2 +- .../{erroneous => unmappable}/RoofDto.java | 2 +- .../{erroneous => unmappable}/RoofType.java | 2 +- .../RoofTypeMapper.java | 2 +- .../{erroneous => unmappable}/User.java | 2 +- .../{erroneous => unmappable}/UserDto.java | 2 +- .../{erroneous => unmappable}/Wheel.java | 2 +- .../{erroneous => unmappable}/WheelDto.java | 2 +- .../{erroneous => unmappable}/Word.java | 2 +- .../{erroneous => unmappable}/WordDto.java | 2 +- ...ppableCollectionElementPropertyMapper.java | 28 +++ .../erroneous/UnmappableDeepListMapper.java | 28 +++ .../erroneous/UnmappableDeepMapKeyMapper.java | 28 +++ .../UnmappableDeepMapValueMapper.java | 28 +++ .../UnmappableDeepNestingMapper.java | 28 +++ .../erroneous/UnmappableEnumMapper.java | 14 +- .../UnmappableValuePropertyMapper.java | 28 +++ ...IgnoreCollectionElementPropertyMapper.java | 28 +++ .../UnmappableIgnoreDeepListMapper.java | 28 +++ .../UnmappableIgnoreDeepMapKeyMapper.java | 28 +++ .../UnmappableIgnoreDeepMapValueMapper.java | 28 +++ .../UnmappableIgnoreDeepNestingMapper.java | 28 +++ .../UnmappableIgnoreValuePropertyMapper.java | 28 +++ ...leWarnCollectionElementPropertyMapper.java | 27 +++ .../warn/UnmappableWarnDeepListMapper.java | 27 +++ .../warn/UnmappableWarnDeepMapKeyMapper.java | 27 +++ .../UnmappableWarnDeepMapValueMapper.java | 27 +++ .../warn/UnmappableWarnDeepNestingMapper.java | 27 +++ .../UnmappableWarnValuePropertyMapper.java | 27 +++ ...ompanyMapper1.java => CompanyMapper1.java} | 4 +- .../test/updatemethods/UpdateMethodsTest.java | 16 +- ...AbstractSourceTargetMapperPrivateImpl.java | 52 +++++ .../SourceTargetMapperDefaultOtherImpl.java | 52 +++++ .../SourceTargetMapperPrivateImpl.java | 52 +++++ .../updatemethods/CompanyMapper1Impl.java | 133 +++++++++++ 65 files changed, 1114 insertions(+), 219 deletions(-) rename processor/src/test/java/org/mapstruct/ap/test/accessibility/referenced/{ErroneousAbstractSourceTargetMapperPrivate.java => AbstractSourceTargetMapperPrivate.java} (80%) rename processor/src/test/java/org/mapstruct/ap/test/accessibility/referenced/{ErroneousSourceTargetMapperDefaultOther.java => SourceTargetMapperDefaultOther.java} (86%) rename processor/src/test/java/org/mapstruct/ap/test/accessibility/referenced/{ErroneousSourceTargetMapperPrivate.java => SourceTargetMapperPrivate.java} (87%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous/UnmappableCollectionElementPropertyMapper.java => unmappable/BaseCollectionElementPropertyMapper.java} (82%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous/UnmappableDeepListMapper.java => unmappable/BaseDeepListMapper.java} (84%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous/UnmappableDeepMapKeyMapper.java => unmappable/BaseDeepMapKeyMapper.java} (84%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous/UnmappableDeepMapValueMapper.java => unmappable/BaseDeepMapValueMapper.java} (84%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous/UnmappableDeepNestingMapper.java => unmappable/BaseDeepNestingMapper.java} (83%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous/UnmappableValuePropertyMapper.java => unmappable/BaseValuePropertyMapper.java} (83%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous => unmappable}/Car.java (96%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous => unmappable}/CarDto.java (96%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous => unmappable}/Cat.java (94%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous => unmappable}/CatDto.java (94%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous => unmappable}/Color.java (95%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous => unmappable}/ColorDto.java (94%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous => unmappable}/Computer.java (94%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous => unmappable}/ComputerDto.java (94%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous => unmappable}/Dictionary.java (95%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous => unmappable}/DictionaryDto.java (95%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous => unmappable}/ExternalRoofType.java (94%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous => unmappable}/ForeignWord.java (94%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous => unmappable}/ForeignWordDto.java (95%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous => unmappable}/House.java (95%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous => unmappable}/HouseDto.java (95%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous => unmappable}/Info.java (94%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous => unmappable}/InfoDto.java (94%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous => unmappable}/Roof.java (95%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous => unmappable}/RoofDto.java (95%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous => unmappable}/RoofType.java (94%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous => unmappable}/RoofTypeMapper.java (95%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous => unmappable}/User.java (97%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous => unmappable}/UserDto.java (97%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous => unmappable}/Wheel.java (95%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous => unmappable}/WheelDto.java (95%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous => unmappable}/Word.java (94%) rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{erroneous => unmappable}/WordDto.java (95%) create mode 100644 processor/src/test/java/org/mapstruct/ap/test/nestedbeans/unmappable/erroneous/UnmappableCollectionElementPropertyMapper.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/nestedbeans/unmappable/erroneous/UnmappableDeepListMapper.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/nestedbeans/unmappable/erroneous/UnmappableDeepMapKeyMapper.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/nestedbeans/unmappable/erroneous/UnmappableDeepMapValueMapper.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/nestedbeans/unmappable/erroneous/UnmappableDeepNestingMapper.java rename processor/src/test/java/org/mapstruct/ap/test/nestedbeans/{ => unmappable}/erroneous/UnmappableEnumMapper.java (62%) create mode 100644 processor/src/test/java/org/mapstruct/ap/test/nestedbeans/unmappable/erroneous/UnmappableValuePropertyMapper.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/nestedbeans/unmappable/ignore/UnmappableIgnoreCollectionElementPropertyMapper.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/nestedbeans/unmappable/ignore/UnmappableIgnoreDeepListMapper.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/nestedbeans/unmappable/ignore/UnmappableIgnoreDeepMapKeyMapper.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/nestedbeans/unmappable/ignore/UnmappableIgnoreDeepMapValueMapper.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/nestedbeans/unmappable/ignore/UnmappableIgnoreDeepNestingMapper.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/nestedbeans/unmappable/ignore/UnmappableIgnoreValuePropertyMapper.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/nestedbeans/unmappable/warn/UnmappableWarnCollectionElementPropertyMapper.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/nestedbeans/unmappable/warn/UnmappableWarnDeepListMapper.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/nestedbeans/unmappable/warn/UnmappableWarnDeepMapKeyMapper.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/nestedbeans/unmappable/warn/UnmappableWarnDeepMapValueMapper.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/nestedbeans/unmappable/warn/UnmappableWarnDeepNestingMapper.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/nestedbeans/unmappable/warn/UnmappableWarnValuePropertyMapper.java rename processor/src/test/java/org/mapstruct/ap/test/updatemethods/{ErroneousCompanyMapper1.java => CompanyMapper1.java} (91%) create mode 100644 processor/src/test/resources/fixtures/org/mapstruct/ap/test/accessibility/referenced/AbstractSourceTargetMapperPrivateImpl.java create mode 100644 processor/src/test/resources/fixtures/org/mapstruct/ap/test/accessibility/referenced/SourceTargetMapperDefaultOtherImpl.java create mode 100644 processor/src/test/resources/fixtures/org/mapstruct/ap/test/accessibility/referenced/SourceTargetMapperPrivateImpl.java create mode 100644 processor/src/test/resources/fixtures/org/mapstruct/ap/test/updatemethods/CompanyMapper1Impl.java diff --git a/processor/src/main/java/org/mapstruct/ap/internal/model/BeanMappingMethod.java b/processor/src/main/java/org/mapstruct/ap/internal/model/BeanMappingMethod.java index 8911fef2d..39e942965 100644 --- a/processor/src/main/java/org/mapstruct/ap/internal/model/BeanMappingMethod.java +++ b/processor/src/main/java/org/mapstruct/ap/internal/model/BeanMappingMethod.java @@ -674,52 +674,71 @@ public class BeanMappingMethod extends NormalTypeMappingMethod { // fetch settings from element to implement ReportingPolicyPrism unmappedTargetPolicy = getUnmappedTargetPolicy(); - //we handle automapping forged methods differently than the usual source ones. in - if ( method instanceof ForgedMethod && ( (ForgedMethod) method ).isForgedNamedBased() ) { - - ForgedMethod forgedMethod = (ForgedMethod) this.method; - if ( targetProperties.isEmpty() || !unprocessedTargetProperties.isEmpty() ) { - - if ( forgedMethod.getHistory() == null ) { - Type sourceType = this.method.getParameters().get( 0 ).getType(); - Type targetType = this.method.getReturnType(); - ctx.getMessager().printMessage( - this.method.getExecutable(), - Message.PROPERTYMAPPING_FORGED_MAPPING_NOT_FOUND, - sourceType, - targetType, - targetType, - sourceType - ); - } - else { - ForgedMethodHistory history = forgedMethod.getHistory(); - ctx.getMessager().printMessage( - this.method.getExecutable(), - Message.PROPERTYMAPPING_MAPPING_NOT_FOUND, - history.createSourcePropertyErrorMessage(), - history.getTargetType(), - history.createTargetPropertyName(), - history.getTargetType(), - history.getSourceType() - ); - } - + if ( method instanceof ForgedMethod && targetProperties.isEmpty() ) { + //TODO until we solve 1140 we report this error when the target properties are empty + ForgedMethod forgedMethod = (ForgedMethod) method; + if ( forgedMethod.getHistory() == null ) { + Type sourceType = this.method.getParameters().get( 0 ).getType(); + Type targetType = this.method.getReturnType(); + ctx.getMessager().printMessage( + this.method.getExecutable(), + Message.PROPERTYMAPPING_FORGED_MAPPING_NOT_FOUND, + sourceType, + targetType, + targetType, + sourceType + ); + } + else { + ForgedMethodHistory history = forgedMethod.getHistory(); + ctx.getMessager().printMessage( + this.method.getExecutable(), + Message.PROPERTYMAPPING_MAPPING_NOT_FOUND, + history.createSourcePropertyErrorMessage(), + history.getTargetType(), + history.createTargetPropertyName(), + history.getTargetType(), + history.getSourceType() + ); } } else if ( !unprocessedTargetProperties.isEmpty() && unmappedTargetPolicy.requiresReport() ) { Message msg = unmappedTargetPolicy.getDiagnosticKind() == Diagnostic.Kind.ERROR ? Message.BEANMAPPING_UNMAPPED_TARGETS_ERROR : Message.BEANMAPPING_UNMAPPED_TARGETS_WARNING; - - ctx.getMessager().printMessage( - method.getExecutable(), - msg, + Object[] args = new Object[] { MessageFormat.format( "{0,choice,1#property|1 secretaryDtoEmployeeDtoMapToSecretaryEntityEmployeeEntityMap(Map map) { + if ( map == null ) { + return null; + } + + Map map1 = new HashMap(); + + for ( java.util.Map.Entry entry : map.entrySet() ) { + SecretaryEntity key = secretaryDtoToSecretaryEntity( entry.getKey() ); + EmployeeEntity value = employeeDtoToEmployeeEntity( entry.getValue() ); + map1.put( key, value ); + } + + return map1; + } + + protected void unmappableDepartmentDtoToDepartmentEntity(UnmappableDepartmentDto unmappableDepartmentDto, DepartmentEntity mappingTarget) { + if ( unmappableDepartmentDto == null ) { + return; + } + + mappingTarget.setName( unmappableDepartmentDto.getName() ); + if ( mappingTarget.getSecretaryToEmployee() != null ) { + Map map = secretaryDtoEmployeeDtoMapToSecretaryEntityEmployeeEntityMap( unmappableDepartmentDto.getSecretaryToEmployee() ); + if ( map != null ) { + mappingTarget.getSecretaryToEmployee().clear(); + mappingTarget.getSecretaryToEmployee().putAll( map ); + } + else { + mappingTarget.setSecretaryToEmployee( null ); + } + } + else { + Map map = secretaryDtoEmployeeDtoMapToSecretaryEntityEmployeeEntityMap( unmappableDepartmentDto.getSecretaryToEmployee() ); + if ( map != null ) { + mappingTarget.setSecretaryToEmployee( map ); + } + } + } +}