void AddConstructor(InterfaceGen iface, Method method, CodeGenerationOptions opt) { var ctor = new ConstructorWriter { Name = iface.GetArgsName(method), IsPublic = true }; if (method.IsEventHandlerWithHandledProperty) { ctor.Parameters.Add(new MethodParameterWriter("handled", TypeReferenceWriter.Bool)); ctor.Body.Add("this.handled = handled;"); } foreach (var p in method.Parameters) { if (p.IsSender) { continue; } ctor.Parameters.Add(new MethodParameterWriter(p.Name, new TypeReferenceWriter(opt.GetTypeReferenceName(p)))); ctor.Body.Add($"this.{opt.GetSafeIdentifier (p.Name)} = {opt.GetSafeIdentifier (p.Name)};"); } Constructors.Add(ctor); }
public InterfaceEventArgsClass(InterfaceGen iface, Method method) { Name = iface.GetArgsName(method); Inherits = "global::System.EventArgs"; IsPublic = true; IsPartial = true; UsePriorityOrder = true; Comments.Add($"// event args for {iface.JavaName}.{method.JavaName}"); if (method.IsEventHandlerWithHandledProperty) { Properties.Add(new HandledProperty()); } }
public InterfaceEventHandlerImplMethod(InterfaceGen iface, Method method, List <string> handlers, CodeGenerationOptions opt) { this.iface = iface; this.method = method; this.opt = opt; needs_sender = iface.NeedsSender; method_spec = iface.Methods.Count > 1 ? method.AdjustedName : string.Empty; args_name = iface.GetArgsName(method); handlers.Add(method_spec); Name = method.Name; ReturnType = new TypeReferenceWriter(opt.GetTypeReferenceName(method.RetVal)); IsPublic = true; this.AddMethodParameters(method.Parameters, opt); }
public static void AddInterfaceListenerEventOrProperty(TypeWriter tw, InterfaceGen iface, Method method, ClassGen target, string name, string connector_fmt, string add, string remove, CodeGenerationOptions opt) { if (method.EventName == string.Empty) { return; } var nameSpec = iface.Methods.Count > 1 ? method.AdjustedName : string.Empty; var idx = iface.FullName.LastIndexOf("."); var start = iface.Name.StartsWith("IOn") ? 3 : 1; var full_delegate_name = iface.FullName.Substring(0, idx + 1) + iface.Name.Substring(start, iface.Name.Length - start - 8) + nameSpec; if (method.IsSimpleEventHandler) { full_delegate_name = "EventHandler"; } else if (method.RetVal.IsVoid || method.IsEventHandlerWithHandledProperty) { full_delegate_name = "EventHandler<" + iface.FullName.Substring(0, idx + 1) + iface.GetArgsName(method) + ">"; } else { full_delegate_name += "Handler"; } if (method.RetVal.IsVoid || method.IsEventHandlerWithHandledProperty) { if (opt.GetSafeIdentifier(name) != name) { Report.LogCodedWarning(0, Report.WarningInvalidEventName2, method, iface.FullName, name); return; } else { var mt = target.Methods.Where(method => string.Compare(method.Name, connector_fmt, StringComparison.OrdinalIgnoreCase) == 0 && method.IsListenerConnector).FirstOrDefault(); var hasHandlerArgument = mt != null && mt.IsListenerConnector && mt.Parameters.Count == 2 && mt.Parameters [1].Type == "Android.OS.Handler"; tw.Events.Add(new InterfaceListenerEvent(iface, name, nameSpec, full_delegate_name, connector_fmt, add, remove, hasHandlerArgument, opt)); } } else { if (opt.GetSafeIdentifier(name) != name) { Report.LogCodedWarning(0, Report.WarningInvalidEventPropertyName, method, iface.FullName, name); return; } tw.Properties.Add(new InterfaceListenerPropertyImplementor(iface, name, opt)); tw.Properties.Add(new InterfaceListenerProperty(iface, name, nameSpec, method.AdjustedName, full_delegate_name, opt)); } }
void AddInterfaceEventHandler(InterfaceGen iface, CodeGenerationOptions opt, CodeGeneratorContext context) { if (!iface.IsListener) { return; } foreach (var method in iface.Methods.Where(m => m.EventName != string.Empty)) { if (method.RetVal.IsVoid || method.IsEventHandlerWithHandledProperty) { if (!method.IsSimpleEventHandler || method.IsEventHandlerWithHandledProperty) { var event_args_class = post_sibling_types.OfType <InterfaceEventArgsClass> ().SingleOrDefault(c => c.Name == iface.GetArgsName(method)); // Check if there's an existing EventArgs class to add to if (event_args_class is null) { event_args_class = new InterfaceEventArgsClass(iface, method); post_sibling_types.Add(event_args_class); } event_args_class.AddMembersFromMethod(iface, method, opt); } } else { var del = new DelegateWriter { Name = iface.GetEventDelegateName(method), Type = new TypeReferenceWriter(opt.GetTypeReferenceName(method.RetVal)), IsPublic = true }; SourceWriterExtensions.AddMethodParameters(del, method.Parameters, opt); post_sibling_types.Add(del); } } post_sibling_types.Add(new InterfaceEventHandlerImplClass(iface, opt, context)); }