def METHOD_NAME(self, type_: Union[StrawberryType, type]) -> str:
    type_ = eval_type(type_)
    if isinstance(type_, LazyType):
        name = type_.type_name
    elif isinstance(type_, EnumDefinition):
        name = type_.name
    elif isinstance(type_, StrawberryUnion):
        # TODO: test Generics with unnamed unions
        assert type_.graphql_name
        name = type_.graphql_name
    elif isinstance(type_, StrawberryList):
        name = self.METHOD_NAME(type_.of_type) + "List"
    elif isinstance(type_, StrawberryOptional):
        name = self.METHOD_NAME(type_.of_type) + "Optional"
    elif hasattr(type_, "_scalar_definition"):
        strawberry_type = type_._scalar_definition
        name = strawberry_type.name
    elif has_object_definition(type_):
        strawberry_type = type_.__strawberry_definition__
        if (
            strawberry_type.is_generic
            and not strawberry_type.is_specialized_generic
        ):
            types = type_.__args__  # type: ignore
            name = self.from_generic(strawberry_type, types)
        elif (
            strawberry_type.concrete_of
            and not strawberry_type.is_specialized_generic
        ):
            types = list(strawberry_type.type_var_map.values())
            name = self.from_generic(strawberry_type, types)
        else:
            name = strawberry_type.name
    else:
        name = type_.__name__
    return capitalize_first(name)