Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 4
0
        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));
            }
        }
Ejemplo n.º 5
0
        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));
        }