[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