Paweł Łabaj
c6cf23956f
Fixes Randgalt/record-builder/#153 ( #154 )
2023-07-03 09:46:23 +01:00
Jordan Zimmerman
141362845e
With interface shouldn't use prefix option ( #132 )
2023-03-29 10:03:17 +01:00
Jordan Zimmerman
685a31b56b
Various clean ups ( #150 )
2023-03-29 08:07:59 +01:00
tison
e12d359696
Upgrade license-maven-plugin version and reformat ( #145 )
2023-03-12 07:56:15 +00:00
Dmitrii Priporov
4924f7b3ea
issue-122: updated add1GetterMethod logic in useImmutableCollections=true case ( #138 )
2023-02-07 07:45:32 +00:00
David Morris
098a5c8bfd
Configurable modifiers on static builders ( #135 )
2023-01-07 13:28:22 +00:00
Sebastian Hoß
117c789593
use configured build method name instead of hard-coded name ( #133 )
...
Co-authored-by: Sebastian Hoß <seb@hoß.de>
2022-12-15 20:45:43 +00:00
Johannes
aa072af8e1
Performance feature: copy collections only when they were changed. Fixes #114 . ( #118 )
2022-06-19 21:17:09 +01:00
Jordan Zimmerman
b435b5d3fd
Revert "TYPE_USE annotations were being ignored ( #115 )"
...
This reverts commit d3c1bb36f3 .
A bug was found - the PR needs more work
2022-06-13 08:37:24 +01:00
Jordan Zimmerman
d3c1bb36f3
TYPE_USE annotations were being ignored (#115 )
...
Java's DAG for annotations processors doesn't contain `TYPE_USE` annotations
on the Element for some reason. However, they are on the type. So, use the
type instead.
Note due to limitations of JavaPoet this doesn't fix `TYPE_USE` annotations on
parameterized types or array components. If we want to address those we will need
changes in JavaPoet which has been dormant for a very long time.
Fixes #113
Relates to #111
2022-06-12 08:56:32 +01:00
Lovro Pandžić
c3719326c9
Use Optional.ofNullable() to check for null values
...
Fixes #107
2022-05-10 16:06:12 +01:00
Jordan Zimmerman
661d0818c0
_FromWith class was missing @Generated on methods/ctor
2022-04-08 09:15:59 +01:00
Jordan Zimmerman
86093b6bad
Make the functional static builder optional ( #105 )
...
Closes #100
2022-04-08 08:33:46 +01:00
Jordan Zimmerman
7b6ad4d7ba
Generated equals() and the default with() method were missing generic angle brackets causing compiler warnings ( #102 )
...
Closes #101
2022-04-08 08:29:55 +01:00
Jordan Zimmerman
cd059f1207
Options/changes so that Jacoco checks don't fail ( #104 )
...
- Added new optional Annotation `@RecordBuilderGenerated` - Jacoco ignores
classes with any annotation names "*Generated*" but it needs to be class retained.
For backward compatibility this annotation is not added by default (though it's been
added to `@RecordBuilderFull`). There is a new option to enable it.
- The from with method now uses an internal static class instead of an anonymous
inner class so that the annotation can be on this as well. This new class's name
is configurable in the options.
Thanks to user @madisparn for initial PR and issue report.
Fixes #87
2022-04-07 12:21:50 +01:00
Jordan Zimmerman
642dd01421
Don't include @Valid on base interfaces ( #99 )
...
The validation API doesn't accept `@Valid` on base interfaces. Filter
them out.
Fixes #97
2022-03-21 10:06:02 +00:00
Mads Baardsgaard
efd1a6b0d4
Add flag to add concrete setters for optionals ( #94 )
...
* Add flag to add concrete setters for optionals
* Add another test with concrete optionals disabled
2022-03-21 09:08:00 +00:00
Mads Baardsgaard
b525eddc76
Make withers and getters optional features ( #95 )
...
* Make withers and getters optional features
* Add example record with wither and getter disabled
2022-03-21 08:51:42 +00:00
Jordan Zimmerman
d3828eda74
Fix NPE for uninitialized non-null collection ( #98 )
...
Closes #91
Co-authored-by: Clément MATHIEU <clement@unportant.info >
2022-03-20 10:46:39 +00:00
Mads Baardsgaard
43bc65e258
Add configurable method name prefixes to builders ( #86 )
...
Add configurable Bean interface to add prefixed getters to record
2022-02-02 17:44:57 +00:00
Jordan Zimmerman
7e494d8753
Optional functional methods for With
...
When enabled, some functional methods are added to the `With` nested
class.
E.g.
```java
@RecordBuilder
record MyRecord<T>(String name, T value, int qty) implements MyRecordBuilder.With<T> {}
...
MyRecord<Thing> r = ...
var other = r.map((name, value, qty) -> new Other(...));
```
2022-01-22 09:17:15 +00:00
Madis Pärn
3954499d4b
Allow components stream method to work with null fields ( #85 )
...
Co-authored-by: Madis Parn <madis.parn@topia.com >
2022-01-22 07:56:39 +00:00
Jordan Zimmerman
9a7d73e78c
Support options on includes
2021-11-03 08:44:51 +00:00
Jordan Zimmerman
9943667af1
Add support for static from() that returns a Wither
...
Useful for when you can't add the With interface to your record.
Static method takes a record as an argument and returns a With
instance.
2021-10-19 20:24:10 +01:00
Jordan Zimmerman
584bdf4a25
Support single item collection builders
...
When `addSingleItemCollectionBuilders()` is enabled in options, collection types (`List`, `Set` and `Map`)
are handled specially. The setters for these types now create an internal collection and
items are added to that collection. Additionally, "adder" methods prefixed with
`singleItemBuilderPrefix()` are created to add single items to these collections.
Closes #73
2021-10-07 08:35:17 +01:00
Jordan Zimmerman
0d2fe2ffe7
Optionally include all records from a list of packages
...
Closes #67
2021-10-07 08:35:17 +01:00
Jordan Zimmerman
3c8e305002
Use Map.entry() instead of AbstractMap.SimpleEntry
...
Closes #68
2021-10-07 08:35:17 +01:00
Jordan Zimmerman
76f93039b0
Support options for RecordInterface
...
- Copy any @RecordBuilder.Options to the generated Record
- Support RecordInterface templates as well
Closes #64
2021-10-07 08:35:17 +01:00
Jordan Zimmerman
5f82af97ae
The null check after instanceof Set was unnecessary in the __collection shim
2021-10-07 08:35:17 +01:00
Jordan Zimmerman
ef2a3692d1
Match record visibility
...
If the builder is in the same package as the record and the record
is package-private, make the builder package-private too.
Closes #52
2021-10-07 08:35:17 +01:00
Jordan Zimmerman
cb9ceb0529
@Override should not be inherited. Also, the inheritComponentAnnotations
...
option was being ignored.
Closes #57
2021-10-07 08:35:17 +01:00
Jordan Zimmerman
bd8fbeb045
Adds special handling for record components of type java.util.List, java.util.Set, java.util.Map and java.util.Collection. When the record is built, any components of these types are passed through an added shim method that uses the corresponding immutable collection (e.g. List.copyOf(o)) or an empty immutable collection if the component is null.
...
Closes #56
Closes #58
2021-10-07 08:35:17 +01:00
Jordan Zimmerman
67f219bd67
Remove downcast in favor of methods
...
Great suggestion from @Twisol. There's no need for the downcasting
if record component methods are added to the Wither interface.
Closes #27
2021-10-07 08:35:17 +01:00
Jordan Zimmerman
d9f27bc5a6
Validation and null checks are missing for withers. This PR adds them.
...
Closes #47
2021-10-07 08:35:17 +01:00
Jordan Zimmerman
091e9493b6
Support Java Validation API
...
Option to pass created records through the Java Validation API if it's
available in the classpath. IMPORTANT: when enabled, the record-builder-validator
module must also be included. record-builder-validator is written totally
via reflection so if no validation framework is included it's a NOP.
2021-10-07 08:35:17 +01:00
Jordan Zimmerman
a0c03e88cc
Add support for NotNull-style annotations
...
When enabled, annotations matching the configured regex for NotNull
annotations cause `Object.requireNonNull()` to be added for annotated
components.
2021-10-07 08:35:17 +01:00
Jordan Zimmerman
d9d98e765e
Set optional fields to empty by default ( #38 )
...
Sets `Optional` fields to `empty()` by default. Adds an option
to control this.
Closes #34
2021-10-07 08:35:17 +01:00
Jordan Zimmerman
5320c8dfa4
Support copying component annotations to builder ( #33 )
...
- Enabled via new option `inheritComponentAnnotations` (true by default)
- Canonical constructor parameter annotations are copied to RecordBuilder setters and the static builder
- Record component accessor annotations are copied to RecordBuilder getters
2021-10-07 08:35:17 +01:00
Jordan Zimmerman
5d7bea565f
Rework how options are specified ( #37 )
...
- Remove `RecordBuilderMetaData`
- Unify how the javac options are handled
- Create `RecordBuilder.Options` to specify options
- Allow creation of custom annotations that bundle options
2021-10-07 08:35:17 +01:00
Jordan Zimmerman
3f8bb47cbf
Support alternate artifacts built with Java 15
2021-02-01 13:00:42 -05:00
Jordan Zimmerman
7e78d32780
Added support for putting @RecordInterface on Java beans
2021-02-01 12:26:07 -05:00
Jordan Zimmerman
b21368f32f
Have the consumer version of with() use the other with() to get the builder. This will ensure better testing and is more logical
2021-02-01 12:26:07 -05:00
Mikaël Barbero
9c8e3626ba
Stop relying on toString() to detect package name.
...
Fix for #15
2020-12-11 18:18:32 +00:00
Jordan Zimmerman
1fc7c9a4b3
Make sure the downcast variable name doesn't collide with a record component name
2020-11-28 22:39:00 -05:00
Jordan Zimmerman
570514e077
buildPackageName() can't assume that the immediate enclosing element is the package. It may be a nested class, etc.
2020-11-28 22:38:48 -05:00
Jordan Zimmerman
90a65235a9
Add support for static constructor
...
Add a static constructor/builder so it can statically imported. Instead of
calling "new Record(...)" you can call just "Record(...)".
2020-11-28 07:35:34 -05:00
Ted Cassirer
7e8ddbd700
Remove unused variable in RecordBuilder
2020-11-25 09:33:08 -05:00
Ted Cassirer
3a534fbea9
Don't add the allArgsConstructor to the RecordBuilder if record has no fields
2020-11-25 08:53:06 -05:00
Jordan Zimmerman
e0243c8b1c
Fixed some typos in previous PR
2020-11-04 10:44:43 -05:00
Jordan Zimmerman
437e314799
Better exception when Wither is set as implementor on non-builder class
2020-11-04 10:36:35 -05:00