Review request JDK-8004729: Parameter Reflection API

Eric McCorkle eric.mccorkle at oracle.com
Sun Jan 13 17:30:35 UTC 2013


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.


More information about the core-libs-dev mailing list