Routine to validate that typ is a valid non-empty PEP484 type hint. If it is a forward reference, it will be 
    resolved 
    
    :param typ: 
    :param item_type: 
    :param attr_name: 
    :return:

def get_validated_attribute_type_info(typ, item_type, attr_name):
    """
    Routine to validate that typ is a valid non-empty PEP484 type hint. If it is a forward reference, it will be 
    resolved 
    
    :param typ: 
    :param item_type: 
    :param attr_name: 
    :return: 
    """
    if (typ is None) or (typ is Parameter.empty):
        raise TypeInformationRequiredError.create_for_object_attributes(item_type, attr_name, typ)

    # resolve forward references
    typ = resolve_forward_ref(typ)

    if not is_valid_pep484_type_hint(typ):
        raise InvalidPEP484TypeHint.create_for_object_attributes(item_type, attr_name, typ)

    return typ