Review request: update javac to properly output mandated parameters in MethodParameters attributes
Maurizio Cimadamore
maurizio.cimadamore at oracle.com
Tue Feb 12 08:56:52 PST 2013
On 12/02/13 16:44, Eric McCorkle wrote:
> Actually, it is necessary. There are specific cases where a parameter
> must be marked MANDATED, and it is marked SYNTHETIC in all others.
>
> Most notably, only the outer this in a *non-private* inner member class
> constructor gets marked MANDATED. If there's an outer this for a static
> or a private inner class constructor, it gets marked SYNTHETIC.
Well, for a static inner class the method won't be called - but for a
private inner it would (I must admit that I don't understand fully the
rationale as to why private constructors are omitted from the mandated
thing).
Anyway - it seems like you only need to check as to whether the owner of
the method is private or not. Since this is a pretty short check, it can
be inlined in the outerThisDef method.
Maurizio
>
> On 02/12/13 11:34, Maurizio Cimadamore wrote:
>> On 12/02/13 16:22, Maurizio Cimadamore wrote:
>>> On 12/02/13 16:17, Eric McCorkle wrote:
>>>> Maybe make the one for ClassSymbol take a ClassSymbol as an argument as
>>>> opposed to a Symbol?
>>> Why do we need to replicate all that code?
>> Also, I'm pretty sure that you don't need outerThisIsMandated anymore,
>> since outerThisDef is explicitly called to add an extra 'this' argument
>> to the constructor of an inner class.
>>
>> Maurizio
>>> Maurizio
>>>> On 02/12/13 10:52, Maurizio Cimadamore wrote:
>>>>> On 12/02/13 14:53, Eric McCorkle wrote:
>>>>>> No, actually, that variant has to be there in order to add the outer
>>>>>> this field in a ClassSymbol.
>>>>> The overloading on Symbol/MethodSymbol is very hard to parse - i.e.
>>>>> it's hard to tell whether a client would call one or the other. What
>>>>> I'm
>>>>> suggesting is that, since both methods seem to share 99% of the code,
>>>>> you add the extra logic to the old method guarded by a check (which I
>>>>> think is sym.kind == MTH - i.e. if the symbl is a method).
>>>>>
>>>>> Maurizio
More information about the compiler-dev
mailing list