JDK 10 RFR of 8191234: TypeKindVisitor needs to handle modules,
joe darcy
joe.darcy at oracle.com
Wed Nov 22 21:56:26 UTC 2017
Hi Jon,
On 11/22/2017 11:42 AM, Jonathan Gibbons wrote:
> Question ...
>
> In TypeKindVisitor6, visitNoTypeAsModule, you specify that the return
> value is the result of visitUnknown. That is not true of the override
> in TypeKindVisitor9. That raises the question: are @param and
> @return specs conceptually part of the API-spec, or part of the implSpec?
Yes, that is a bit of a detail -- the method in TypeKindVisitor9.java
does provide an explicit @return tag that doesn't @inheritDoc the spec
from the @return in TypeKindVisitor6. So the javadoc for the classes in
the API is correct, but there are implications for subclasses outside of
the javax.lang.model.util.* API.
With the change as written, a subclass that overrode this visitXasY
method would need to both provide a doc comment for the method as well
as for the @return tag.
The javadoc tags here are treated the same way as
ElementKind{$N}.visitVariableAsResourceVariable.
I don't know if we have a broader convention on this point.
Thanks,
-Joe
>
> -- Jon
>
>
>
> On 11/22/2017 10:37 AM, joe darcy wrote:
>> Webrev now with a regression test:
>>
>> http://cr.openjdk.java.net/~darcy/8191234.1/
>>
>> Thanks,
>>
>> -Joe
>>
>> On 11/20/2017 10:34 PM, joe darcy wrote:
>>> Hello,
>>>
>>> Please review the patch below and CSR for
>>>
>>> 8191234: TypeKindVisitor needs to handle modules
>>> CSR: https://bugs.openjdk.java.net/browse/JDK-8191642
>>>
>>> The module-related javax.lang.model updates in JDK 9 overlooked
>>> adding module support to the TypeKind family of visitors.
>>>
>>> The treatment of TypeKind.MODULE is analogous to the how support for
>>> ElementKind.RESOURCE_VARIABLE was added in JDK 7 to the ElementKind
>>> visitors.
>>>
>>> For now treating this fix was noreg-trivial, but I'll concede test
>>> are appropriate and write a few if reviewers think they are needed.
>>>
>>> Thanks,
>>>
>>> -Joe
>>>
>>> diff -r 5cc5b8270cad
>>> src/java.compiler/share/classes/javax/lang/model/util/TypeKindVisitor6.java
>>> ---
>>> a/src/java.compiler/share/classes/javax/lang/model/util/TypeKindVisitor6.java
>>> Mon Nov 20 20:33:51 2017 -0800
>>> +++
>>> b/src/java.compiler/share/classes/javax/lang/model/util/TypeKindVisitor6.java
>>> Mon Nov 20 22:06:30 2017 -0800
>>> @@ -257,7 +257,7 @@
>>> *
>>> * @implSpec This implementation dispatches to the visit method
>>> for
>>> * the specific {@linkplain TypeKind kind} of pseudo-type:
>>> - * {@code VOID}, {@code PACKAGE}, or {@code NONE}.
>>> + * {@code VOID}, {@code PACKAGE}, {@code MODULE}, or {@code NONE}.
>>> *
>>> * @param t {@inheritDoc}
>>> * @param p {@inheritDoc}
>>> @@ -273,6 +273,9 @@
>>> case PACKAGE:
>>> return visitNoTypeAsPackage(t, p);
>>>
>>> + case MODULE:
>>> + return visitNoTypeAsModule(t, p);
>>> +
>>> case NONE:
>>> return visitNoTypeAsNone(t, p);
>>>
>>> @@ -308,6 +311,21 @@
>>> }
>>>
>>> /**
>>> + * Visits a {@link TypeKind#MODULE MODULE} pseudo-type.
>>> + *
>>> + * @implSpec This implementation calls {@code visitUnknown}.
>>> + *
>>> + * @param t the type to visit
>>> + * @param p a visitor-specified parameter
>>> + * @return the result of {@code visitUnknown}
>>> + *
>>> + * @since 10
>>> + */
>>> + public R visitNoTypeAsModule(NoType t, P p) {
>>> + return visitUnknown(t, p);
>>> + }
>>> +
>>> + /**
>>> * Visits a {@link TypeKind#NONE NONE} pseudo-type.
>>> *
>>> * @implSpec This implementation calls {@code defaultAction}.
>>> diff -r 5cc5b8270cad
>>> src/java.compiler/share/classes/javax/lang/model/util/TypeKindVisitor9.java
>>> ---
>>> a/src/java.compiler/share/classes/javax/lang/model/util/TypeKindVisitor9.java
>>> Mon Nov 20 20:33:51 2017 -0800
>>> +++
>>> b/src/java.compiler/share/classes/javax/lang/model/util/TypeKindVisitor9.java
>>> Mon Nov 20 22:06:30 2017 -0800
>>> @@ -93,4 +93,20 @@
>>> protected TypeKindVisitor9(R defaultValue) {
>>> super(defaultValue);
>>> }
>>> +
>>> + /**
>>> + * {@inheritDoc}
>>> + *
>>> + * @implSpec This implementation calls {@code defaultAction}.
>>> + *
>>> + * @param t {@inheritDoc}
>>> + * @param p {@inheritDoc}
>>> + * @return the result of {@code defaultAction}
>>> + *
>>> + * @since 10
>>> + */
>>> + @Override
>>> + public R visitNoTypeAsModule(NoType t, P p) {
>>> + return defaultAction(t, p);
>>> + }
>>> }
>>>
>>
>
More information about the compiler-dev
mailing list