+\r
+ def protected genUnionConstructor() '''\r
+ «FOR p : allProperties»\r
+ «val List<GeneratedProperty> other = new ArrayList(properties)»\r
+ «val added = other.remove(p)»\r
+ «genConstructor(p, other)»\r
+ «ENDFOR»\r
+\r
+ '''\r
+\r
+ def protected genConstructor(GeneratedProperty property, GeneratedProperty... other) '''\r
+ public «type.name»(«property.returnType.importedName + " " + property.name») {\r
+ «IF false == parentProperties.empty»\r
+ super(«parentProperties.asArguments»);\r
+ «ENDIF»\r
+ «generateRestrictions(type, property.fieldName.toString, property.returnType)»\r
+ this.«property.fieldName» = «property.name»;\r
+ «FOR p : other»\r
+ this.«p.fieldName» = null;\r
+ «ENDFOR»\r
+ }\r
+ '''\r
+\r