TupleConstructor annotation in Groovy generate constructors for class with each of its properties (eventually also fields). The class below
@TupleConstructor(includeFields = true) class Person { String firstName String lastName private boolean male }
will have constructors: Person(), Persion(String), Person(String, String) and Person(String, String, boolean). You could test it using code below.
class TupleConstructorTest extends GroovyTestCase{ @Test void testSimpleTupleConstructorShouldGenerateConstructor() { assertScript ''' import groovy.transform.TupleConstructor @TupleConstructor(includeFields = true) class Person { private final String firstName private final String lastName private final boolean male String toString(){ "$firstName $lastName $male" } } assert Person.constructors.size() == 4 assert new Person().toString() == 'null null false' assert new Person('John').toString() == 'John null false' assert new Person('John','Smith').toString() == 'John Smith false' assert new Person('John','Smith', true).toString() == 'John Smith true' ''' } }
I almost always create classes with all private final fields and generate constructior with all fields using my IDE.
So I have prepared new transformation AllFieldConstructor which bases on TupleConstructor and generates only constructor with all fields as parameters.
class AllFieldConstructorTest extends GroovyTestCase{ @Test void testSimpleTupleConstructorShouldGenerateConstructor() { assertScript ''' import com.blogspot.przybyszd.transformations.AllFieldConstructor @AllFieldConstructor class Person { private final String firstName private final String lastName private final boolean male String toString(){ "$firstName $lastName $male" } } assert Person.constructors.size() == 1 assert new Person('John','Smith', true).toString() == 'John Smith true' ''' } }
The sources are available here