code: def _create_union_field(self, env, stone_field):
          
          annotations = [self._resolve_annotation_type(env, annotation)
                         for annotation in stone_field.annotations]
  
          if isinstance(stone_field, AstVoidField):
              api_type_field = UnionField(
                  name=stone_field.name, data_type=Void(), doc=stone_field.doc,
                  ast_node=stone_field)
          else:
              data_type = self._resolve_type(env, stone_field.type_ref)
              if isinstance(data_type, Void):
                  raise InvalidSpec('Union member %s cannot have Void '
                                    'type explicit, omit Void instead.' %
                                    quote(stone_field.name),
                                    stone_field.lineno, stone_field.path)
              api_type_field = UnionField(
                  name=stone_field.name, data_type=data_type,
                  doc=stone_field.doc, ast_node=stone_field)
          api_type_field.set_annotations(annotations)
          return api_type_field
docs: This function resolves symbols to objects that we've instantiated in
          the current environment. For example, a field with data type named
          "String" is pointed to a String() object.
  
          The caller needs to ensure that this stone_field is for a Union and not
          for a Struct.
  
          Returns:
              stone.data_type.UnionField: A field of a union.