-
Notifications
You must be signed in to change notification settings - Fork 478
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support java records as measurement classes #983
base: master
Are you sure you want to change the base?
Conversation
Both standard and Android desugared records are supported
Codecov ReportAttention:
❗ Your organization needs to install the Codecov GitHub app to enable full functionality. Additional details and impacted files@@ Coverage Diff @@
## master #983 +/- ##
============================================
+ Coverage 61.05% 61.75% +0.69%
- Complexity 437 453 +16
============================================
Files 71 71
Lines 2583 2638 +55
Branches 278 288 +10
============================================
+ Hits 1577 1629 +52
- Misses 933 936 +3
Partials 73 73 ☔ View full report in Codecov by Sentry. |
Hi @eranl This is a nice improvement, but honestly i am not able to review this in the required depth because i am since long time no full time java developer anymore. I am searching for a additional maintainer, so if you are interested let me know |
Hi @majst01, Sure, happy to help. I would need some guidance though, since I've never done it. |
Hi @majst01, Any update? |
Hi @majst01, I would appreciate an update. Thanks. |
This project is basically in a archived state because i have no time an no personal usage of it anymore. Also there is another library from the influxdb authors themselve which also supports more features and database versions than this. If you would like to take over maintainership, i would appreciate it. |
Sure. Where do I start? |
I am going to vacation now for two weeks, if you dont mind please ping me 1st week in october and we setup a short intro. |
ping |
Saving using a record is supported by existing code. This change adds support for loading into a record, using its canonical constructor. Both standard (JDK14+) and Android desugared (SDK34+) records are supported.
Access to record metadata is done through reflection, so this code compiles on JDK8. In order to support Android, and in order to keep the reflection logic simple, no record component reflection classes and methods are used. The price is a minor limitation: records can't have a custom constructor that has the same set of parameter names and types as the canonical one.
In order to add tests with records, I added a
test-jdk17
directory and ajava17
maven profile. I hope I did that correctly. Is there any other required setup for this?The two new record test classes are identical except that one uses real records (and some new java features), and the other simulates Android desugared ones. They are both based on
InfluxDBResultMapperTest
, with the addition of a few record-specific tests.There is some inconsistency between saving and loading that I am conflicted about:
On the one hand, it would be nice to always save all record fields, for consistency. On the other hand, there is value in leaving the flexibility on save, for use cases that don't care about this consistency, e.g. write-only ones. Always saving all record fields would also be a breaking change for any (unlikely) existing code using records for saving.
And this is on top of an existing inconsistency between saving and loading, which applies to both classes and records, but is more noticeable with records:
For this one, I could:
Fixes #964