Ejemplo n.º 1
0
        public XmlClassGen(XmlElement pkg, XmlElement elem)
            : base(new XmlGenBaseSupport(pkg, elem))              //FIXME: should not be xml specific
        {
            is_abstract = elem.XGetAttribute("abstract") == "true";
            is_final    = elem.XGetAttribute("final") == "true";
            base_type   = elem.XGetAttribute("extends");
            foreach (XmlNode node in elem.ChildNodes)
            {
                XmlElement child = node as XmlElement;
                if (child == null)
                {
                    continue;
                }
                switch (node.Name)
                {
                case "implements":
                    string iname = child.XGetAttribute("name-generic-aware");
                    iname = iname.Length > 0 ? iname : child.XGetAttribute("name");
                    AddInterface(iname);
                    break;

                case "method":
                    var synthetic = child.GetAttribute("synthetic") == "true";
                    var finalizer = child.GetAttribute("name") == "finalize" &&
                                    child.GetAttribute("jni-signature") == "()V";
                    if (!(synthetic || finalizer))
                    {
                        AddMethod(new XmlMethod(this, child));
                    }
                    break;

                case "constructor":
                    Ctors.Add(new XmlCtor(this, child));
                    break;

                case "field":
                    AddField(new XmlField(child));
                    break;

                case "typeParameters":
                    break;                     // handled at GenBaseSupport

                default:
                    Report.Warning(0, Report.WarningClassGen + 1, "unexpected class child {0}.", node.Name);
                    break;
                }
            }
        }
Ejemplo n.º 2
0
        public ManagedClassGen(TypeDefinition t)
            : base(new ManagedGenBaseSupport(t))
        {
            this.t = t;
            foreach (var ifaceImpl in t.Interfaces)
            {
                var iface = ifaceImpl.InterfaceType;
                var def   = ifaceImpl.InterfaceType.Resolve();
                if (def != null && def.IsNotPublic)
                {
                    continue;
                }
                AddInterface(iface.FullNameCorrected());
            }
            bool implements_charsequence = t.Interfaces.Any(it => it.InterfaceType.FullName == "Java.Lang.CharSequence");

            foreach (var m in t.Methods)
            {
                if (m.IsPrivate || m.IsAssembly || !m.CustomAttributes.Any(ca => ca.AttributeType.FullNameCorrected() == "Android.Runtime.RegisterAttribute"))
                {
                    continue;
                }
                if (implements_charsequence && t.Methods.Any(mm => mm.Name == m.Name + "Formatted"))
                {
                    continue;
                }
                if (m.IsConstructor)
                {
                    Ctors.Add(new ManagedCtor(this, m));
                }
                else
                {
                    AddMethod(new ManagedMethod(this, m));
                }
            }
            foreach (var f in t.Fields)
            {
                if (!f.IsPrivate && !f.CustomAttributes.Any(ca => ca.AttributeType.FullNameCorrected() == "Android.Runtime.RegisterAttribute"))
                {
                    AddField(new ManagedField(f));
                }
            }
            for (nominal_base_type = t.BaseType; nominal_base_type != null && (nominal_base_type.HasGenericParameters || nominal_base_type.IsGenericInstance); nominal_base_type = nominal_base_type.Resolve().BaseType)
            {
                ;                 // iterate up to non-generic type, at worst System.Object.
            }
        }
Ejemplo n.º 3
0
        public XmlClassGen(XElement pkg, XElement elem)
            : base(new XmlGenBaseSupport(pkg, elem))              //FIXME: should not be xml specific
        {
            is_abstract = elem.XGetAttribute("abstract") == "true";
            is_final    = elem.XGetAttribute("final") == "true";
            base_type   = elem.XGetAttribute("extends");
            foreach (var child in elem.Elements())
            {
                switch (child.Name.LocalName)
                {
                case "implements":
                    string iname = child.XGetAttribute("name-generic-aware");
                    iname = iname.Length > 0 ? iname : child.XGetAttribute("name");
                    AddInterface(iname);
                    break;

                case "method":
                    AddMethod(new XmlMethod(this, child));
                    break;

                case "constructor":
                    Ctors.Add(new XmlCtor(this, child));
                    break;

                case "field":
                    AddField(new XmlField(child));
                    break;

                case "typeParameters":
                    break;                     // handled at GenBaseSupport

                default:
                    Report.Warning(0, Report.WarningClassGen + 1, "unexpected class child {0}.", child.Name);
                    break;
                }
            }
        }