groovy-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Paul King (JIRA)" <j...@apache.org>
Subject [jira] [Comment Edited] (GROOVY-8242) Javadoc for Newify is missing some attribute values
Date Sun, 06 Aug 2017 10:38:00 GMT

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

Paul King edited comment on GROOVY-8242 at 8/6/17 10:37 AM:
------------------------------------------------------------

Just for historical reference, I don't believe the Groovy compiler will complain for all cases
where an annotation attribute has no default and is not supplied with one when not used. There
are several cases:

# If the annotation and usage are both Groovy/same source unit I think you will normally see
(for the {{value}} annotation attribute as an example):
{code}
No explicit/default value found for annotation attribute 'value' in @MyAnnotation
{code}
# If the annotation is Java/pre-compiled and it has SOURCE retention, Groovy will keep quiet.
# If the annotation is Java/pre-compiled and it has RUNTIME retention you will see the JVM
complain:
{code}
java.lang.annotation.IncompleteAnnotationException: MyAnnotation missing element value
{code}

I suspect that at least the last of these, case (3), is a bug. I presume in earlier versions
of the JVM and/or ASM libraries reading an annotation for the Java/pre-compiled case with
no default value triggered the same check as for Groovy above, case (1),  but now it yields
a {{ReturnStatement}} containing {{null}} as the return value and this avoids detection. Probably
the second is also a bug provided annotation processing is finished which I think will be
true since the mandatory attribute check is done during classgen.

In any case, it doesn't affect this issue. I.e. the issue is valid and PR good. I'll create
an additional issue to track this.


was (Author: paulk):
Just for historical reference, I don't believe the Groovy compiler will complain for all cases
where an annotation attribute has no default and is not supplied with one when not used. There
are several cases:

# If the annotation and usage are both Groovy/same source unit I think you will normally see
(for the {{value}} annotation attribute as an example):
{code}
No explicit/default value found for annotation attribute 'value' in @MyAnnotation
{code}
# If the annotation is Java/pre-compiled and it has SOURCE retention, Groovy will keep quiet.
# If the annotation is Java/pre-compiled and it has RUNTIME retention you will see the JVM
complain:
{code}
java.lang.annotation.IncompleteAnnotationException: MyAnnotation missing element value
{code}

I suspect that at least the last of these, case (3), is a bug. I presume in earlier versions
of the JVM and/or ASM libraries reading a Java annotation with no default value triggered
the same check as for Groovy above, case (1),  but now it yields a {{ReturnStatement}} containing
{{null}} as the return value and this avoids detection. Probably the second is also a bug
provided annotation processing is finished which I think will be true since the mandatory
attribute check is done during classgen.

In any case, it doesn't affect this issue. I.e. the issue is valid and PR good. I'll create
an additional issue to track this.

> Javadoc for Newify is missing some attribute values
> ---------------------------------------------------
>
>                 Key: GROOVY-8242
>                 URL: https://issues.apache.org/jira/browse/GROOVY-8242
>             Project: Groovy
>          Issue Type: Bug
>            Reporter: Eric Milles
>            Assignee: John Wagenleitner
>            Priority: Minor
>             Fix For: 2.4.13
>
>
> I was looking at thw Newify AST transform.  Some of the Javadoc appears incorrect since
the annotation requires a value.
> {code}
>  * or this ("Ruby-style"):
>  * <pre>
>  * {@code @Newify} class MyTreeProcessor {  --  Is this supposed to be @Newify([Tree,Leaf])?
>  *     def myTree = Tree.new(Tree.new(Leaf.new("A"), Leaf.new("B")), Leaf.new("C"))
>  *     def process() { ... }
>  * }
>  * </pre>
> {code}
> {code}
>  * An example showing how to use the annotation at different levels:
>  * <pre>
>  * {@code @Newify(auto=false, value=Foo)}
>  * class Main {
>  *     {@code @Newify} // turn auto on for field  --  Is this supposed to be @Newify(BigInteger)?
>  *     def field1 = java.math.BigInteger.new(42)
>  *     def field2, field3, field4
>  *
>  *     {@code @Newify(Bar)}
>  *     def process() {
>  *         field2 = Bar("my bar")
>  *     }
>  *
>  *     {@code @Newify(Baz)}
>  *     Main() {
>  *         field3 = Foo("my foo")
>  *         field4 = Baz("my baz")
>  *     }
>  * }
>  * </pre>
> {code}



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

Mime
View raw message