Review request: update javac to properly output mandated parameters in MethodParameters attributes
maurizio cimadamore
maurizio.cimadamore at oracle.com
Thu Feb 7 12:51:55 PST 2013
On 07-Feb-13 8:29 PM, maurizio cimadamore wrote:
> On 07-Feb-13 7:32 PM, Alex Buckley wrote:
>> In http://cr.openjdk.java.net/~abuckley/8misc.pdf, see JLS 13.1 for
>> new information about explicitly and implicitly declared constructs.
>> Also, see JVMS 4.7.22 for how a compiler emitting class files can
>> mark formal parameters as required by JLS 13.1.
> Anyway thanks for pointing me out at 13.1 - I missed that on a first
> scan.
>
> It would seem that the spec is not defining (on top of my head - there
> are probably others):
>
> *) (effectively) final variables passed in to inner classes (javac
> only does that for reference-types as others are just constants that
> can be produced on the stack at will)
> *) I believe javac's generated enum constructor has an additional
> parameter accepting the ordinal
Another case - private constructors:
class Outer {
class Inner {
private Inner() { }
}
Inner i = new Inner();
}
javac will append to the Inner's constructor an extra argument called
'accessTag' - which is essentially a type token.
Again, in this case I don't think it would be fair to specify this as
'implicitly declared' as there's a lot of room to manouvre.
Maurizio
>
> It feels like the second should probably be spec'd - the first I don't
> know - I see a lot of implementation room on that one.
>
> In any case, the implementation problem remains: it doesn't
> distinguish between impl-only parameters and 'implicitly declared'
> ones. It just takes all parameters that do not have a correspondent in
> the source code and put them in the same place.
>
> Maurizio
>
More information about the compiler-dev
mailing list