Review request JDK-8004729: Parameter Reflection API
Remi Forax
forax at univ-mlv.fr
Thu Jan 10 08:45:10 UTC 2013
On 01/10/2013 07:23 AM, Joe Darcy wrote:
> 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.
And please rename getNumParameters to getParameterCount, so all methods
related to parameters starts with the same prefix.
>
> 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.
yes, and the copy constructor in Parameter is not needed (we are in Java
after all, not in C++).
Also null == foo is not a standard idiom in Java because there is no
operator overloading
(likewise i++ doesn't need to be replaced by ++i).
>
> 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.
yes !
>
> 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
cheers,
Rémi
>
> 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