On Thu, 23 Jul 2026 16:50:05 GMT, Chris Plummer <[email protected]> wrote:
> The JDWP implementation (debug agent) allows the writing of static final > fields and instance final fields. This has always been the case since no > checks are made to prevent it, and JNI doesn't prevent it. The JDI spec > forbids the setting of final fields, and it has a check that will throw an > exception if attempted. However, it is important that we continue to allow > JDWP to write final fields because some debuggers allow for it at the JDI > level (protected by a click through warning). Although these debuggers are > not fully JDI compliant, there is no requirement that they be compliant, so > JDWP should continue to support this behavior. Much of this was discussed in > the PR for [JDK-8281652](https://bugs.openjdk.org/browse/JDK-8281652), which > clarified in the JDI spec that writing final fields was not allowed. This was > just a spec clarification. JDI already forbid the setting of final fields. > > Having said all that, the JDWP spec for ClassType.SetValues says "Final > fields cannot be set." This is clearly wrong as it has always been allowed. > ObjectReference.SetValues says nothing about final fields, and also allows > them to be set. > > This PR has two spec updates: > - Get rid of the "Final fields cannot be set." text for ClassType.SetValues. > - ObjectReference.SetValues and ReferenceType.SetValues should warn against > setting final fields by using language similar to JNI. > > I've also updated two tests to test for setting both static final fields and > instance final fields. The tests (before my changes) verified the setting of > fields (not final) on the debuggee side. I tried the same with final fields > and ran into problems. The compiler inlines final primitives values, so > setting the final fields is not seen when the fields are referenced from java > (or at least this was the case with static final fields. I'm not positive > about instance final fields). So I added support for using GetValues to > verify the results rather than relying on the debuggee's view of the fields. > > Testing in progress. > > --------- > - [x] I confirm that I make this contribution in accordance with the [OpenJDK > Interim AI Policy](https://openjdk.org/legal/ai). This pull request has now been integrated. Changeset: ab00564a Author: Chris Plummer <[email protected]> URL: https://git.openjdk.org/jdk/commit/ab00564a0efecd5573ec9d3f10bc0c4a2d3106e5 Stats: 225 lines in 5 files changed: 195 ins; 2 del; 28 mod 8388833: Fix JDWP spec w.r.t. setting static final fields and provide warnings about setting final fields Reviewed-by: sspitsyn, alanb ------------- PR: https://git.openjdk.org/jdk/pull/32029
