[code-reflection] RFR: Beef up reference resolution code and test
Maurizio Cimadamore
mcimadamore at openjdk.org
Thu Nov 13 18:20:20 UTC 2025
On Thu, 13 Nov 2025 17:49:03 GMT, Paul Sandoz <psandoz at openjdk.org> wrote:
>> This PR improves the code for method/field/constructor resolution. To resolve fields and methods we have to perform two MH lookups, and find if any of them succeds. Since to code to do this is a bit convoluted, I have reimplemented the resolution support to use a more functional style (inspired by `Either` type).
>>
>> I have also added several tests to make sure we test several lookup combinations, for instance/static method/fields, and also for super method resolution.
>>
>> We will probably need more tests to cover the entire spectrum, but this should be at least a start.
>>
>> I found 2 (!!) JDK issues when writing these tests, so some of the new tests contain workarounds.
>
> src/jdk.incubator.code/share/classes/jdk/incubator/code/dialect/java/impl/ResolutionHelper.java line 31:
>
>> 29: HandleResolver<MethodHandle, Class<?>> FIND_GETTER = MethodHandles.Lookup::findGetter;
>> 30: HandleResolver<VarHandle, Class<?>> FIND_STATIC_VARHANDLE = MethodHandles.Lookup::findStaticVarHandle;
>> 31: HandleResolver<VarHandle, Class<?>> FIND_VARHANDLE = MethodHandles.Lookup::findVarHandle;
>
> I think these would work just as well as static methods, without the memory/initialization footprint. Up to you.
If you mean e.g. turn `FIND_STATIC` into:
HandleResolver<MethodHandle, MethodType> findStatic() {
return MethodHandles.Lookup::findStatic;
}
I think I'd prefer to keep the code this way.
-------------
PR Review Comment: https://git.openjdk.org/babylon/pull/682#discussion_r2524467149
More information about the babylon-dev
mailing list