private ClassTemplateSpec generateUnion(UnionDataSchema schema, TyperefDataSchema typerefDataSchema) { assert typerefDataSchema.getRef() == schema; pushCurrentLocation(_schemaResolver.nameToDataSchemaLocations().get(typerefDataSchema.getFullName())); final UnionTemplateSpec unionClass = new UnionTemplateSpec(schema); unionClass.setNamespace(typerefDataSchema.getNamespace()); unionClass.setClassName(typerefDataSchema.getName()); unionClass.setModifiers(ModifierSpec.PUBLIC); registerClassTemplateSpec(typerefDataSchema, unionClass); final TyperefTemplateSpec typerefInfoClass = new TyperefTemplateSpec(typerefDataSchema); typerefInfoClass.setEnclosingClass(unionClass); typerefInfoClass.setClassName("UnionTyperefInfo"); typerefInfoClass.setModifiers(ModifierSpec.PRIVATE, ModifierSpec.STATIC, ModifierSpec.FINAL); final UnionTemplateSpec result = generateUnion(schema, unionClass); result.setTyperefClass(typerefInfoClass); popCurrentLocation(); return result; }