[ 
https://issues.apache.org/jira/browse/GROOVY-8300?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16143608#comment-16143608
 ] 

Paul King edited comment on GROOVY-8300 at 8/28/17 12:14 PM:
-------------------------------------------------------------

I suspect we won't ever introduce that ability to apply to fields but if we did 
it might be something like {{@AutoFinal(includeFields=true)}} rather than 
{{@AutoFinalFields}}. You could imagine an annotation definition something like:
{code}
public @interface AutoFinal {
    boolean includeFields() default false
    boolean includeProperties() default false
    /** should all methods be marked final */
    boolean includeMethods() default false
    boolean includeConstructors() default false
    boolean includeMethodParams() default true
    boolean includeConstructorParams() default true
}
{code}
Or instead of all these booleans, we could use something similar to the 
{{PackageScopeTarget}} enum that {{@PackageScope}} uses.


was (Author: paulk):
I suspect we won't ever introduce that ability to apply to fields but if we did 
it might be something like {{@AutoFinal(includeFields=true)}} rather than 
{{@AutoFinalFields}}. You could imagine an annotation definition something like:
{code}
public @interface AutoFinal {
    boolean includeFields() default false
    boolean includeProperties() default false
    /** should all methods be marked final */
    boolean includeMethods() default false
    boolean includeConstructors() default false
    boolean includeMethodParams() default true
    boolean includeConstructorParams() default true
}
{code}

> Groovy should have an @AutoFinal annotation
> -------------------------------------------
>
>                 Key: GROOVY-8300
>                 URL: https://issues.apache.org/jira/browse/GROOVY-8300
>             Project: Groovy
>          Issue Type: New Feature
>            Reporter: Paul King
>
> When defined on a method or constructor, all parameters of that 
> method/constructor will be final. When applied on a class, the annotation 
> applies to all methods/constructors.
> Discussion points:
> # Should visibility matter, e.g. would it apply to all public, protected, 
> private, etc. members, or does there need to be some ability to customise? 
> *Current thinking*: it should apply to all methods. We can always introduce 
> an additional annotation attribute at a later point if there is demand.
> # Should there be support for 'includes' or 'excludes' functionality? 
> *Current thinking*: don't support this for now. The annotation can be applied 
> on multiple methods/constructors if finer granularity than the class level is 
> required.
> # Should the annotation apply to fields/properties? Applying 'final' to a 
> field/property seems to be more efficient than applying @AutoFinal but would 
> there ever be a desire to apply such an annotation to all fields/properties? 
> *Current thinking*: don't support this for now. An annotation attribute could 
> be added later if we wanted to optionally turn such extra cases on.
> # Should it apply to synthetic methods/constructors added by the 
> compiler/other transforms?
> # What phase should this run at? It needs to be before the (incubating) final 
> variable analyser is run.
> # We should have tests to confirm that there are no adverse interactions with 
> other language features, e.g. default parameter values.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to