RFR: JDK-8234101: Compilation error thrown when repeating annotation is used on record component
Vicente Romero
vicente.romero at oracle.com
Wed Dec 11 19:16:12 UTC 2019
right I agree with that, we can also split the method into two one that
does validation and one that do the special job for records
Vicente
On 12/11/19 12:54 PM, Jan Lahoda wrote:
> Looks OK to me for now.
>
> But I wonder if we eventually shouldn't find a better place for the
> side-effects made in Check.validateAnnotation (i.e. tat "validate"
> would not have side-effects except for reporting errors).
>
> Jan
>
> On 11. 12. 19 5:40, Vicente Romero wrote:
>> Hi,
>>
>> Please review the fix for [1] at [2]. This patch provides support for
>> repeating annotations on records. It builds on the previous support
>> for annotations for records. Which is that all annotations applied to
>> record components are pushed down to all members generated by the
>> compiler from each record component: field, constructor parameter and
>> accessor. Later at Check::validateAnnotation if we have gone too far
>> and had applied an annotation to a non-applicable location, it is
>> removed.
>>
>> The idea of this patch is that when a repeated annotations are being
>> processed at Annotate::processRepeatedAnnotations, if the annotated
>> element is a record or a record member and the annotation is not
>> applicable to it, we bail out instead of issuing an error. Later on
>> at Check::validateAnnotation when we have all the information about
>> the annotations we can remove non-applicable annotations as before.
>> But there is an important detail Check::validateAnnotation, validates
>> annotations one by one, so if an annotation has been repeated kind of:
>>
>> record R(@A @A int i) {}
>>
>> then the method will be invoked twice for each appearance of @A,
>> currently Check::validateAnnotation can remove each instance, but we
>> also want to remove the container annotation which is synthetically
>> generated by javac. For this reason I have modified
>> SymbolMetadata::remove to remove a container annotation if at least
>> one of the contained annotations is removed. How does it looks?
>>
>> Thanks,
>> Vicente
>>
>> [1] https://bugs.openjdk.java.net/browse/JDK-8234101
>> [2] http://cr.openjdk.java.net/~vromero/8234101/webrev.00/
More information about the compiler-dev
mailing list