On Sat, 4 Oct 2025 05:09:27 GMT, Alan Bateman <[email protected]> wrote:
>> Implementation changes for [JEP 500: Prepare to Make Final Mean >> Final](https://openjdk.org/jeps/500). >> >> Field.set (and Lookup.unreflectSetter) are changed to allow/warn/debug/deny >> when mutating a final instance field. JFR event recorded if final field >> mutated. Spec updates to Field.set, Field.setAccessible and Module.addOpens >> to align with the proposal in the JEP. >> >> HotSpot is updated to add support for the new command line options. To aid >> diagnosability, -Xcheck:jni reports a fatal error when a mutating a final >> field with JNI, and -Xlog:jni=debug can help identity when JNI code mutates >> finals. For now, JNI code is allowed to set the "write-protected" fields >> System.in/out/err, we can re-visit once we change the >> System.setIn/setOut/setErr methods to not use JNI (I prefer to keep this >> separate to this PR because there is a small startup regression to address >> when changing System.setXXX). >> >> There are many new tests. A small number of existing tests are changed to >> run /othervm as reflectively opening a package isn't sufficient. Changing >> the tests to /othervm means that jtreg will launch the agent with the >> command line options to open the package. >> >> Testing: tier1-6 > > Alan Bateman has updated the pull request with a new target base due to a > merge or a rebase. The pull request now contains 34 commits: > > - Merge branch 'master' into JDK-8353835 > - Add test for -Xlog:jni=debug > - Merge branch 'master' into JDK-8353835 > - Merge branch 'master' into JDK-8353835 > - Improve CommandLineTest.testWarn > - More test cleanup > - Merge branch 'master' into JDK-8353835 > - Expand jni/JNIAttachMutatorTest to final fields in named modules > - Merge branch 'master' into JDK-8353835 > - Test updates based on reviewer feedback > - ... and 24 more: https://git.openjdk.org/jdk/compare/72319167...eed7ec4a Thanks for adding the RemoveFields and StackFilter annotations to the event. I believe the filter can be simplified to this @StackFilter({"java.lang.reflect.Field", "java.lang.reflect.ReflectAccess", "java.lang.invoke.MethodHandles$Lookup"}) and then set the offset to 4 or 5 in PlatformEventType::determineStackTraceOffset() to skip the offer method. This is cheaper and probably more robust. It will also make the place where the mutation happens the top frame, similar to other events, which works well for tooling. ------------- PR Comment: https://git.openjdk.org/jdk/pull/25115#issuecomment-3374858793
