public DelegateType get_handler_type() { var type_sym = (ObjectTypeSymbol)signal_symbol.parent_symbol; var sender_type = SemanticAnalyzer.get_data_type_for_symbol(type_sym); var result = new DelegateType(signal_symbol.get_delegate(sender_type, this)); result.value_owned = true; if (result.delegate_symbol.get_type_parameters().Count > 0) { foreach (var type_param in type_sym.get_type_parameters()) { var type_arg = new GenericType(type_param); type_arg.value_owned = true; result.add_type_argument(type_arg); } } return(result); }