@staticmethod<EOL><INDENT>def make_field_objects(field_data, names):<EOL><DEDENT>
field_objects = []<EOL>field_names = []  <EOL>for field in field_data:<EOL><INDENT>if hasattr(field, '<STR_LIT>') and callable(field.get):<EOL><INDENT>atype = cast(Text, field.get('<STR_LIT:type>'))<EOL>name = cast(Text, field.get('<STR_LIT:name>'))<EOL>has_default = False<EOL>default = None<EOL>if '<STR_LIT:default>' in field:<EOL><INDENT>has_default = True<EOL>default = field.get('<STR_LIT:default>')<EOL><DEDENT>order = field.get('<STR_LIT>')<EOL>doc = field.get('<STR_LIT>')<EOL>other_props = get_other_props(field, FIELD_RESERVED_PROPS)<EOL>new_field = Field(atype, name, has_default, default, order, names, doc,<EOL>other_props)<EOL>if new_field.name in field_names:<EOL><INDENT>fail_msg = '<STR_LIT>' % new_field.name<EOL>raise SchemaParseException(fail_msg)<EOL><DEDENT>field_names.append(new_field.name)<EOL><DEDENT>else:<EOL><INDENT>raise SchemaParseException('<STR_LIT>' % field)<EOL><DEDENT>field_objects.append(new_field)<EOL><DEDENT>return field_objects<EOL>
We're going to need to make message parameters too.