> But, that still leaves the question of whether the desugaring should, or 
> should not be, transparent to annotations.  My sense is that pushing 
> annotations down to fields, ctor params, and accessors _seems_ friendly, but 
> also opens a number of uncomfortable questions.  

Also, we’ve been treating these as if they are the same case.   In

    record R(@Foo int a);

I think the case for “pushing down” @Foo to the _field_ for a has a somewhat 
stronger argument than pushing it down to the _accessor method_ for a.  (Not 
only does the record component look like a field declaration, but record 
declarations are about “let me declare the state, and then you can derive the 
API from that state.”  So pushing the annotations down to the actual state 
declaration seems sensible, but pushing annotations from there to the 
corresponding API elements seems more questionable.  (Thought experiment: if we 
had some sort of “auto accessor” mechanism:

    Class Foo {
        @Foo with-getter with-setter int a;
    }

Would we similarly be talking about pushing the @Foo annotation down to the 
synthetic methods, or would we say “Well, obviously @Foo is an annotation on 
the declaration of the field.”  It’s not a slam-dunk either way, but the latter 
seems more likely to me.  

Which is to say: there are possibly-credible middle grounds between “push it 
everywhere we could conceivably do so” and “it’s an annotation on the record 
component, full stop.”  


Reply via email to