Co-Authored-By: Claude Sonnet 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01B38FGKKam5SCGgwgduVAh3
46 lines
2.3 KiB
Plaintext
46 lines
2.3 KiB
Plaintext
# JEP 500: reflection writing to a final field, same class file behaviour on 25 and on 26
|
|
|
|
=== JDK 25 (class compiled --release 25)
|
|
field reads : 9090
|
|
port() returns : 8080
|
|
|
|
=== JDK 26, defaults
|
|
WARNING: Final field port in class FinalFieldMutation$Config has been mutated reflectively by class FinalFieldMutation in unnamed module @<hash> (file:<repo>/build/recap26/26/)
|
|
WARNING: Use --enable-final-field-mutation=ALL-UNNAMED to avoid a warning
|
|
WARNING: Mutating final fields will be blocked in a future release unless final field mutation is enabled
|
|
field reads : 9090
|
|
port() returns : 8080
|
|
|
|
=== JDK 26, --enable-final-field-mutation=ALL-UNNAMED (the opt-in the warning asks for)
|
|
field reads : 9090
|
|
port() returns : 8080
|
|
|
|
=== JDK 26, --illegal-final-field-mutation=deny (what a future default will look like)
|
|
setInt refused : class FinalFieldMutation (in unnamed module @<hash>) cannot set final field FinalFieldMutation$Config.port (in unnamed module @<hash>), unnamed module @<hash> is not allowed to mutate final fields
|
|
|
|
=== JDK 26, --illegal-final-field-mutation=debug (warning plus the offending stack trace)
|
|
Final field port in class FinalFieldMutation$Config has been mutated reflectively by class FinalFieldMutation in unnamed module @<hash> (file:<repo>/build/recap26/26/)
|
|
at java.base/java.lang.reflect.Field.postSetFinal(Field.java:1534)
|
|
at java.base/java.lang.reflect.Field.setFinal(Field.java:1449)
|
|
at java.base/java.lang.reflect.Field.setInt(Field.java:1134)
|
|
at FinalFieldMutation.main(FinalFieldMutation.java:22)
|
|
field reads : 9090
|
|
port() returns : 8080
|
|
|
|
=== JDK 26, JFR default settings, [no flag]: jfr print --events jdk.FinalFieldMutation
|
|
jdk.FinalFieldMutation
|
|
declaringClass = FinalFieldMutation$Config (classLoader = app)
|
|
fieldName = "port"
|
|
FinalFieldMutation.main(String[]) line: 22
|
|
events recorded: 1
|
|
|
|
=== JDK 26, JFR default settings, [--enable-final-field-mutation=ALL-UNNAMED]: jfr print --events jdk.FinalFieldMutation
|
|
jdk.FinalFieldMutation
|
|
declaringClass = FinalFieldMutation$Config (classLoader = app)
|
|
fieldName = "port"
|
|
FinalFieldMutation.main(String[]) line: 22
|
|
events recorded: 1
|
|
|
|
=== JDK 26, JFR default settings, [--illegal-final-field-mutation=deny]: jfr print --events jdk.FinalFieldMutation
|
|
events recorded: 0
|