Review request JDK-8004729: Parameter Reflection API
Joe Darcy
joe.darcy at oracle.com
Thu Jan 10 06:23:50 UTC 2013
Hi Eric,
A few quick comments. In Executable,
228 /**
229 * Returns the number of formal parameters for the executable
230 * represented by this object.
231 *
232 * @return The number of formal parameters for the executable this
233 * object represents
234 */
235 public abstract int getNumParameters();
I think it is important of the getNumParameters javadoc is clarified to
state "... represented by this object, including any synthesized and
synthetic parameters." In other words, the number of parameters of the
VM view of the query and *not* (necessarily) the language view.
Also in Executable, I think the body of
279 public Parameter[] getParameters() {
280 // TODO: This may eventually need to be guarded by security
281 // mechanisms similar to those in Field, Method, etc.
282 Parameter[] raw = privateGetParameters();
283 Parameter[] out = new Parameter[raw.length];
284 // Need to copy the cached array to prevent users from messing
285 // with it
286 for (int i = 0; i < raw.length; i++) {
287 out[i] = new Parameter(raw[i]);
288 }
289 return out;
290 }
could be replaced with
return privateGetParameters().clone();
IIRC, other parts of core reflection have similar calls to clone.
I would prefer to see the getNumParameters method in Executable be
declared to be non-abstract, but with a body that threw some kind of
exception, even an abstract-method-error. Since only types within
java.lang.reflect can subclass Executable, it is not generally
extensible. Alternate implementations of java.lang.reflect should not
be forced to not share a getNumParameters implementation from Executable.
All the public methods and constructors in java.lang.reflect.Parameter
need proper javadoc.
I strongly recommend rewriting the tests in the style used, for example,
here:
http://hg.openjdk.java.net/jdk8/tl/jdk/rev/0a1398021c7c
where an annotation is used to record the expect result and then a
simple checker loops over the reflective constructs and verifies that
the computed values match the expected ones.
The tests should include cases where the VM has a different notion of
the number of parameter than the language; typical cases are
constructors of inner classes (compiler is required to insert a leading
other$this parameter) and constructors of enums (javac prepends two
synthesized parameters).
Cheers,
-Joe
On 01/09/2013 01:55 PM, Eric McCorkle wrote:
> Hello,
>
> Please review the core reflection API implementation of parameter
> reflection. This is the final component of method parameter reflection.
> This was posted for review before, then delayed until the check-in for
> JDK-8004728 (hotspot support for parameter reflection), which occurred
> yesterday.
>
> Note: The check-in of JDK-8004728 was into hsx/hotspot-rt, *not*
> jdk8/tl; therefore, it may be a while before the changeset makes its way
> into jdk8/tl.
>
> Also note: since the check-in of JDK-8004727 (javac support for
> parameter reflection), there has been a failure in the tests for
> Pack200. This is being addressed in a fix contributed by Kumar, which I
> believe has also been posted for review.
>
> The open webrev is here:
> http://cr.openjdk.java.net/~coleenp/JDK-8004729
>
> The feature request is here:
> http://bugs.sun.com/view_bug.do?bug_id=8004729
>
> The latest version of the spec can be found here:
> http://cr.openjdk.java.net/~abuckley/8misc.pdf
>
>
> Thanks,
> Eric
More information about the core-libs-dev
mailing list