Record component annotations with target=PARAMETER
Gavin Bierman
gavin.bierman at oracle.com
Thu Dec 19 10:45:26 UTC 2019
Well spotted Tagir. Updated spec on its way...
> On 17 Dec 2019, at 14:29, Vicente Romero <vicente.romero at oracle.com> wrote:
>
> Hi Tagir,
>
> Yes the spec should be updated, you are correct that `parameter` should be added here,
>
> Thanks,
> Vicente
>
> On 12/17/19 5:10 AM, Tagir Valeev wrote:
>> Hello!
>>
>> Current records JLS spec draft [1] says:
>>
>> a record component but T is not applicable to record component
>> declarations, field declarations, method declarations, or type
>> contexts.
>>
>> However, javac doesn't fail if the annotation target is parameter:
>>
>> import java.lang.annotation.*;
>>
>> record Foo(@Anno int x) {}
>> @Target(ElementType.PARAMETER)
>> @interface Anno {}
>>
>> This code compiles and the canonical constructor is annotated with
>> Anno. To me, the javac behavior is expected and spec should be updated
>> to include "parameters":
>>
>> a record component but T is not applicable to record component
>> declarations, field declarations, method declarations, parameters, or
>> type contexts.
>>
>> What do you think? I'm implementing error highlighting for records in
>> IntelliJ now. Should I follow the spec or javac behavior?
>>
>> With best regards,
>> Tagir Valeev.
>>
>> http://cr.openjdk.java.net/~gbierman/jep359/jep359-20191125/specs/records-jls.html#jls-9.7.4
>
More information about the amber-spec-experts
mailing list