Hello.
Please code review my JDK 8 changes for
7007535: (reflect) Please generalize Constructor and Method
http://cr.openjdk.java.net/~darcy/7007535.3
To summarize the changes, a new superclass is defined to capture the
common functionality of java.lang.reflect.Method and
java.lang.reflect.Constructor. That superclass is named "Executable"
along the lines of javax.lang.model.ExecutableElement, which models
constructors and methods in the JSR 269 language model.
Both specification and implementation code are shared. To preserve the
right @since behavior, it is common that in Method/Constructor the
javadoc for a method will now look like:
/**
* {@inheritDoc}
* @since 1.5
*/
Since Executable is being created in JDK 8, it would be incorrect for
methods in that class to have an @since of 1.5; adding the @since in
Method/Constructor preserves the right information.
It would have been natural to also move common fields to Executable;
however, HotSpot treats the Constructor and Method type specially and
relies on the existing field ordering. Since altering the field layout
would require coordinated HotSpot changes, I'm opting to not perform
such a change right now. At least one abstract accessor method is
declared in Executable to still allow code sharing even though the
required field is not present. In other cases, package private instance
methods on Executable are passed the needed state from overridden public
methods in Method/Constructor.
All java/lang/reflect regression tests pass on a full build with these
changes.
Thanks,
-Joe