262 Commits

Author SHA1 Message Date
dmngb
c59ca79e7f
#2277 default component model: mapper reference use singleton INSTANCE if it exists (#2280)
This allows to easily avoid the runtime dependency on mapstruct.jar:
we can avoid Mappers.getMapper(...) for instantiating used mappers if
the code follows the conventional pattern for creating mapper singletons.

Co-authored-by: GIBOU Damien <damien.gibou@biomerieux.com>
2021-02-06 16:10:32 +01:00
Filip Hrisafov
84c3bda5a2
#2274, #2023 Fix problems with property mapping using source parameters
Fixes problems when property mapping is using source parameter and has default value / expression or is doing an update
2020-11-22 13:04:26 +01:00
Filip Hrisafov
7dcbef349d
#2169 Add support for defining a custom unexpected value mapping exception
Expose definition via:

* `@EnumMapping`
* `@Mapper`
* `@MapperConfig`
* `EnumMappingStrategy` SPI

Rename `EnumNamingStrategy` to `EnumMappingStrategy`
2020-08-29 13:53:30 +02:00
Filip Hrisafov
da37d40152
#2109 Generate correct array assignment for constructor parameter mapping 2020-06-07 16:45:32 +02:00
Filip Hrisafov
7b5a54971f
Add EnumTransformationStrategy SPI (#2089)
Add a new custom EnumTransformationStrategy SPI which can be used for providing custom way of name based mapping for enums.

Add 4 out of the box transformation strategies:

* prefix - add a prefix to the name based enum mapping
* stripPrefix - remove a prefix from the name based enum mapping
* suffix - add a suffix to the name based enum mapping
* stripSuffix - remove a suffix from the name based enum mapping

This can be achieved by using the new `EnumMapping`

e.g.

Add suffix `_TYPE` to all enums:

`@EnumMapping(nameTransformationStrategy = "suffix", configuration = "_TYPE")`

With this it would be possible to achieve what is needed in #796, #1220, #1789.
2020-05-18 07:17:30 +02:00
Filip Hrisafov
2b2299a730 #73 Add support for using constructor arguments when instantiating mapping targets
By default the constructor argument names are used to extract the target properties.
If a constructor is annotated with an annotation named `@ConstructorProperties` (from any package) then it would be used to extract the target properties.

If a mapping target has a parameterless empty constructor it would be used to instantiate the target.
When there are multiple constructors then an annotation named `@Default` (from any package) can be used to mark a constructor that should be used by default when instantiating the target.

Supports mapping into Java 14 Records and Kotlin data classes out of the box
2020-04-26 12:44:41 +02:00
ttzn
779eb1bd47 #1420 Add support for Gradle incremental annotation processing (#1971)
* Add relevant file in META-INF
* Add integration test with Gradle test kit dependencies
* Test with Gradle 5 and Gradle 6
2019-12-08 19:55:16 +01:00
Sjaak Derksen
507ec1b384
#1557 & #1936 String-to-enum and enum-to-String (#1938)
* #1557 making enum-to-string and string-to-enum

* #1936 <ANY_REMAINING> and <ANY_UNMAPPED> not ignored when inverting
2019-10-07 20:30:20 +02:00
Andrei Arlou
f4c9313972
#1791 Support for conversion between java.time.LocalDateTime and javax.xml.datatype.XMLGregorianCalendar (#1894) 2019-09-21 22:27:45 +03:00
Jonathan Kraska
119826982a #1826: fixed null pointer in nested property mapping when using presence checking (#1827) 2019-05-26 17:41:44 +02:00
Sjaak Derksen
33710584d3
#1742 & #1661 refactoring and making builder optional (#1811) 2019-05-24 23:30:16 +02:00
Filip Hrisafov
1415e32761
#1797 Use EnumSet.noneOf when creating a new instance of EnumSet 2019-05-05 12:42:25 +02:00
Filip Hrisafov
bc010a52dc #1738: Use typeBound for the return type of the nested property mapping method and for the definition of the properties within the method 2019-03-15 20:36:03 +01:00
Sjaak Derksen
3c079e412a
#1707 fix for not defining local variable in stream-iterable mapping (#1708) 2019-02-10 10:31:51 +01:00
Sjaak Derksen
07c7a29adc
#1700 Optimizing code for adders and stream adders (#1701) 2019-01-29 20:02:23 +01:00
Sjaak Derksen
0981959ff0
#1699 add sensible defaults to NullValuePropertyMapping.SET_TO_DEFAULT (#1702) 2019-01-28 22:47:37 +01:00
Sjaak Derksen
57caee250f
#1685 completing nullvaluepropertymappingstrategy (#1697) 2019-01-27 21:09:44 +01:00
Sjaak Derksen
743361ca45
#1650 cannot find symbol nested mapping mappingtarget (#1671)
* #1650 reproducer

* #1650 fix cannot-find-symbol

* #1650 reproducer, extended
2018-12-20 21:12:37 +01:00
Sjaak Derksen
cf668bea77
#1576 Delay determining whether a Type needs to be imported & java.time cleanup (#1642) 2018-11-06 07:36:09 +00:00
Sjaak Derksen
288813fc3c
#1306 Add new NullValuePropertyMappingStrategy which leaves @MappingTarget untouched (#1618) 2018-10-25 22:14:26 +01:00
Sebastian
30c2dadec7 #1561 add support for adders in combination with streams
- Extended Type#getAlternativeTargetAccessors to recognize stream read
  accessors for which no corresponding setter exists
  (there is only an add method)
- Extended SourceRHS#getSourceTypeForMatching to return the
  correct source type for streams too
- Add StreamAdderWrapper to map Stream -> Adder
- Extended PropertyMapping$PropertyMappingBuilder#assignToPlainViaAdder
  to return StreamAdderWrapper if source type is stream
2018-09-24 22:23:34 +02:00
Sjaak Derksen
10f855fa9e
#1532 using fields and constructor fragments optimizing DataTypeFactory usage 2018-08-14 23:53:41 +02:00
Christian Bandowski
6b89539ff6 #1541 Fix NPE when using varargs in mapping methods 2018-07-24 18:19:42 +02:00
MapStruct Team
b35126e609 #1411 Update copyright header on all files
* Use new shorter copyright header without a year
* Use SLASHSTAR_STYLE for Java files
2018-07-15 19:29:28 +02:00
Sjaak Derksen
58a2aa94bb
#1482 allowing generic self references in types when matching 2018-07-14 16:27:10 +02:00
Christian Bandowski
508de6733e #1523 dont lose timezone mapping Calendar to XMLGregorianCalendar 2018-06-21 22:32:36 +02:00
Christian Bandowski
b291907918 #1460 Ensures the FQN will be used for SimpleConversion if required
* Added getReferenceName() to Type which returns simple or fully-qualified-name
* Use getReferenceName() in all SimpleConversions
* Added testcase that is not working without these changes
* Added ConversionUtils with a lot of helper methods to create the "reference names" used in SimpleConversions
2018-05-05 20:42:37 +02:00
Filip Hrisafov
bf31ec72de
#1338 Using an adder with non generic source collection should work 2018-05-04 08:09:37 +02:00
Filip Hrisafov
4a05c8d5f1
#1433 Support for lifecycle methods for builders
When doing mappings with builder the effective type should be considered for lifecycle callback methods
2018-04-24 21:36:48 +02:00
Christian Bandowski
5540efc482 #1425 Added findType to VirtualMappingMethod and use it in all builtin templates
Together with the includeModel directive this will ensure that the type will be written to the file as a FQN if required, otherwise as a simple name.
2018-04-21 18:59:29 +02:00
Filip Hrisafov
2b9fdac7f7 #782 Wording cleanup after PR review 2018-04-04 19:26:22 +02:00
Filip Hrisafov
45abe9e35b #782 Add BuilderInfo to SPI
The implementors of the SPI should return all the required information
2018-04-04 19:26:22 +02:00
Filip Hrisafov
d99a4cc217 #782 Add support for mapping immutable classes with builders 2018-04-04 19:26:22 +02:00
Filip Hrisafov
460e87eef6 #1340 Create correct overriden method for Value Mappings
* The Value / Enum Mappings should copy all the parameters from the method that is being overriden
* The source parameter should be the first source parameter
2017-11-24 00:48:19 +01:00
Richard Lea
49e39e0ed5 #1332 Fix exceptions declaration missing in generated nested private methods 2017-11-23 23:41:42 +01:00
Kevin
0192bdaf83 #571 Add Constructor Injection for Annotation Based Component Model
- Allow configuring of injection strategy (Constructor / Field)
- Default injection strategy is Field
2017-10-20 22:56:48 +02:00
Kevin Grüneberg
499dbd4561 #1273 Fix for NullValueMappingStrategy#RETURN_DEFAULT when using collections
When mapping a collection using NullValueMappingStrategy#RETURN_DEFAULT and the source is null, the target will be an empty collection.
2017-09-17 23:03:24 +02:00
Filip Hrisafov
3004ea28c5 #1131 Use SourceRHS source type for update methods factories
If a SourceRHS is present then the source type of the SourceRHS and the MappingContext parameters are considered for the factory method selection, i.e. the other source parameters are ignored
2017-07-11 21:53:38 +02:00
Filip Hrisafov
3ebd09eec9 #1244 Fix problems with special word for FreeMarker in some cases 2017-07-10 20:37:09 +02:00
Filip Hrisafov
82da71199d #543 Make sure that the bound type is imported if the type is wildcard 2017-07-02 20:25:35 +02:00
Cornelius
b5b0c04313 #1170 Fix wildcards in collection adder mappings 2017-06-29 00:01:49 +02:00
Filip Hrisafov
ceaa869c65 #1215 Add import correctly for array types 2017-05-30 21:35:39 +02:00
Filip Hrisafov
15133d5a0f #777 Set initial capacity for new collection / map element in collection / map mappings 2017-05-06 15:04:42 +02:00
Filip Hrisafov
763deaa917 #1164 Split the SetterWrapperForCollections into multiple models:
* SetterWrapperForCollectionsAndMaps - Does a simple assignment without doing any null checks
* SetterWrapperForCollectionsAndMapsWithNullCheck - Does an assignment that does a null check before assignment and takes direct assignment into consideration
* ExistingInstanceSetterWrapperForCollectionsAndMaps - Used for wrapping an assignment when the method is an update method

Additionally don't do local var assignment if there are presence checkers
2017-04-25 22:41:51 +02:00
sjaakd
e154452d53 #1126 Add new CollectionMappingStrategy TARGET_IMMUTABLE 2017-03-14 21:36:36 +01:00
Filip Hrisafov
d4c6250944 #1102 Add support for Auto forging of Enum properties 2017-03-12 15:34:46 +01:00
sjaakd
58992b8edf #1105 cleaning up MethodReference freemarker template 2017-02-26 11:39:14 +01:00
Filip Hrisafov
f654da2563 #1059 Add ftlvariable to the ftl files so we can have autocomplete with IntelliJ 2017-02-21 21:36:01 +01:00
Filip Hrisafov
8dbcc43a8e #1082 Do not generate an empty line after method start for NestedPropertyMappingMethod 2017-02-19 16:13:00 +01:00
Filip Hrisafov
56ea9dd168 #1050 Use the getNull method from the Type instead of the getDefaultValue 2017-02-05 18:49:43 +01:00