public static JavaPackage[] Parse(XElement metadataElement) { return(metadataElement.Elements("package") .Select(xPackage => new JavaPackage { Name = xPackage.Attribute("name").Value, Types = xPackage.Elements() .Where(xType => JavaType.IsValid(xType.Name.LocalName)) .Select(xType => new JavaType { Name = xType.Attribute("name").Value, Kind = xType.Name.LocalName, Visibility = xType.Attribute("visibility").Value, Members = xType.Elements() .Where(xMember => JavaMember.IsValid(xMember.Name.LocalName)) .Select(xMember => new JavaMember { Name = xMember.Attribute("name").Value, Kind = xMember.Name.LocalName, Visibility = xMember.Attribute("visibility").Value, Parameters = xMember.Elements("parameter") .Select(xParameter => new JavaParameter { Name = xParameter.Attribute("name").Value, Type = xParameter.Attribute("type").Value }) .ToArray() }) .ToArray() }) .ToArray() }) .ToArray()); }