Get best invoke method based on parameters #996
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I copied the code of
BeanELResolver
to make the licensing easier than integrating the code with JinjavaBeanELResolver.Using java 17 (Oracle JDK 17.0.2, Eclipse Adoptium 17.0.3, and likely more) changes the order in which
String.class.getMethods()
returns methods, which causes thepublic String replace(char oldChar, char newChar)
method to be invoked when callingBeanELResolver.invoke(context, "some string", "replace", null, new Object[]{"some", ""})
. This makes the resulting string␀ome ␀tring
instead ofstring
.This PR makes it so that we check that the parameter types of the method we select are assignable from the input parameters. And if there are multiple methods that could work, pick the one that has the more specific parameter types.