RFR: 8336468: Reflection and MethodHandles should use more precise initializer checks [v4]

Aleksey Shipilev shade at openjdk.org
Wed Sep 25 15:25:40 UTC 2024


On Wed, 25 Sep 2024 13:22:09 GMT, Chen Liang <liach at openjdk.org> wrote:

>> Aleksey Shipilev has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains seven additional commits since the last revision:
>> 
>>  - Merge branch 'master' into JDK-8336468-reflection-init-checks
>>  - Whitespace and comments
>>  - Merge branch 'master' into JDK-8336468-reflection-init-checks
>>  - Merge branch 'master' into JDK-8336468-reflection-init-checks
>>  - Remove unnecessary handle-izing
>>  - Fix
>>  - Fix
>
> src/hotspot/share/prims/jni.cpp line 450:
> 
>> 448:     reflection_method = Reflection::new_constructor(m, CHECK_NULL);
>> 449:   } else {
>> 450:     assert(!m->is_static_initializer(), "Cannot be static initializer");
> 
> This looks like a behavioral change; otherwise reflection and method handle changes look good. Per JNI https://docs.oracle.com/en/java/javase/23/docs/specs/jni/functions.html#toreflectedmethod it seems to just return if the method id is valid.

You mean the _assert_ is excessive, or something else? I think it is within the spec to return method for `clinit`-s, since clinits are logically not constructors.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/20192#discussion_r1775445221


More information about the hotspot-dev mailing list