Generation of synthesized parameters

Joe Darcy joe.darcy at oracle.com
Tue Jan 29 12:14:39 PST 2013


Hello,

On 1/29/2013 11:40 AM, Eric McCorkle wrote:
> In order to facilitate writing tests for the MethodParameters feature,
> I'd like to get a complete list of all the cases when javac can generate
> synthesized parameters.
>
> Here is a list I've put together from email discussions and comments in JBS:
>
> 1) outer "this" parameters

Arguably, some outer this parameters would be *synthesized* with others 
would be *synthetic*.

Inner classes that are also member classes, (see diagram in "Nested, 
Inner, Member, and Top-Level Classes," 
https://blogs.oracle.com/darcy/entry/nested_inner_member_and_top), are 
potentially callable from outside of the enclosing class and are 
required to have an outer this parameter as the first parameter so that 
code from different compilers can call each other.  The other this 
parameter in this case is *synthesized* as it is mandated or implied by 
the JLS.

On the other hand, named inner classes defined inside a method or 
constructor as well as anonymous classes only need to obey a 
compiler-internal contract and any extra parameters in this case are 
*synthetic*.  (Not all anonymous classes have an outer; an anonymous 
class created inside a static initializer block does not.)


> 2) extra values passed to constructor for enum values

Such parameters are *synthetic*, they are a javac implementation 
artifact not mandated or implied by the JLS.

> 3) hidden values passed to constructors of inner classes for final
> variables

You'll can check the JLS regarding whether these are synthesized or 
synthetic, but I would assume they are synthetic.

> 4) JLS mandated public no-arg constructors added by the compiler to
> classes with no declared constructor: synthesized

This is not a parameter, but another language structure.

HTH,

-Joe

> 5) The two parameters pre-ended to enum constructors by javac
>
>
> Does this capture everything, or does it miss something?
>
> Ideally, I would like to put together a complete list of all cases that
> should generate synthesized parameters.  (If one already exists, then
> that's great).
>
> Thanks,
> Eric




More information about the compiler-dev mailing list