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 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 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")
     });
 }