RFR: 8280798: com.sun.jdi.ObjectReference::setValue spec should prohibit any final field modification

Chris Plummer cjplummer at openjdk.org
Tue Nov 22 19:13:28 UTC 2022


On Mon, 21 Nov 2022 22:58:54 GMT, Alex Menkov <amenkov at openjdk.org> wrote:

> com.sun.jdi.ObjectReference::setValue spec says that final static fields cannot be modified, but openjdk implementation throws IllegalArgumentException for any final fields (static or instance).
> 
> The fix updates the spec to prohibit any final field modification
> CSR: JDK-8281652

ObjectReference.setValue() calls ReferenceType.validateFieldSet(), which does:

    void validateFieldSet(Field field) {
        validateFieldAccess(field);
        if (field.isFinal()) {
            throw new IllegalArgumentException("Cannot set value of final field");
        }
    }

This code has been in place since the file was introduced on 2007-12-01. If there is a version that predates it, I don't know where to look. I'm not sure of the history relative to JDK 1.2 and the introduction of JPDA.

Yes, what is being proposed makes the JDI and JDWP specs out of sync, but the implementations have always been out of sync. The proposed spec change is just clarifying what the implementation already does. However, Eclipse does allow the user to set a non-static final field, but only after clicking through a warning dialog.

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

PR: https://git.openjdk.org/jdk/pull/11279


More information about the serviceability-dev mailing list