Review request JDK-8004729: Parameter Reflection API (original) (raw)

Joe Darcy joe.darcy at oracle.com
Fri Jan 18 07:07:08 UTC 2013


On 1/13/2013 9:30 AM, Eric McCorkle wrote:

On 01/12/13 13:36, Joe Darcy wrote:

Hi Eric,

On 1/11/2013 9:14 PM, Eric McCorkle wrote: I got halfway through implementing a change that would synthesize Parameter's for the static links (this for the inner classes), when it occurred to me: is there really a case for allowing reflection on those parameters.

Put another way, public class Foo { public class Bar { int baz(int qux) { } } } Should baz.getParameters() return just qux, or should it expose Foo.this? On second thought, I can't think of a good reason why you want to reflect on Foo.this. You need to reflect on that parameter so you can call the constructor properly using reflection :-) Alright, I will make the logic changes and post for review. Also, the logic is much simpler. You just have to figure out how deep you are in inner classes, store that information somewhere, and offset by that much every time a Parameter calls back to its Executable to get information. The logic for synthesizing the this parameters is much more complex. Thoughts? We may need some more help from javac to mark parameters as synthesized or synthetic, which can be done as follow-up work. For inner classes that are members of types, the outer this parameters are required to be a certain way by the platform specification to make linkage work. However, local and anonymous classes only have to obey a compiler's contract with itself and are not specified. In particular, not all such inner classes constructors even have an outer this parameter. For example, with javac the constructor of an anonymous class in a static initializer will not have an other this parameter. Is there any compelling reason that javac should generate information about the link parameters? They don't have a name, and have standard modifiers (presumably final and synthesized). It seems to me they ought to be synthesized by the reflection API.

Not all class files come from Java compilers of course and since core reflection implicitly acts on a class file level model rather than a source-level model, generally it is preferable (and in keeping with past practice) for core reflection to not try to get too clever in inferring missing information.

-Joe



More information about the core-libs-dev mailing list