[ 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)