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.

Reply via email to