RFR: JDK15-8242529: javac defines type annotations incorrectly for record members (constructor and property accessor)
Vicente Romero
vicente.romero at oracle.com
Thu Jul 9 18:48:33 UTC 2020
ok will do before pushing,
Thanks,
Vicente
On 7/9/20 2:34 PM, Paul Sandoz wrote:
> Much better!
>
> Suggest you also remove the duplication
> getAnnotatedActualTypeArguments, such as:
>
> var annoTypeArgs = ((AnnotatedParameterizedType)
> annoType).getAnnotatedActualTypeArguments();
> Assert.check(annoTypeArgs.length == 1);
> Assert.check(annoTypeArgs[0].getAnnotations()[0] instanceof
> TypeAnnotation);
>
> Up to you, no need for another review.
>
> Paul.
>
>> On Jul 9, 2020, at 11:25 AM, Vicente Romero
>> <vicente.romero at oracle.com <mailto:vicente.romero at oracle.com>> wrote:
>>
>> Hi Paul,
>>
>> Thanks for the feedback, I have uploaded another iteration at [1] how
>> does it look?
>>
>> Vicente
>>
>> [1] http://cr.openjdk.java.net/~vromero/8242529/webrev.01/
>>
>> On 7/9/20 12:06 PM, Paul Sandoz wrote:
>>> Hi Vicente,
>>>
>>> The asserts look regular in all four cases, I think :-) If so we can
>>> consolidate the check into a single method, off the top of my head:
>>>
>>> RecordComponent recordComponent =
>>> RecordNotPreservingNestedTypeAnnotationsTest.class.getRecordComponents()[0];
>>> check(recordComponent.getAnnotations(),
>>> recordComponent.getAnnotatedType());
>>>
>>> Method accessor = recordComponent.getAccessor();
>>> check(accessor.getAnnotations(), accessor.getAnnotatedReturnType());
>>>
>>> Constructor<?> constructor =
>>> RecordNotPreservingNestedTypeAnnotationsTest.class.getConstructor(Callable.class);
>>> check(constructor.getParameterAnnotations()[0],
>>> constructor.getAnnotatedParameterTypes()[0]);
>>>
>>> Field field =
>>> RecordNotPreservingNestedTypeAnnotationsTest.class.getDeclaredField(recordComponent.getName());
>>>
>>> check(field.getAnnotations(), field.getAnnotatedType());
>>> );
>>>
>>> Does that work?
>>>
>>> Paul.
>>>
>>>> On Jul 8, 2020, at 7:31 PM, Vicente Romero
>>>> <vicente.romero at oracle.com <mailto:vicente.romero at oracle.com>> wrote:
>>>>
>>>> Hi,
>>>>
>>>> Please review fix for [1] at [2]. Current record implementation is
>>>> not forward nested type annotations to generated members like in:
>>>>
>>>> record R(@RegularAnnotation @TypeAnnotation Callable<@TypeAnnotation ?> foo) {}
>>>> This patch is fixing one issue that show up in two different
>>>> generated record members:
>>>> - the accessor corresponding to the record component
>>>> - the corresponding parameter in the canonical constructor
>>>>
>>>> The issue is that the current implementation is not able to
>>>> correctly generate the annotated types for these components when
>>>> such an annotated type has "inner" type annotations like it is the
>>>> case of `foo` in the example which has `TypeAnnotation` applied to
>>>> the wildcard. In the case of the corresponding parameter in the
>>>> canonical constructor the annotated type was generated correctly
>>>> but the class file reflected the internal type annotation as
>>>> applied to a field not to a method parameter. In the case of the
>>>> accessor the inner annotation was not there at all. The patch is
>>>> making a copy of the expression defining the type of the record
>>>> component and placing it that the right place for both generated
>>>> members.
>>>>
>>>> Thanks,
>>>> Vicente
>>>>
>>>> [1] https://bugs.openjdk.java.net/browse/JDK-8242529
>>>> [2] http://cr.openjdk.java.net/~vromero/8242529/webrev.00/
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20200709/cfe5afe2/attachment-0001.htm>
More information about the compiler-dev
mailing list