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