This subject has been discussed a few times in the past and I'd like to give it
a bump. As I mentioned in one of the bugs linked to
https://issues.apache.org/jira/browse/GROOVY-3683, joint compilation is our
main use case for Groovy. We have large Java projects and want to introduce
Groovy little-by-little. We don't want to mess with separate source folders
and separate compilation. This is generally possible, but in terms of AST
transforms, we need to be very selective. Introducing any new interfaces or
methods via AST xforms is a likely source of joint compilation errors.
Some of the bugs mention efforts to replace stub generation with stub-less
joint compilation. Did any such exploration take place? Were there any
fruitful discoveries or experiments?
The specific case I ran into this week is a class that implements the List
interface and all method implementations are provided through @Delegate.
class Foo implements Bar, List<Baz> {
@Delegate private List<Baz> list
}
When this is joint compiled, the stub has compilation errors:
[compile] org.codehaus.groovy.control.MultipleCompilationErrorsException:
startup failed:
[compile] Compile error during compilation with javac.
[compile]
C:\Users\...\Local\Temp\groovy-generated-4358726042782385987-java-source\...Foo.java:10:
error: Foo is not abstract and does not override abstract method
subList(int,int) in List
I didn't realize the stubs were actually compiled. I thought they were just
referenced by javac to understand the types.
Is there any hope here for generating better stubs, telling javac not to
compile the stubs or to ignore errors, or something else? I had all this
working in the IDE and was ready to commit when I ran into the brick wall of
groovyc/javac handling of Groovy AST transformations again.