On 09/04/2013 03:55 PM, Joel Borggren-Franck wrote:
Hi,

Please review fix for: http://bugs.sun.com/view_bug.do?bug_id=4987375

Webrev: http://cr.openjdk.java.net/~jfranck/4987375/webrev.01/
Specdiff: 
http://cr.openjdk.java.net/~jfranck/4987375/specdiff/java/lang/Class.html

Hi Joel,

At getDeclaredMethods() the 2nd paragraph says:

"If this Class object represents a type that has multiple declared methods with the same name and parameter types, but different return types, then the returned array has a Method object for each such method."

I know that reflection operates on runtime class file format not on Java source, but for an average Java programmer this statement is confusing. (S)He might wonder how it is even possible to declare two methods with same name and parameter types, but with different return type. Of course, reflection also returns synthetic bridge methods that are not declared in source but generated by javac. How to describe that fact in javadoc if it only refers to JLS which doesn't know about these terms (or barely mentions them not describing them in full)?

So what about the following in 1st paragraph:

"Returns an array containing |Method| objects reflecting all the declared methods of the class or interface represented by this |Class| object, including public, protected, default (package) access, and private methods*. This includes br**idge methods generated by compiler (see {@link #isBridge}),* but exclud*es* inherited methods."

And 2nd:

"If this Class object represents a type that has multiple declared *(including bridge)* methods with the same name and parameter types, but different return types, then the returned array has a Method object for each such method."

...and a possible pointer to (java compiler specification? http://docs.oracle.com/javase/tutorial/java/generics/bridgeMethods.html#bridgeMethods ?)


And similar with getMethods()...

Regards, Peter


There are two issues here,

- First a getInterfaces() call on an array Class instance does return
   Cloneable and Serializable. This is specified for
   getGenericInterfaces() but not specified in getInterface(). The fix is
   to update the spec to match the implementation, which also aligns it
   with getGenericInterfaces().

- Also even though JLS states that array types have an implementation of
   clone() overriding the Object method, it is not included in
   get{Declared}Method{s}. Again the fix is to note this in the spec.

Me and Alex have also worked on the structure of the docs trying to
unify them and have a better flow. Rough outline is:

<!-- Basic result -->
<!-- Interesting results -->
<!-- Empty results -->
<!-- Order of results -->

cheers
/Joel

Reply via email to