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

Paul King commented on GROOVY-9472:
-----------------------------------

> * dynamic mode works fine as long as you do not reference the Builder class 
> by name.

The JavaDoc for {{DefaultStrategy}} could certainly be expanded. I am unsure if 
it is needed for {{InitializerStrategy}}. It is N/A for the other strategies.

> * static mode should just completely fail to use this annotation 

There are currently unit tests for {{@CompileStatic}} with all strategies 
including using a local variable for the builder. None of these tests ever 
reference the builder classname at compile time but inference stores the 
correct classes names for subsequent static compilation.

> * joint compilation fails for this if the usage is in the same compilation 
> and in Java

We have the general disclaimer that traits may not work in conjunction with 
some AST transforms, we should probably have something similar for joint 
compilation and AST transforms.

> Static import causes unresolved reference to become resolved
> ------------------------------------------------------------
>
>                 Key: GROOVY-9472
>                 URL: https://issues.apache.org/jira/browse/GROOVY-9472
>             Project: Groovy
>          Issue Type: Bug
>          Components: Compiler, Static Type Checker
>    Affects Versions: 2.5.10
>            Reporter: Daniil Ovchinnikov
>            Assignee: Eric Milles
>            Priority: Major
>             Fix For: 4.0.0
>
>
> {code:groovy|title=com/foo/Person.groovy}
> package com.foo
> @groovy.transform.builder.Builder
> class Person {
>     String name
> }
> {code}
> 1.
> {code:groovy|title=Main.groovy}
> import com.foo.Person
> class Main {
>     static void main(String[] args) {
>         Person.PersonBuilder pb = Person.builder() 
>         println(pb.build())
>     }
> }
> {code}
> Trying to use it without a static import yields {{unable to resolve class 
> Person.PersonBuilder}}, which is another issue.
> 2. Let's add a static import
> {code:groovy|title=Main.groovy}
> import com.foo.Person
> import static com.foo.Person.PersonBuilder
> class Main {
>     static void main(String[] args) {
>         PersonBuilder pb = Person.builder()
>         println(pb.build())
>     }
> }
> {code}
> The code compiles, but fails with {{java.lang.NoClassDefFoundError: 
> PersonBuilder}} when run.
> 3. Let's add {{@CompileStatic}}
> {code:groovy|title=Main.groovy}
> import com.foo.Person
> import static com.foo.Person.PersonBuilder
> import groovy.transform.CompileStatic
> @CompileStatic
> class Main {
>     static void main(String[] args) {
>         PersonBuilder pb = Person.builder()
>         println(pb.build())
>     }
> }
> {code}
> Compilation fails with: 
>  {{Cannot assign value of type com.foo.Person$PersonBuilder to variable of 
> type PersonBuilder}} and {{Cannot find matching method PersonBuilder#build()}}



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to