From 8071723bae3d440d2cfa2027dcee04bc73ac2e09 Mon Sep 17 00:00:00 2001 From: Andreas Gudian Date: Thu, 1 Sep 2016 22:31:21 +0200 Subject: [PATCH] #880 Fix override behaviour for componentModel and unmappedTargetPolicy. --- .../org/mapstruct/ap/MappingProcessor.java | 5 +- .../ap/internal/model/BeanMappingMethod.java | 22 +------ ...nnotationBasedComponentModelProcessor.java | 10 +-- .../processor/MapperServiceProcessor.java | 10 +-- .../ap/internal/util/MapperConfiguration.java | 44 ++++++++----- .../mapstruct/ap/test/bugs/_880/Config.java | 30 +++++++++ .../DefaultsToProcessorOptionsMapper.java | 30 +++++++++ .../ap/test/bugs/_880/Issue880Test.java | 63 +++++++++++++++++++ .../mapstruct/ap/test/bugs/_880/Poodle.java} | 26 +++----- .../_880/UsesConfigFromAnnotationMapper.java | 30 +++++++++ 10 files changed, 200 insertions(+), 70 deletions(-) create mode 100644 processor/src/test/java/org/mapstruct/ap/test/bugs/_880/Config.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/bugs/_880/DefaultsToProcessorOptionsMapper.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/bugs/_880/Issue880Test.java rename processor/src/{main/java/org/mapstruct/ap/internal/option/OptionsHelper.java => test/java/org/mapstruct/ap/test/bugs/_880/Poodle.java} (57%) create mode 100644 processor/src/test/java/org/mapstruct/ap/test/bugs/_880/UsesConfigFromAnnotationMapper.java diff --git a/processor/src/main/java/org/mapstruct/ap/MappingProcessor.java b/processor/src/main/java/org/mapstruct/ap/MappingProcessor.java index b1deaa41e..9188fb417 100644 --- a/processor/src/main/java/org/mapstruct/ap/MappingProcessor.java +++ b/processor/src/main/java/org/mapstruct/ap/MappingProcessor.java @@ -127,13 +127,12 @@ public class MappingProcessor extends AbstractProcessor { private Options createOptions() { String unmappedTargetPolicy = processingEnv.getOptions().get( UNMAPPED_TARGET_POLICY ); - String defaultComponentModel = processingEnv.getOptions().get( DEFAULT_COMPONENT_MODEL ); return new Options( Boolean.valueOf( processingEnv.getOptions().get( SUPPRESS_GENERATOR_TIMESTAMP ) ), Boolean.valueOf( processingEnv.getOptions().get( SUPPRESS_GENERATOR_VERSION_INFO_COMMENT ) ), - unmappedTargetPolicy != null ? ReportingPolicy.valueOf( unmappedTargetPolicy ) : null, - defaultComponentModel == null ? "default" : defaultComponentModel, + unmappedTargetPolicy != null ? ReportingPolicy.valueOf( unmappedTargetPolicy.toUpperCase() ) : null, + processingEnv.getOptions().get( DEFAULT_COMPONENT_MODEL ), Boolean.valueOf( processingEnv.getOptions().get( ALWAYS_GENERATE_SERVICE_FILE ) ) ); } 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 cf5f50252..13ad6037d 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 @@ -508,32 +508,16 @@ public class BeanMappingMethod extends MappingMethod { return method.getResultType().getPropertyReadAccessors().get( propertyName ); } - /** - * Returns the effective policy for reporting unmapped getReturnType properties. If explicitly set via - * {@code Mapper}, this value will be returned. Otherwise the value from the corresponding processor option will - * be returned. If that is not set either, the default value from {@code Mapper#unmappedTargetPolicy()} will be - * returned. - * - * @return The effective policy for reporting unmapped target properties. - */ - private ReportingPolicy getEffectiveUnmappedTargetPolicy() { + private ReportingPolicy getUnmappedTargetPolicy() { MapperConfiguration mapperSettings = MapperConfiguration.getInstanceOn( ctx.getMapperTypeElement() ); - boolean setViaAnnotation = mapperSettings.isSetUnmappedTargetPolicy(); - ReportingPolicy annotationValue = ReportingPolicy.valueOf( mapperSettings.unmappedTargetPolicy() ); - if ( setViaAnnotation - || ctx.getOptions().getUnmappedTargetPolicy() == null ) { - return annotationValue; - } - else { - return ctx.getOptions().getUnmappedTargetPolicy(); - } + return mapperSettings.unmappedTargetPolicy( ctx.getOptions() ); } private void reportErrorForUnmappedTargetPropertiesIfRequired() { // fetch settings from element to implement - ReportingPolicy unmappedTargetPolicy = getEffectiveUnmappedTargetPolicy(); + ReportingPolicy unmappedTargetPolicy = getUnmappedTargetPolicy(); if ( !unprocessedTargetProperties.isEmpty() && unmappedTargetPolicy.requiresReport() ) { diff --git a/processor/src/main/java/org/mapstruct/ap/internal/processor/AnnotationBasedComponentModelProcessor.java b/processor/src/main/java/org/mapstruct/ap/internal/processor/AnnotationBasedComponentModelProcessor.java index 812eee806..cf0f3d8ef 100644 --- a/processor/src/main/java/org/mapstruct/ap/internal/processor/AnnotationBasedComponentModelProcessor.java +++ b/processor/src/main/java/org/mapstruct/ap/internal/processor/AnnotationBasedComponentModelProcessor.java @@ -32,7 +32,6 @@ import org.mapstruct.ap.internal.model.Field; import org.mapstruct.ap.internal.model.Mapper; import org.mapstruct.ap.internal.model.MapperReference; import org.mapstruct.ap.internal.model.common.TypeFactory; -import org.mapstruct.ap.internal.option.OptionsHelper; import org.mapstruct.ap.internal.util.MapperConfiguration; /** @@ -51,13 +50,10 @@ public abstract class AnnotationBasedComponentModelProcessor implements ModelEle public Mapper process(ProcessorContext context, TypeElement mapperTypeElement, Mapper mapper) { this.typeFactory = context.getTypeFactory(); - String componentModel = MapperConfiguration.getInstanceOn( mapperTypeElement ).componentModel(); - String effectiveComponentModel = OptionsHelper.getEffectiveComponentModel( - context.getOptions(), - componentModel - ); + String componentModel = MapperConfiguration.getInstanceOn( mapperTypeElement ) + .componentModel( context.getOptions() ); - if ( !getComponentModelIdentifier().equalsIgnoreCase( effectiveComponentModel ) ) { + if ( !getComponentModelIdentifier().equalsIgnoreCase( componentModel ) ) { return mapper; } diff --git a/processor/src/main/java/org/mapstruct/ap/internal/processor/MapperServiceProcessor.java b/processor/src/main/java/org/mapstruct/ap/internal/processor/MapperServiceProcessor.java index 6c301f0e8..b8533e967 100644 --- a/processor/src/main/java/org/mapstruct/ap/internal/processor/MapperServiceProcessor.java +++ b/processor/src/main/java/org/mapstruct/ap/internal/processor/MapperServiceProcessor.java @@ -28,7 +28,6 @@ import javax.tools.StandardLocation; import org.mapstruct.ap.internal.model.GeneratedType; import org.mapstruct.ap.internal.model.Mapper; import org.mapstruct.ap.internal.model.ServicesEntry; -import org.mapstruct.ap.internal.option.OptionsHelper; import org.mapstruct.ap.internal.util.MapperConfiguration; import org.mapstruct.ap.internal.writer.ModelWriter; @@ -50,13 +49,10 @@ public class MapperServiceProcessor implements ModelElementProcessor