public static FunctionDeclaration FuncFromXElement(XElement elem, ModuleDeclaration module, BaseDeclaration parent) { FunctionDeclaration decl = new FunctionDeclaration { Name = (string)elem.Attribute("name"), Module = module, Parent = parent, Access = TypeDeclaration.AccessibilityFromString((string)elem.Attribute("accessibility")), ReturnTypeName = Ex.ThrowOnNull((string)elem.Attribute("returnType"), "returnType"), IsProperty = elem.BoolAttribute("isProperty"), IsStatic = elem.BoolAttribute("isStatic"), IsFinal = elem.BoolAttribute("isFinal"), OperatorType = OperatorTypeFromElement((string)elem.Attribute("operatorKind")), HasThrows = elem.BoolAttribute("hasThrows"), IsDeprecated = elem.BoolAttribute("isDeprecated"), IsUnavailable = elem.BoolAttribute("isUnavailable"), IsOptional = elem.BoolAttribute("isOptional"), ObjCSelector = (string)elem.Attribute("objcSelector"), IsRequired = elem.BoolAttribute("isRequired"), IsConvenienceInit = elem.BoolAttribute("isConvenienceInit") }; decl.ParameterLists.AddRange(ParameterItem.ParameterListListFromXElement(elem.Element("parameterlists"))); if (decl.IsProperty && (decl.IsSetter || decl.IsSubscriptSetter)) { decl.ParameterLists [decl.ParameterLists.Count - 1] = MassageLastPropertySetterParameterList(decl.ParameterLists.Last()); } return(decl); }
public ShamDeclaration(string fullName, EntityType type) { fullUnrootedName = fullName; Tuple <string, string> modName = fullName.SplitModuleFromName(); unrootedName = modName.Item2; IsUnrooted = true; TypeKind kind = TypeKind.Unknown; switch (type) { case EntityType.Scalar: kind = TypeKind.Struct; break; case EntityType.Class: kind = TypeKind.Class; break; case EntityType.Struct: kind = TypeKind.Struct; break; case EntityType.Enum: case EntityType.TrivialEnum: kind = TypeKind.Enum; break; default: break; } Kind = kind; Module = new ModuleDeclaration(); Module.Name = modName.Item1; }
public static BaseDeclaration FromXElement(XElement elem, ModuleDeclaration module, BaseDeclaration parent) { var generics = GenericDeclaration.FromXElement(elem.Element("genericparameters")); BaseDeclaration decl = null; switch (elem.Name.ToString()) { case "func": decl = FunctionDeclaration.FuncFromXElement(elem, module, parent); break; case "typedeclaration": decl = TypeDeclaration.TypeFromXElement(elem, module, parent); break; case "property": decl = PropertyDeclaration.PropFromXElement(elem, module, parent); break; default: decl = new BaseDeclaration { Name = (string)elem.Attribute("name"), Access = TypeDeclaration.AccessibilityFromString((string)elem.Attribute("accessibility")) }; break; } decl.Generics.AddRange(generics); return(decl); }
public static ExtensionDeclaration FromXElement(XElement elem, ModuleDeclaration module) { var decl = new ExtensionDeclaration(); decl.Module = module; decl.ExtensionOnTypeName = (string)elem.Attribute("onType"); if (elem.Element("members") != null) { var members = from mem in elem.Element("members").Elements() select Member.FromXElement(mem, module, null) as Member; decl.Members.AddRange(members); foreach (var member in decl.Members) { member.ParentExtension = decl; } } if (elem.Element("inherits") != null) { var inherits = from inherit in elem.Element("inherits").Elements() select SwiftReflector.SwiftXmlReflection.Inheritance.FromXElement(inherit) as Inheritance; decl.Inheritance.AddRange(inherits); } return(decl); }
static IEnumerable <T> InnerFoo <T> (XElement parent, string innerName, ModuleDeclaration module, BaseDeclaration parDecl) where T : TypeDeclaration { var inner = parent.Elements(innerName).SelectMany(el => el.Elements("typedeclaration")); var innerList = inner.Select(elem => FromXElement(elem, module, parDecl)).ToList(); var innerCast = innerList.Cast <T> ().ToList(); return(innerCast); }
public static TypeDeclaration TypeFromXElement(XElement elem, ModuleDeclaration module, BaseDeclaration parent /* can be null */) { var decl = FromKind((string)elem.Attribute("kind")); bool isUnrooted = elem.Attribute("module") != null; decl.Module = module; decl.Parent = parent; if (isUnrooted) { decl.IsUnrooted = true; decl.fullUnrootedName = (string)elem.Attribute("name"); decl.unrootedName = decl.fullUnrootedName.NameWithoutModule(); decl.Name = decl.fullUnrootedName.Contains('.') ? decl.fullUnrootedName.Substring(decl.fullUnrootedName.LastIndexOf('.') + 1) : decl.fullUnrootedName; } else { decl.Name = (string)elem.Attribute("name"); } decl.Access = AccessibilityFromString((string)elem.Attribute("accessibility")); decl.IsObjC = elem.BoolAttribute("isObjC"); decl.IsFinal = elem.BoolAttribute("isFinal"); decl.IsDeprecated = elem.BoolAttribute("isDeprecated"); decl.IsUnavailable = elem.BoolAttribute("isUnavailable"); decl.InnerClasses.AddRange(InnerFoo <ClassDeclaration> (elem, "innerclasses", module, decl)); decl.InnerStructs.AddRange(InnerFoo <StructDeclaration> (elem, "innerstructs", module, decl)); decl.InnerEnums.AddRange(InnerFoo <EnumDeclaration> (elem, "innerenums", module, decl)); if (elem.Element("members") != null) { var members = from mem in elem.Element("members").Elements() select Member.FromXElement(mem, module, decl) as Member; decl.Members.AddRange(members); } if (elem.Element("inherits") != null) { var inherits = from inherit in elem.Element("inherits").Elements() select SwiftReflector.SwiftXmlReflection.Inheritance.FromXElement(inherit) as Inheritance; decl.Inheritance.AddRange(inherits); } EnumDeclaration edecl = decl as EnumDeclaration; if (edecl != null) { var enumElements = (from enumElement in elem.Element("elements").Elements() select new EnumElement((string)enumElement.Attribute("name"), (string)enumElement.Attribute("type"), (long?)enumElement.Attribute("intValue"))).ToList();; edecl.Elements.AddRange(enumElements); if (elem.Attribute("rawType") != null) { edecl.RawTypeName = (string)elem.Attribute("rawType"); } } return(decl); }
public ModuleDeclaration MakeUnrooted() { if (IsUnrooted) { return(this); } ModuleDeclaration unrooted = new ModuleDeclaration(); unrooted.IsUnrooted = true; unrooted.Name = Name; return(unrooted); }
public static PropertyDeclaration PropFromXElement(XElement elem, ModuleDeclaration module, BaseDeclaration parent) { return(new PropertyDeclaration { Name = (string)elem.Attribute("name"), Module = module, Parent = parent, Access = TypeDeclaration.AccessibilityFromString((string)elem.Attribute("accessibility")), TypeName = (string)elem.Attribute("type"), Storage = StorageKindFromString((string)elem.Attribute("storage")), IsStatic = elem.BoolAttribute("isStatic"), IsLet = elem.BoolAttribute("isLet"), IsDeprecated = elem.BoolAttribute("isDeprecated"), IsUnavailable = elem.BoolAttribute("isUnavailable"), IsOptional = elem.BoolAttribute("isOptional") }); }
public static List <ModuleDeclaration> FromXml(XDocument doc) { var xamreflect = doc.Element("xamreflect"); var version = xamreflect.DoubleAttribute("version"); if (version < kCurrentVersion || version >= kNextMajorVersion) { throw ErrorHelper.CreateError(ReflectorError.kReflectionErrorBase + 5, $"Unsupported xamreflect version {version}. Current is {kCurrentVersion}"); } try { List <ModuleDeclaration> modules = (from module in xamreflect.Descendants("module") select ModuleDeclaration.FromXElement(module)).ToList(); return(modules); } catch (Exception e) { throw ErrorHelper.CreateError(ReflectorError.kReflectionErrorBase + 6, $"Error while reading XML reflection information: {e.Message}"); } }
public static ModuleDeclaration FromXElement(XElement elem) { ModuleDeclaration decl = new ModuleDeclaration { Name = (string)elem.Attribute("name"), SwiftCompilerVersion = new Version((string)elem.Attribute("swiftVersion") ?? "3.1") }; // non extensions foreach (var child in elem.Elements()) { if (child.Name == "extension") { decl.Extensions.Add(ExtensionDeclaration.FromXElement(child, decl)); } else { decl.Declarations.Add(BaseDeclaration.FromXElement(child, decl, null)); } } return(decl); }