XElement ToProviderElement(TypeDefinition type, string name) { var attr = ContentProviderAttribute.FromTypeDefinition(type); if (attr == null) { return(null); } IEnumerable <MetaDataAttribute> metadata = MetaDataAttribute.FromCustomAttributeProvider(type); IEnumerable <GrantUriPermissionAttribute> grants = GrantUriPermissionAttribute.FromTypeDefinition(type); IEnumerable <IntentFilterAttribute> intents = IntentFilterAttribute.FromTypeDefinition(type); XElement element = attr.ToElement(PackageName); if (element.Attribute(attName) == null) { element.Add(new XAttribute(attName, name)); } element.Add(metadata.Select(md => md.ToElement(PackageName))); element.Add(grants.Select(intent => intent.ToElement(PackageName))); element.Add(intents.Select(intent => intent.ToElement(PackageName))); return(element); }
XElement ToElement <TAttribute> (TypeDefinition type, string name, Func <TypeDefinition, TAttribute> parser, Func <TAttribute, XElement> toElement, Action <TAttribute, XElement> update) where TAttribute : class { TAttribute attr = parser(type); if (attr == null) { return(null); } IEnumerable <MetaDataAttribute> metadata = MetaDataAttribute.FromCustomAttributeProvider(type); IEnumerable <IntentFilterAttribute> intents = IntentFilterAttribute.FromTypeDefinition(type); XElement element = toElement(attr); if (element.Attribute(attName) == null) { element.Add(new XAttribute(attName, name)); } element.Add(metadata.Select(md => md.ToElement(PackageName))); element.Add(intents.Select(intent => intent.ToElement(PackageName))); if (update != null) { update(attr, element); } return(element); }