FYI: I opened GROOVY-7522 <https://issues.apache.org/jira/browse/GROOVY-7522> and GROOVY-7523 <https://issues.apache.org/jira/browse/GROOVY-7523> which, if agreed to, will make your config script a lot simpler.
-Keegan On Fri, Jul 17, 2015 at 4:49 PM, Keegan Witt <keeganw...@gmail.com> wrote: > Awesome! Glad I could help. > > On Fri, Jul 17, 2015 at 12:48 PM, Nikolay Totomanov <ntotoma...@abv.bg> > wrote: > >> Thanks a lot, Keegan! >> It works like a charm! >> >> >> >> >-------- Оригинално писмо -------- >> >От: Nikolay Totomanov ntotoma...@abv.bg >> >Относно: Re: Always add no-args constructor at compile time >> >До: users@groovy.incubator.apache.org >> >Изпратено на: 15.07.2015 01:57 >> >> The code looks very clean to me! >> Thanks a lot, Keegan! >> I'll give it a try. >> >> >> >> >> >-------- Оригинално писмо -------- >> >От: Keegan Witt keeganw...@gmail.com >> >Относно: Re: Always add no-args constructor at compile time >> >До: users@groovy.incubator.apache.org >> >Изпратено на: 14.07.2015 06:04 >> >> Oh, actually Opcodes is not needed, you can take that off so you don't >> need a dependency on *org.ow2.asm:asm*. >> >> On Mon, Jul 13, 2015 at 10:53 PM, Keegan Witt <keeganw...@gmail.com> >> wrote: >> >> Here's what I'm thinking. Use this as a configuration script. >> >> import java.lang.annotation.ElementType >> import java.lang.annotation.Retention >> import java.lang.annotation.RetentionPolicy >> import java.lang.annotation.Target >> import org.codehaus.groovy.ast.ASTNode >> import org.codehaus.groovy.ast.AnnotatedNode >> import org.codehaus.groovy.ast.ClassNode >> import org.codehaus.groovy.ast.ConstructorNode >> import org.codehaus.groovy.ast.Parameter >> import org.codehaus.groovy.ast.stmt.BlockStatement >> import org.codehaus.groovy.control.CompilePhase >> import org.codehaus.groovy.control.SourceUnit >> import org.codehaus.groovy.transform.AbstractASTTransformation >> import org.codehaus.groovy.transform.GroovyASTTransformation >> import org.codehaus.groovy.transform.GroovyASTTransformationClass >> import org.objectweb.asm.Opcodes >> >> @GroovyASTTransformation(phase = CompilePhase.CANONICALIZATION) >> public class DefaultConstructorASTTransformation extends >> AbstractASTTransformation implements Opcodes { >> public void visit(ASTNode[] nodes, SourceUnit source) { >> init(nodes, source) >> AnnotatedNode parent = (AnnotatedNode) nodes[1] >> >> if (parent instanceof ClassNode) { >> ClassNode cNode = (ClassNode) parent >> if (!cNode.getDeclaredConstructor(new Parameter[0])) { >> final BlockStatement body = new BlockStatement() >> cNode.addConstructor(new ConstructorNode(ACC_PUBLIC, new >> Parameter[0], cNode.EMPTY_ARRAY, body)) >> } >> } >> } >> } >> @Retention(RetentionPolicy.RUNTIME) >> @Target(ElementType.TYPE) >> @GroovyASTTransformationClass("DefaultConstructorASTTransformation") >> public @interface DefaultConstructor {} >> >> withConfig(configuration) { >> ast(DefaultConstructor) >> } >> >> >> Seemed to work in my tests, but everybody should feel free to point out >> anything I goofed up. >> >> -Keegan >> >> On Mon, Jul 13, 2015 at 6:24 PM, Keegan Witt <keeganw...@gmail.com> >> wrote: >> >> Sorry, I should have given you the example in the configuration script >> syntax >> >> withConfig(configuration) { >> ast(groovy.transform.TupleConstructor, includes:['']) >> } >> >> >> But it doesn't matter, because the transformation removes existing >> constructors from the class. Sorry, I got ahead of myself. >> >> -Keegan >> >> On Mon, Jul 13, 2015 at 5:45 PM, Keegan Witt <keeganw...@gmail.com> >> wrote: >> >> One way that comes to mind offhand would be >> @groovy.transform.TupleConstructor(includeFields=false, >> includeProperties=false, includeSuperFields=false, >> includeSuperProperties=false) >> >> or >> @groovy.transform.TupleConstructor(includes=['']) >> >> Anybody know why >> @groovy.transform.TupleConstructor(includes=[]) >> doesn't work? >> >> -Keegan >> >> On Mon, Jul 13, 2015 at 5:34 PM, Nikolay Totomanov <ntotoma...@abv.bg> >> wrote: >> >> Hello, >> >> I need to always add the default constructor to my classes. >> Is it possible to achieve that using CompilerConfiguration >> >> Regards, >> Nikki >> >> >> >> >> >> >