-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
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
Rewrite Bean Property Introspection logic in Jackson 2.x #4515
Comments
Started reading the code and clearly more of code wrt Creator detection needs to move from But not sure whether to try to move abstractions from Factory part, or rewrite; and whether to try move things incrementally or not. Started removing deprecated methods from code paths, to help isolate actual in-use code. |
If we agree that we have enough test coverage, I guess.... rewrite, move big-step-incrementally? |
@JooHyukKim Yes, I think test coverage is sufficient to allow refactoring. I am struggling at finding the steps tho. Especially in a way that would allow merging 2.18 -> master. And one problem part is that the latest |
Ok one big challenge that is coming up now, looking through functionality in In the meantime I am making small incremental changes, including removal of deprecated code in affected areas. |
Right. Also from my experience, many times it was necessary to both modify existing and add additional "internal" structure to make the code base in better shape. More of "tidy up just before making changes". Just out of curiosity, are we going to introduce |
Not planned yet. I am thinking it should be possible to make things work without fully separate implementation. But of course if it becomes necessary that could be done. At this first I would really want to make existing logic work same as now, but get Creator properties discovered around time others are... so move it out of |
Hmmmh. Despite incremental refactoring, I don't think functional from ... Ok. So, in |
Good progress:
Hoping to solve remaining Record tests, to get first PR merged into 2.18, then master. |
First part of refactoring towards #4515.
Forgot to add an update: #4532 was merged 2 days ago, and it handles front-end half of changes:
I also started to look into the second half (reducing/removing code from |
Ok some more progress: now But quite a bit remains to rewrite in |
Solved (1): only one fail, and that is due to changed exception message (although not sure if the new message is good) |
Lemme look into the Kotlin one. Theres already bunch of |
Yeah first 2.18 (hopefully with a small number -- just 1 if I saw it right). |
Yup, just 1 actually. |
Okay I haven't found solution to resolve or pinpoint root cause for the 🔗 failing test Until then, in case it helps anyone, below is the failing test in Kotlin module. // Cannot have companion object in class declared within function
class Person7 constructor(val preName: String, val lastName: String) {
private constructor(preNameAndLastName: String) : this(
preNameAndLastName.substringBefore(","),
preNameAndLastName.substringAfter(",")
)
companion object {
@JsonCreator
@JvmStatic
fun createFromJson(preNameAndLastName: String): Person7 {
return Person7(preNameAndLastName)
}
}
}
@Test
fun testPerson7() {
val person7Json = objectMapper.readValue<Person7>("""{"preName":"TestPreName","lastName":"TestLastname"}""")
} It seems to be that Jackson 2.17 managed to discover PropertyCreator for
Will get back to it tommorow. |
Sorry, I am sick with COVID and don't have the energy to investigate. |
Oh, I am so sorry to hear about your illness 😭. Please take care and get well soon. |
@k163377 I hope you get better soon! Don't worry about issues while you are recovering. |
@JooHyukKim One possible reason for failure could be that auto-detection of properties-based creation with new code only occurs if there are no alternative constructors (including no default constructor). I am not 100% if behavior in 2.17 and before allowed existence of other constructors; there was one test that failed if not, yet another that failed if allowed. I do still need to extend 2.18 with extension points to let Kotlin (and Scala) module indicate if it has "canonical" Creator to use -- that would probably solve the issue here. One possibility, on short term, would be to change this test to be considered "failing", to be addressed with follow-up: this way build would remain green for now. |
Agreed, as per the issue FasterXML/jackson-module-kotlin#145 the failing test belongs to, the test was already problematic. So what we can do is
|
@JooHyukKim one quick note: while fixing issues with jackson-databind/3.0, I backported them into 2.x -- basically these are uncovered in 3.0 since it included parameter names module (unlike 2.x where it is separate). So there's a slight chance that something wrt Kotlin could be fixed by these changes. |
access=READ_ONLY
#4119
Kotlin module still failing. So I filed a PR moving the test to failing FasterXML/jackson-module-kotlin#802. |
Describe your Issue
We need to rewrite the Bean Property introspection (see #3719 for background); and while this is ambitious undertaking, I think it should be done in Jackson 2.x timeframe, not 3.x. That way code remains potentially mergeable from 2.x to 3.x.
The main drivers for rewrite are to solve problems that are difficult if not impossible to solve with the current mechanism:
This issue is an umbrella ticket as refactoring will likely be spread across multiple PRs; they can all refer to this issue,
The text was updated successfully, but these errors were encountered: