Commit Graph

113 Commits

Author SHA1 Message Date
Jordan Zimmerman
d112a1b352 [maven-release-plugin] prepare release record-builder-33 2022-04-08 08:35:07 +01:00
Jordan Zimmerman
86093b6bad Make the functional static builder optional (#105)
Closes #100
2022-04-08 08:33:46 +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
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
fef69af183 [maven-release-plugin] prepare for next development iteration 2022-02-04 11:45:10 +00:00
Jordan Zimmerman
99f9639b82 [maven-release-plugin] prepare release record-builder-32 2022-02-04 11:45:05 +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
bae1b771b7 [maven-release-plugin] prepare for next development iteration 2022-01-25 11:06:05 +00:00
Jordan Zimmerman
1dd00b2c65 [maven-release-plugin] prepare release record-builder-31 2022-01-25 11:06:01 +00:00
Jordan Zimmerman
3b34b5dee3 [maven-release-plugin] prepare for next development iteration 2022-01-25 10:59:50 +00:00
Jordan Zimmerman
7248bad2bd [maven-release-plugin] prepare release record-builder-30 2022-01-25 10:59:45 +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
Jordan Zimmerman
13959dee2a [maven-release-plugin] prepare for next development iteration 2021-11-03 08:51:54 +00:00
Jordan Zimmerman
af759c0570 [maven-release-plugin] prepare release record-builder-29 2021-11-03 08:51:47 +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
5fef81191d [maven-release-plugin] prepare for next development iteration 2021-10-07 10:14:58 +01:00
Jordan Zimmerman
8dbec027e4 [maven-release-plugin] prepare release record-builder-28 2021-10-07 10:14:53 +01:00
Jordan Zimmerman
ef09d68b78 [maven-release-plugin] prepare for next development iteration 2021-10-07 10:11:59 +01:00
Jordan Zimmerman
0a608f3b20 [maven-release-plugin] prepare release record-builder-27-java15 2021-10-07 10:11:54 +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
9268c295fe Add RecordBuilderFull
- Add `@RecordBuilderFull` which will have most optional features enabled
- Change `@RecordBuilder.Template` to be `RetentionPolicy.CLASS`
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
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
26a6141bef [maven-release-plugin] prepare for next development iteration 2021-10-07 08:35:17 +01:00
Jordan Zimmerman
cdd9009fa8 [maven-release-plugin] prepare release record-builder-26 2021-10-07 08:35:17 +01:00
Jordan Zimmerman
0624a6caca [maven-release-plugin] prepare for next development iteration 2021-10-07 08:35:17 +01:00
Jordan Zimmerman
238ef872bf [maven-release-plugin] prepare release record-builder-25-java15 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
5b10284d4e [maven-release-plugin] prepare for next development iteration 2021-10-07 08:35:17 +01:00
Jordan Zimmerman
49a19ca8f8 [maven-release-plugin] prepare release record-builder-24 2021-10-07 08:35:17 +01:00
Jordan Zimmerman
f9fcd1e540 [maven-release-plugin] prepare for next development iteration 2021-10-07 08:35:17 +01:00
Jordan Zimmerman
eebb2b2bfd [maven-release-plugin] prepare release record-builder-23-java15 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
f7b6f47bbf [maven-release-plugin] prepare for next development iteration 2021-10-07 08:35:17 +01:00
Jordan Zimmerman
7e90e64988 [maven-release-plugin] prepare release record-builder-22 2021-10-07 08:35:17 +01:00
Jordan Zimmerman
cbe3b7cef4 [maven-release-plugin] prepare for next development iteration 2021-10-07 08:35:17 +01:00
Jordan Zimmerman
6c15bdd825 [maven-release-plugin] prepare release record-builder-21 2021-10-07 08:35:17 +01:00
Jordan Zimmerman
53aaf6b7e9 [maven-release-plugin] prepare for next development iteration 2021-10-07 08:35:17 +01:00
Jordan Zimmerman
09ed5905e3 [maven-release-plugin] prepare release record-builder-21-java15 2021-10-07 08:35:17 +01:00
Jordan Zimmerman
d0c56e6fdf Fix up some minor version/path issues in the POMs 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
d21953c39a Use manifest based automatic module instead of hand-coded version (#43)
This is much saner. It seems silly to maintain an extra file in the
project when this can all be done via Maven config.
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
Michał Górniewski
57e5d43b07 Add support for Java Platform Module System (#28) 2021-10-07 08:35:17 +01:00
Jordan Zimmerman
feecc29eea [maven-release-plugin] prepare for next development iteration 2021-10-07 08:35:17 +01:00
Jordan Zimmerman
428d3c0378 [maven-release-plugin] prepare release record-builder-1.19 2021-10-07 08:35:17 +01:00