[ https://issues.apache.org/jira/browse/GROOVY-9472?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17507909#comment-17507909 ]
Eric Milles commented on GROOVY-9472: ------------------------------------- If you include the class or classes that file1 generates on the classpath when compiling file2 there can be a significant difference. When compiled together, source units are brought through compile phases in lockstep. In case of Builder, the inner class is not generated before resolution of type references. > 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)