Hello.
Please review the more precise wording added to
java.lang.reflect.Field to address bug
6543593 "(reflect) Clarify private final field mutability"
http://cr.openjdk.java.net/~darcy/6543593.0/
Full patch below.
In describing when IllegalAccessException is thrown, Field now uses
phrasing consistent with that used by its sibling classes Method and
Constructor:
"if this Method object enforces Java language access control and the
underlying method is inaccessible."
"if this Constructor object enforces Java language access control and
the underlying constructor is inaccessible."
Thanks,
-Joe
--- old/src/share/classes/java/lang/reflect/Field.java 2011-04-03
23:25:40.000000000 -0700
+++ new/src/share/classes/java/lang/reflect/Field.java 2011-04-03
23:25:39.000000000 -0700
@@ -360,8 +360,9 @@
* {@code obj}; primitive values are wrapped in an appropriate
* object before being returned
*
- * @exception IllegalAccessException if the underlying field
- * is inaccessible.
+ * @exception IllegalAccessException if this {@code Field}
object
+ * enforces Java language access control and the
underlying
+ * field is inaccessible.
* @exception IllegalArgumentException if the specified object
is not an
* instance of the class or interface declaring the
underlying
* field (or a subclass or implementor thereof).
@@ -383,8 +384,9 @@
* from
* @return the value of the {@code boolean} field
*
- * @exception IllegalAccessException if the underlying field
- * is inaccessible.
+ * @exception IllegalAccessException if this {@code Field}
object
+ * enforces Java language access control and the
underlying
+ * field is inaccessible.
* @exception IllegalArgumentException if the specified object
is not
* an instance of the class or interface declaring the
* underlying field (or a subclass or implementor
@@ -410,8 +412,9 @@
* from
* @return the value of the {@code byte} field
*
- * @exception IllegalAccessException if the underlying field
- * is inaccessible.
+ * @exception IllegalAccessException if this {@code Field}
object
+ * enforces Java language access control and the
underlying
+ * field is inaccessible.
* @exception IllegalArgumentException if the specified object
is not
* an instance of the class or interface declaring the
* underlying field (or a subclass or implementor
@@ -439,8 +442,9 @@
* from
* @return the value of the field converted to type {@code char}
*
- * @exception IllegalAccessException if the underlying field
- * is inaccessible.
+ * @exception IllegalAccessException if this {@code Field}
object
+ * enforces Java language access control and the
underlying
+ * field is inaccessible.
* @exception IllegalArgumentException if the specified object
is not
* an instance of the class or interface declaring the
* underlying field (or a subclass or implementor
@@ -468,8 +472,9 @@
* from
* @return the value of the field converted to type {@code short}
*
- * @exception IllegalAccessException if the underlying field
- * is inaccessible.
+ * @exception IllegalAccessException if this {@code Field}
object
+ * enforces Java language access control and the
underlying
+ * field is inaccessible.
* @exception IllegalArgumentException if the specified object
is not
* an instance of the class or interface declaring the
* underlying field (or a subclass or implementor
@@ -497,8 +502,9 @@
* from
* @return the value of the field converted to type {@code int}
*
- * @exception IllegalAccessException if the underlying field
- * is inaccessible.
+ * @exception IllegalAccessException if this {@code Field}
object
+ * enforces Java language access control and the
underlying
+ * field is inaccessible.
* @exception IllegalArgumentException if the specified object
is not
* an instance of the class or interface declaring the
* underlying field (or a subclass or implementor
@@ -526,8 +532,9 @@
* from
* @return the value of the field converted to type {@code long}
*
- * @exception IllegalAccessException if the underlying field
- * is inaccessible.
+ * @exception IllegalAccessException if this {@code Field}
object
+ * enforces Java language access control and the
underlying
+ * field is inaccessible.
* @exception IllegalArgumentException if the specified object
is not
* an instance of the class or interface declaring the
* underlying field (or a subclass or implementor
@@ -555,8 +562,9 @@
* from
* @return the value of the field converted to type {@code float}
*
- * @exception IllegalAccessException if the underlying field
- * is inaccessible.
+ * @exception IllegalAccessException if this {@code Field}
object
+ * enforces Java language access control and the
underlying
+ * field is inaccessible.
* @exception IllegalArgumentException if the specified object
is not
* an instance of the class or interface declaring the
* underlying field (or a subclass or implementor
@@ -584,8 +592,9 @@
* from
* @return the value of the field converted to type {@code double}
*
- * @exception IllegalAccessException if the underlying field
- * is inaccessible.
+ * @exception IllegalAccessException if this {@code Field}
object
+ * enforces Java language access control and the
underlying
+ * field is inaccessible.
* @exception IllegalArgumentException if the specified object
is not
* an instance of the class or interface declaring the
* underlying field (or a subclass or implementor
@@ -626,9 +635,9 @@
* {@code IllegalAccessException}.
*
* <p>If the underlying field is final, the method throws an
- * {@code IllegalAccessException} unless
- * {@code setAccessible(true)} has succeeded for this field
- * and this field is non-static. Setting a final field in this way
+ * {@code IllegalAccessException} unless {@code
setAccessible(true)}
+ * has succeeded for this {@code Field} object
+ * and the field is non-static. Setting a final field in this way
* is meaningful only during deserialization or reconstruction of
* instances of classes with blank final fields, before they are
* made available for access by other parts of a program. Use in
@@ -658,8 +667,9 @@
* @param value the new value for the field of {@code obj}
* being modified
*
- * @exception IllegalAccessException if the underlying field
- * is inaccessible.
+ * @exception IllegalAccessException if this {@code Field}
object
+ * enforces Java language access control and the
underlying
+ * field is inaccessible.
* @exception IllegalArgumentException if the specified object
is not an
* instance of the class or interface declaring the
underlying
* field (or a subclass or implementor thereof),
@@ -686,8 +696,9 @@
* @param z the new value for the field of {@code obj}
* being modified
*
- * @exception IllegalAccessException if the underlying field
- * is inaccessible.
+ * @exception IllegalAccessException if this {@code Field}
object
+ * enforces Java language access control and the
underlying
+ * field is inaccessible.
* @exception IllegalArgumentException if the specified object
is not an
* instance of the class or interface declaring the
underlying
* field (or a subclass or implementor thereof),
@@ -715,8 +726,9 @@
* @param b the new value for the field of {@code obj}
* being modified
*
- * @exception IllegalAccessException if the underlying field
- * is inaccessible.
+ * @exception IllegalAccessException if this {@code Field}
object
+ * enforces Java language access control and the
underlying
+ * field is inaccessible.
* @exception IllegalArgumentException if the specified object
is not an
* instance of the class or interface declaring the
underlying
* field (or a subclass or implementor thereof),
@@ -744,8 +756,9 @@
* @param c the new value for the field of {@code obj}
* being modified
*
- * @exception IllegalAccessException if the underlying field
- * is inaccessible.
+ * @exception IllegalAccessException if this {@code Field}
object
+ * enforces Java language access control and the
underlying
+ * field is inaccessible.
* @exception IllegalArgumentException if the specified object
is not an
* instance of the class or interface declaring the
underlying
* field (or a subclass or implementor thereof),
@@ -773,8 +786,9 @@
* @param s the new value for the field of {@code obj}
* being modified
*
- * @exception IllegalAccessException if the underlying field
- * is inaccessible.
+ * @exception IllegalAccessException if this {@code Field}
object
+ * enforces Java language access control and the
underlying
+ * field is inaccessible.
* @exception IllegalArgumentException if the specified object
is not an
* instance of the class or interface declaring the
underlying
* field (or a subclass or implementor thereof),
@@ -802,8 +816,9 @@
* @param i the new value for the field of {@code obj}
* being modified
*
- * @exception IllegalAccessException if the underlying field
- * is inaccessible.
+ * @exception IllegalAccessException if this {@code Field}
object
+ * enforces Java language access control and the
underlying
+ * field is inaccessible.
* @exception IllegalArgumentException if the specified object
is not an
* instance of the class or interface declaring the
underlying
* field (or a subclass or implementor thereof),
@@ -831,8 +846,9 @@
* @param l the new value for the field of {@code obj}
* being modified
*
- * @exception IllegalAccessException if the underlying field
- * is inaccessible.
+ * @exception IllegalAccessException if this {@code Field}
object
+ * enforces Java language access control and the
underlying
+ * field is inaccessible.
* @exception IllegalArgumentException if the specified object
is not an
* instance of the class or interface declaring the
underlying
* field (or a subclass or implementor thereof),
@@ -860,8 +876,9 @@
* @param f the new value for the field of {@code obj}
* being modified
*
- * @exception IllegalAccessException if the underlying field
- * is inaccessible.
+ * @exception IllegalAccessException if this {@code Field}
object
+ * enforces Java language access control and the
underlying
+ * field is inaccessible.
* @exception IllegalArgumentException if the specified object
is not an
* instance of the class or interface declaring the
underlying
* field (or a subclass or implementor thereof),
@@ -889,8 +906,9 @@
* @param d the new value for the field of {@code obj}
* being modified
*
- * @exception IllegalAccessException if the underlying field
- * is inaccessible.
+ * @exception IllegalAccessException if this {@code Field}
object
+ * enforces Java language access control and the
underlying
+ * field is inaccessible.
* @exception IllegalArgumentException if the specified object
is not an
* instance of the class or interface declaring the
underlying
* field (or a subclass or implementor thereof),