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 static 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). ------------- Commit messages: - fix jcheck whitespace errors - get rid of unneeded <p> - jdwp spec updates regarding SetValues of final fields Changes: https://git.openjdk.org/jdk/pull/32029/files Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=32029&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8388833 Stats: 219 lines in 5 files changed: 191 ins; 2 del; 26 mod Patch: https://git.openjdk.org/jdk/pull/32029.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/32029/head:pull/32029 PR: https://git.openjdk.org/jdk/pull/32029
