public List <UnityType> LoadTypes(Version currentVersion) { var types = new List <UnityType>(); var ns = GetType().Namespace; using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(ns + @".api.xml")) { if (stream != null) { var document = new XmlDocument(); document.Load(stream); var apiNode = document.DocumentElement?.SelectSingleNode("/api"); Assertion.AssertNotNull(apiNode, "apiNode != null"); var minimumVersion = apiNode.Attributes?["minimumVersion"]?.Value; var maximumVersion = apiNode.Attributes?["maximumVersion"]?.Value; Assertion.Assert(minimumVersion != null && maximumVersion != null, "minimumVersion != null && maximumVersion != null"); var normaliser = new VersionNormaliser(Version.Parse(minimumVersion), Version.Parse(maximumVersion), currentVersion); var nodes = document.DocumentElement?.SelectNodes(@"/api/type"); Assertion.AssertNotNull(nodes, "nodes != null"); foreach (XmlNode type in nodes) { types.Add(CreateUnityType(type, normaliser)); } } } return(types); }
private UnityEventFunction CreateUnityMessage(XmlNode node, string typeName, VersionNormaliser normaliser) { var name = node.Attributes?["name"].Value ?? "Invalid"; var description = node.Attributes?["description"]?.Value; var isStatic = bool.Parse(node.Attributes?["static"]?.Value ?? "false"); var isUndocumented = bool.Parse(node.Attributes?["undocumented"]?.Value ?? "false"); var minimumVersion = normaliser.NormaliseMinimum(ParseVersionAttribute(node, "minimumVersion", "1.0")); var maximumVersion = normaliser.NormaliseMaximum(ParseVersionAttribute(node, "maximumVersion", "655356.0")); var parameters = EmptyArray <UnityEventFunctionParameter> .Instance; var parameterNodes = node.SelectNodes("parameters/parameter"); if (parameterNodes != null) { parameters = parameterNodes.OfType <XmlNode>().Select(LoadParameter).ToArray(); } var returnsArray = false; var returnType = PredefinedType.VOID_FQN; var returns = node.SelectSingleNode("returns"); if (returns != null) { returnsArray = bool.Parse(returns.Attributes?["array"].Value ?? "false"); var type = returns.Attributes?["type"]?.Value ?? "System.Void"; returnType = GetClrTypeName(type); } return(new UnityEventFunction(name, typeName, returnType, returnsArray, isStatic, description, isUndocumented, minimumVersion, maximumVersion, parameters)); }
public List<UnityType> LoadTypes(Version currentVersion) { var types = new List<UnityType>(); var ns = GetType().Namespace; using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(ns + @".api.xml")) { if (stream != null) { var document = new XmlDocument(); document.Load(stream); var apiNode = document.DocumentElement?.SelectSingleNode("/api"); Assertion.AssertNotNull(apiNode, "apiNode != null"); var minimumVersion = apiNode.Attributes?["minimumVersion"]?.Value; var maximumVersion = apiNode.Attributes?["maximumVersion"]?.Value; Assertion.Assert(minimumVersion != null && maximumVersion != null, "minimumVersion != null && maximumVersion != null"); var normaliser = new VersionNormaliser(Version.Parse(minimumVersion), Version.Parse(maximumVersion), currentVersion); var nodes = document.DocumentElement?.SelectNodes(@"/api/type"); Assertion.AssertNotNull(nodes, "nodes != null"); foreach (XmlNode type in nodes) types.Add(CreateUnityType(type, normaliser)); } } return types; }
private UnityType CreateUnityType(XmlNode type, VersionNormaliser normaliser) { var name = type.Attributes?["name"].Value; var ns = type.Attributes?["ns"].Value; var minimumVersion = normaliser.NormaliseMinimum(ParseVersionAttribute(type, "minimumVersion", "1.0")); var maximumVersion = normaliser.NormaliseMaximum(ParseVersionAttribute(type, "maximumVersion", "655356.0")); var typeName = GetClrTypeName($"{ns}.{name}"); var messageNodes = type.SelectNodes("message"); var messages = EmptyArray <UnityEventFunction> .Instance; if (messageNodes != null) { messages = messageNodes.OfType <XmlNode>().Select( node => CreateUnityMessage(node, typeName.GetFullNameFast(), normaliser)).OrderBy(m => m.Name).ToArray(); } return(new UnityType(typeName, messages, minimumVersion, maximumVersion)); }
private UnityType CreateUnityType(XmlNode type, VersionNormaliser normaliser) { var name = type.Attributes?["name"].Value; var ns = type.Attributes?["ns"].Value; var minimumVersion = normaliser.NormaliseMinimum(ParseVersionAttribute(type, "minimumVersion", "1.0")); var maximumVersion = normaliser.NormaliseMaximum(ParseVersionAttribute(type, "maximumVersion", "655356.0")); var typeName = GetClrTypeName($"{ns}.{name}"); var messageNodes = type.SelectNodes("message"); var messages = EmptyArray<UnityEventFunction>.Instance; if (messageNodes != null) { messages = messageNodes.OfType<XmlNode>().Select( node => CreateUnityMessage(node, typeName.GetFullNameFast(), normaliser)).OrderBy(m => m.Name).ToArray(); } return new UnityType(typeName, messages, minimumVersion, maximumVersion); }
private UnityEventFunction CreateUnityMessage(XmlNode node, string typeName, VersionNormaliser normaliser) { var name = node.Attributes?["name"].Value ?? "Invalid"; var description = node.Attributes?["description"]?.Value; var isStatic = bool.Parse(node.Attributes?["static"]?.Value ?? "false"); var isUndocumented = bool.Parse(node.Attributes?["undocumented"]?.Value ?? "false"); var minimumVersion = normaliser.NormaliseMinimum(ParseVersionAttribute(node, "minimumVersion", "1.0")); var maximumVersion = normaliser.NormaliseMaximum(ParseVersionAttribute(node, "maximumVersion", "655356.0")); var parameters = EmptyArray<UnityEventFunctionParameter>.Instance; var parameterNodes = node.SelectNodes("parameters/parameter"); if (parameterNodes != null) { parameters = parameterNodes.OfType<XmlNode>().Select(LoadParameter).ToArray(); } var returnsArray = false; var returnType = PredefinedType.VOID_FQN; var returns = node.SelectSingleNode("returns"); if (returns != null) { returnsArray = bool.Parse(returns.Attributes?["array"].Value ?? "false"); var type = returns.Attributes?["type"]?.Value ?? "System.Void"; returnType = GetClrTypeName(type); } return new UnityEventFunction(name, typeName, returnType, returnsArray, isStatic, description, isUndocumented, minimumVersion, maximumVersion, parameters); }