def _MakeFieldDescriptor(self, field_proto, message_name, index,<EOL>is_extension=False):
if message_name:<EOL><INDENT>full_name = '<STR_LIT:.>'.join((message_name, field_proto.name))<EOL><DEDENT>else:<EOL><INDENT>full_name = field_proto.name<EOL><DEDENT>return descriptor.FieldDescriptor(<EOL>name=field_proto.name,<EOL>full_name=full_name,<EOL>index=index,<EOL>number=field_proto.number,<EOL>type=field_proto.type,<EOL>cpp_type=None,<EOL>message_type=None,<EOL>enum_type=None,<EOL>containing_type=None,<EOL>label=field_proto.label,<EOL>has_default_value=False,<EOL>default_value=None,<EOL>is_extension=is_extension,<EOL>extension_scope=None,<EOL>options=field_proto.options)<EOL>
Creates a field descriptor from a FieldDescriptorProto.

        For message and enum type fields, this method will do a look up
        in the pool for the appropriate descriptor for that type. If it
        is unavailable, it will fall back to the _source function to
        create it. If this type is still unavailable, construction will
        fail.

        Args:
          field_proto: The proto describing the field.
          message_name: The name of the containing message.
          index: Index of the field
          is_extension: Indication that this field is for an extension.

        Returns:
          An initialized FieldDescriptor object