Hi Adam,

On 1/23/19 8:33 AM, Adam Farley8 wrote:
Hi Mandy,

Food for thought:

- From John's email, it looked like he was advocating a clarification change to the spec (which requires no CSR).


While the new behavior was intended when the spec was written, this fix changes the current behavior and a CSR will be needed to document the incompatible change.  The current behavior of unreflectSetter may return a MethodHandle of a static final Field object with accessible flag set and then invoke MH to change the static final field value.  The new behavior of unreflectSetter throws IAE as static final FIeld does not have write access.

- * @throws IllegalAccessException if access checking fails
+ * @throws IllegalAccessException if access checking fails,
+ * or if the field is {@code final} and write access
+ * is not enabled on the {@code Field} object

- A test case is attached to the bug. It displays "current behaviour", but doesn't show a clear "pass" or "fail", because at the start of this there appeared to be disagreement over what the correct behaviour was.

- Good idea on the new line. I'll add it to the webrev shortly.

- As for the comments, I think I see what John was going for, but I don't understand his first change. This seems to be the opposite of what we're trying for here.

+     * In the case of a field setter function on a {@code final} field,
+     * finality enforcement is treated as a kind of access control,
+     * and the lookup will fail, except in special cases of
+     * {@link Lookup#unreflectSetter Lookup.unreflectSetter}.

Perhaps he means it will still fail, but for the reasons we've discussed rather than anything connected to access control?


http://cr.openjdk.java.net/~mchung/jdk13/webrevs/8216558/webrev.01/

This webrev showing @throws change should show the spec clarification on findSetter and findStaticSetter that throws IAE when looking up a setter on a final field and the spec of unreflectSetter states that it will return a method handle only if the corresponding call to Field::set returns normally.    This webrev is not a review request but rather showing the fix we are discussing here.

Hope this clarifies it.

Mandy

Reply via email to