Annotation on lambda formal parameter?
forax at univ-mlv.fr
Thu Dec 13 14:20:47 PST 2012
On 12/13/2012 10:49 PM, Dan Smith wrote:
> My understanding is:
> 1) Java 7 already allows annotations on method parameters (JLS 8.4.1)
> 2) Explicitly-typed lambdas allow the same annotations as method parameters (Lambda Spec Part B, 15.27 & 15.27.1)
> 3) Implicitly-typed lambdas do not allow any modifiers, including annotations (Lambda Spec again; also, the design discussions I referenced)
> I thought the question was about (3), but maybe it's also about whether we _don't_ want (2)?
> (FWIW, I note that exception parameters can have annotations in Java 7. I can't seem to find the line in the spec that says what kind of ElementType they support, but some reverse engineering tells me they're PARAMETERs, not LOCAL_VARIABLEs.)
Re-reading the mail of Alex, the question is about (3) that as you said
we rule this out.
> On Dec 13, 2012, at 2:32 PM, Brian Goetz <brian.goetz at oracle.com> wrote:
>> I think we did, but the JSR-308 EG is asking us for that opinion.
>> While one might say "sure, annotations should be allowed everywhere, what's the harm", the reality is that it is not going to be easy for tools to *find* annotations on lambda formal parameters, since reflection only goes down to the method level and not the AST level.
>> Also, this query is not about type annotations on the types of explicit lambda parameters; it's about annotations on the parameters themselves. While containers use parmeter annotations for things like injection, I am having a hard time seeing a use case that is both sensible and desirable.
>> On 12/13/2012 4:18 PM, Dan Smith wrote:
>>> Didn't we already address this with "Modifiers on Inferred-Type Lambda Parameters", which we rejected (in email "Some rejected ideas" 5 Jul 2012, then in the August meeting)? Or am I misunderstanding the question?
>>> On Dec 11, 2012, at 9:35 PM, Brian Goetz <brian.goetz at oracle.com> wrote:
>>>> Received from the -comments list. Note that this is largely a query of "what does the Lambda EG think the JSR-308 EG should do".
>>>> -------- Original Message --------
>>>> Subject: Annotation on lambda formal parameter?
>>>> Date: Tue, 11 Dec 2012 16:27:23 -0800
>>>> From: Alex Buckley <alex.buckley at oracle.com>
>>>> Organization: Oracle Corporation
>>>> To: lambda-spec-comments at openjdk.java.net
>>>> CC: Michael Ernst <mernst at cs.washington.edu>
>>>> Lambda EG,
>>>> JSR 308 "Annotations on Java Types" will allow annotations on the
>>>> manifest type of a lambda expression's formal parameter, and on the type
>>>> and/or type argument in a method/constructor reference expression.
>>>> Is there any interest in having 308 allow an annotation on a lambda
>>>> formal parameter itself? That is, on the declaration of the parameter,
>>>> rather than its type. A declaration annotation is conceptually valid
>>>> even if the parameter declaration has no manifest type on which to write
>>>> a type annotation.
>>>> This is somewhat in scope for 308 because it already allows annotations
>>>> on declarations of type parameters (filling a hole from Java SE 5.0) and
>>>> it has the sub-method-level class file attributes needed to store
>>>> annotations on declarations of individual lambda parameters.
More information about the lambda-spec-experts