public static Set<ClassTemplateSpec> directReferencedTypes(ClassTemplateSpec spec) { Set<ClassTemplateSpec> results = new HashSet<ClassTemplateSpec>(); if (spec instanceof RecordTemplateSpec) { RecordTemplateSpec recordSpec = (RecordTemplateSpec)spec; for (RecordTemplateSpec.Field field: recordSpec.getFields()) { results.add(field.getType()); } } else if (spec instanceof UnionTemplateSpec) { UnionTemplateSpec unionSpec = (UnionTemplateSpec)spec; for (UnionTemplateSpec.Member member: unionSpec.getMembers()) { results.add(member.getClassTemplateSpec()); } } else if (spec instanceof CourierMapTemplateSpec) { CourierMapTemplateSpec mapSpec = (CourierMapTemplateSpec)spec; if (mapSpec.getKeyClass() != null) { results.add(mapSpec.getKeyClass()); } results.add(mapSpec.getValueClass()); } else if (spec instanceof ArrayTemplateSpec) { ArrayTemplateSpec arraySpec = (ArrayTemplateSpec)spec; results.add(arraySpec.getItemClass()); } return results; }
private UnionTemplateSpec generateUnion(UnionDataSchema schema, UnionTemplateSpec unionClass) { for (DataSchema memberType : schema.getTypes()) { final UnionTemplateSpec.Member newMember = new UnionTemplateSpec.Member(); unionClass.getMembers().add(newMember); newMember.setSchema(memberType); if (memberType.getDereferencedType() != DataSchema.Type.NULL) { newMember.setClassTemplateSpec(processSchema(memberType, unionClass, memberType.getUnionMemberKey())); newMember.setDataClass(determineDataClass(memberType, unionClass, memberType.getUnionMemberKey())); } } return unionClass; }
public String unionMemberKey() { return _member.getSchema().getUnionMemberKey(); }
private DataSchema _memberSchema() { return _member.getSchema(); } private TSTypeSyntax _memberTypeSyntax() {
public String toSetAccessor(String anchor, UnionTemplateSpec.Member member) { // TODO(jbetz): apply custom type of union member return writeTypeExpr(expr(anchor), member.getClassTemplateSpec()).toSwiftCode(); }
private TSTypeSyntax _memberTypeSyntax() { return createTypeSyntax(_member.getSchema()); } }
public String toGetAccessor(String anchor, UnionTemplateSpec.Member member) { ClassTemplateSpec type = member.getClassTemplateSpec(); // TODO(jbetz): Union members can have custom info. We need to either pick up latest rest.li // code or inspect the typeref. return readTypeExpr(expr(anchor), type, null, false).toSwiftCode(); }