RFR: 8336754: Remodel TypeAnnotation to "has" instead of "be" an Annotation [v6]
Chen Liang
liach at openjdk.org
Thu Aug 1 20:02:54 UTC 2024
On Wed, 24 Jul 2024 13:00:47 GMT, Chen Liang <liach at openjdk.org> wrote:
>> `TypeAnnotation` is not an annotation, as it should not be used in places like `AnnotationValue.ofAnnotation`. Thus it's remodeled to contain an annotation at a given location instead of to be an annotation.
>>
>> Depends on #20205.
>
> Chen Liang has updated the pull request incrementally with three additional commits since the last revision:
>
> - More refinements from alex
> - Artifact -> construct
> - More about Annotation, add equals note
I have added a few more paragraphs in response to the request for comments on default values and repeatable annotations. Below are the excerpts, for `Annotation` and `AnnotationElement::name`.
* In an annotation in Java source code, elements in the annotation interface
* with default values may not be compiled into element-value pairs unless an
* explicit value is provided. ({@jls 9.6.2}) The default value is derived from
* the {@link AnnotationDefaultAttribute AnnotationDefault} attribute on the
* method representing the annotation interface element in the class file
* representing the annotation interface.
* <p id="repeatable">
* Multiple annotations of the same interface <i>A</i> in Java source code
* ({@jls 9.7.5}) are represented by the {@linkplain AnnotationValue.OfAnnotation
* annotation-valued} array elements of the {@linkplain AnnotationValue.OfArray
* array-valued} element named {@code value} of a container annotation of the
* containing annotation interface of <i>A</i>. ({@jls 9.6.3})
* <p>
* A single-element annotation ({@jls 9.7.3}) in Java source code is
* compiled to an {@link Annotation} with exactly one {@linkplain
* Annotation#elements key-value pair} where the element has the name
* {@code value}.
* <p>
* Multiple annotations of the same interface <i>A</i> in Java source code
* is compiled to an implicitly declared container annotation ({@jls 9.7.5})
* with exactly one {@linkplain Annotation#elements key-value pair} where
* the element has the name {@code value} and the type of the element is the
* {@linkplain AnnotationValue.OfArray array} whose component type is the
* {@linkplain AnnotationValue.OfAnnotation annotation interface <i>A</i>}.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/20247#issuecomment-2263874434
More information about the compiler-dev
mailing list