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; } } }
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. } }
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; } } }