Annotation and compact constructor

Vicente Romero vicente.romero at oracle.com
Tue Aug 25 13:24:26 UTC 2020


I have created: https://bugs.openjdk.java.net/browse/JDK-8252307 to 
track it,

Thanks,
Vicente

On 8/25/20 9:20 AM, Tagir Valeev wrote:
> Hello!
>
> Sorry for confusion about compact constructor declaration. Yes, I 
> meant fields.
>
> With best regards,
> Tagir Valeev
>
> вт, 25 авг. 2020 г., 20:15 Vicente Romero <vicente.romero at oracle.com 
> <mailto:vicente.romero at oracle.com>>:
>
>     Hi Tagir,
>
>     Given that the annotation is applicable to fields, it should be
>     accepted
>     and propagated to the field. We didn't visualize annotations
>     targeted to
>     constructors as applicable to record components. We propagate the
>     annotation in the record component to the corresponding parameter
>     in the
>     canonical constructor (if targeted to parameters only). But still
>     as I
>     said the compiler should accept the code as the annotation is
>     applicable
>     to fields. I will file a bug,
>
>     Thanks,
>     Vicente
>
>     On 8/25/20 1:49 AM, Tagir Valeev wrote:
>     > Hello!
>     >
>     > The following code cannot be compiled by javac (tried build
>     15-ea+33-1546):
>     >
>     > import java.lang.annotation.*;
>     >
>     > @Target({ElementType.FIELD, ElementType.CONSTRUCTOR})
>     > @Retention(RetentionPolicy.RUNTIME)
>     > @interface Ann {
>     > }
>     > record R(@Ann String str) {
>     >    R {}
>     > }
>     >
>     > Error message:
>     > R.java:7: error: annotation type not applicable to this kind of
>     declaration
>     > record R(@Ann String str) {
>     >           ^
>     > 1 error
>     > 1 warning
>     >
>     > I would expect that the annotation is silently propagated to the
>     > compact constructor declaration. Is this correct behavior?
>     >
>     > With best regards,
>     > Tagir Valeev.
>



More information about the amber-dev mailing list