Exemplo n.º 1
0
        public UnityApiParameter AddParameter(string name, ApiType type, string description = null)
        {
            var parmaeter = new UnityApiParameter(name, type, description);

            myParameters.Add(parmaeter);
            return(parmaeter);
        }
Exemplo n.º 2
0
        public void UpdateParameterIfExists(string name, UnityApiParameter newParameter)
        {
            var parameter = myParameters.SingleOrDefault(p => p.Name == name) ??
                            myParameters.SingleOrDefault(p => p.Name == newParameter.Name);

            parameter?.Update(newParameter, Name);
        }
Exemplo n.º 3
0
        public void Update(UnityApiParameter newParameter, string functionName)
        {
            // E.g. 2018.2 removed a UnityScript example for AssetProcessor.OnPostprocessSprites, so newer docs don't
            // have the proper parameter name. If the old one does, keep it.
            if (Name != newParameter.Name && !string.IsNullOrEmpty(newParameter.Name) && !newParameter.Name.StartsWith("arg"))
            {
                Name = newParameter.Name;
            }

            if (myDescription != newParameter.myDescription && !string.IsNullOrEmpty(newParameter.myDescription))
            {
                myDescription = newParameter.myDescription;
            }

            if (Type.FullName != newParameter.Type.FullName)
            {
                throw new InvalidOperationException($"Parameter type differences for parameter {Name}! {Type.FullName} {newParameter.Type.FullName}");
            }

            if (Type.IsArray != newParameter.Type.IsArray || Type.IsByRef != newParameter.Type.IsByRef)
            {
                Console.WriteLine("WARNING: Parameter `{2}` of function `{3}` type changed: was {0} now {1}", Type, newParameter.Type, Name, functionName);
                Type = newParameter.Type;
            }
        }
Exemplo n.º 4
0
 public bool IsEquivalent(UnityApiParameter other)
 {
     if (myDescription != other.myDescription && !string.IsNullOrEmpty(other.myDescription))
     {
         return(false);
     }
     return(Equals(Type, other.Type));
 }
Exemplo n.º 5
0
        private static void FixDataFromIncorrectDocs(UnityApi unityApi, TypeResolver typeResolver)
        {
            // Documentation doesn't state that it's static, or has wrong types
            Console.WriteLine("Fixing incorrect documentation");

            var type = unityApi.FindType("AssetModificationProcessor");

            if (type != null)
            {
                // Not part of the actual documentation
                foreach (var function in type.FindEventFunctions("IsOpenForEdit"))
                {
                    function.SetIsStatic();
                    function.SetReturnType(ApiType.Bool);
                    var newParameter = new UnityApiParameter("assetPath", ApiType.String, string.Empty);
                    function.UpdateParameter("arg1", newParameter);
                    newParameter = new UnityApiParameter("message", ApiType.StringByRef, string.Empty);
                    function.UpdateParameter("arg2", newParameter);
                }

                foreach (var function in type.FindEventFunctions("OnWillDeleteAsset"))
                {
                    function.SetIsStatic();
                    function.SetReturnType(typeResolver.CreateApiType("UnityEditor.AssetDeleteResult"));
                    var newParameter = new UnityApiParameter("assetPath", ApiType.String, string.Empty);
                    function.UpdateParameter("arg1", newParameter);
                    newParameter = new UnityApiParameter("options", new ApiType("UnityEditor.RemoveAssetOptions"), string.Empty);
                    function.UpdateParameter("arg2", newParameter);
                }

                foreach (var function in type.FindEventFunctions("OnWillMoveAsset"))
                {
                    function.SetIsStatic();
                    function.SetReturnType(typeResolver.CreateApiType("UnityEditor.AssetMoveResult"));
                    var newParameter = new UnityApiParameter("sourcePath", ApiType.String, string.Empty);
                    function.UpdateParameter("arg1", newParameter);
                    newParameter = new UnityApiParameter("destinationPath", ApiType.String, string.Empty);
                    function.UpdateParameter("arg2", newParameter);
                }
            }

            type = unityApi.FindType("AssetPostprocessor");
            if (type != null)
            {
                // 2018.2 removes a UnityScript example which gave us the return type
                foreach (var function in type.FindEventFunctions("OnAssignMaterialModel"))
                {
                    function.SetReturnType(typeResolver.CreateApiType("UnityEngine.Material"));
                }
            }
        }
Exemplo n.º 6
0
        public void UpdateParameter(string name, UnityApiParameter newParameter)
        {
            var parameter = myParameters.SingleOrDefault(p => p.Name == name);

            if (parameter == null)
            {
                parameter = myParameters.SingleOrDefault(p => p.Name == newParameter.Name);
            }
            if (parameter == null)
            {
                throw new InvalidOperationException($"Cannot update parameter {name}");
            }
            parameter.Update(newParameter, Name);
        }
Exemplo n.º 7
0
        private static void Fixup(UnityApi unityApi)
        {
            // Documentation doesn't state that it's static, or has wrong types
            Console.WriteLine("Fixing incorrect documentation");

            var type = unityApi.FindType("AssetModificationProcessor");

            if (type != null)
            {
                // Not part of the actual documentation
                foreach (var function in type.FindEventFunctions("IsOpenForEdit"))
                {
                    function.SetIsStatic();
                    function.SetReturnType(ApiType.Bool);
                    var newParameter = new UnityApiParameter("assetPath", ApiType.String, string.Empty);
                    function.UpdateParameter("arg1", newParameter);
                    newParameter = new UnityApiParameter("message", ApiType.StringByRef, string.Empty);
                    function.UpdateParameter("arg2", newParameter);
                }

                foreach (var function in type.FindEventFunctions("OnWillCreateAsset"))
                {
                    function.SetIsStatic();
                    var newParameter = new UnityApiParameter("assetPath", ApiType.String, string.Empty);
                    function.UpdateParameter("arg", newParameter);
                }

                foreach (var function in type.FindEventFunctions("OnWillDeleteAsset"))
                {
                    function.SetIsStatic();
                    function.SetReturnType(new ApiType("UnityEditor.AssetDeleteResult"));
                    var newParameter = new UnityApiParameter("assetPath", ApiType.String, string.Empty);
                    function.UpdateParameter("arg1", newParameter);
                    newParameter = new UnityApiParameter("options", new ApiType("UnityEditor.RemoveAssetOptions"), string.Empty);
                    function.UpdateParameter("arg2", newParameter);
                }

                foreach (var function in type.FindEventFunctions("OnWillMoveAsset"))
                {
                    function.SetIsStatic();
                    function.SetReturnType(new ApiType("UnityEditor.AssetMoveResult"));
                    var newParameter = new UnityApiParameter("fromPath", ApiType.String, string.Empty);
                    function.UpdateParameter("arg1", newParameter);
                    newParameter = new UnityApiParameter("toPath", ApiType.String, string.Empty);
                    function.UpdateParameter("arg2", newParameter);
                }
            }
        }
Exemplo n.º 8
0
        public void Update(UnityApiParameter newParameter)
        {
            if (myName != newParameter.myName && !string.IsNullOrEmpty(newParameter.myName))
            {
                myName = newParameter.myName;
            }

            if (myDescription != newParameter.myDescription && !string.IsNullOrEmpty(newParameter.myDescription))
            {
                myDescription = newParameter.myDescription;
            }

            if (myType.FullName != newParameter.myType.FullName)
            {
                throw new InvalidOperationException($"Parameter type differences for parameter {myName}! {myType.FullName} {newParameter.myType.FullName}");
            }
        }
Exemplo n.º 9
0
        public static UnityApiParameter ImportFrom(XElement parameter)
        {
            var typeName       = parameter.Attribute("type").Value;
            var isArray        = bool.Parse(parameter.Attribute("array").Value);
            var byRefAttribute = parameter.Attribute("byRef");
            var isByRef        = byRefAttribute != null && bool.Parse(byRefAttribute.Value);
            var name           = parameter.Attribute("name").Value;
            var justification  = parameter.Attribute("justification")?.Value;
            var isOptional     = justification != null && bool.Parse(parameter.Attribute("optional").Value);
            var description    = parameter.Attribute("description")?.Value;
            var apiType        = new ApiType(typeName + (isArray ? "[]" : string.Empty) + (isByRef ? "&" : string.Empty));
            var p = new UnityApiParameter(name, apiType, description);

            if (isOptional)
            {
                p.SetOptional(justification);
            }
            return(p);
        }
Exemplo n.º 10
0
        public void Update(UnityApiParameter newParameter, string functionName)
        {
            if (Name != newParameter.Name && !string.IsNullOrEmpty(newParameter.Name))
            {
                Name = newParameter.Name;
            }

            if (myDescription != newParameter.myDescription && !string.IsNullOrEmpty(newParameter.myDescription))
            {
                myDescription = newParameter.myDescription;
            }

            if (myType.FullName != newParameter.myType.FullName)
            {
                throw new InvalidOperationException($"Parameter type differences for parameter {Name}! {myType.FullName} {newParameter.myType.FullName}");
            }

            if (myType.IsArray != newParameter.myType.IsArray || myType.IsByRef != newParameter.myType.IsByRef)
            {
                Console.WriteLine("WARNING: Parameter `{2}` of function `{3}` type changed: was {0} now {1}", myType, newParameter.myType, Name, functionName);
                myType = newParameter.myType;
            }
        }
Exemplo n.º 11
0
        public static UnityApiEventFunction ImportFrom(XElement message, HasVersionRange versions)
        {
            var name                  = message.Attribute("name").Value;
            var isStatic              = bool.Parse(message.Attribute("static").Value);
            var coroutineAttribute    = message.Attribute("coroutine");
            var isCoroutine           = coroutineAttribute != null && bool.Parse(coroutineAttribute.Value);
            var description           = message.Attribute("description")?.Value;
            var path                  = message.Attribute("path")?.Value;
            var undocumentedAttribute = message.Attribute("undocumented");
            var isUndocumented        = undocumentedAttribute != null && bool.Parse(undocumentedAttribute.Value);
            var returns               = message.Descendants("returns").First();
            var type                  = returns.Attribute("type").Value;
            var isArray               = bool.Parse(returns.Attribute("array").Value);
            var returnType            = new ApiType(type + (isArray ? "[]" : string.Empty));
            var function              = new UnityApiEventFunction(name, isStatic, isCoroutine, returnType, new Version(int.MaxValue, 0), description,
                                                                  path, isUndocumented);

            function.ImportVersionRange(message, versions);
            foreach (var parameter in message.Descendants("parameter"))
            {
                function.myParameters.Add(UnityApiParameter.ImportFrom(parameter));
            }
            return(function);
        }
Exemplo n.º 12
0
        public void UpdateParameter(string name, UnityApiParameter newParameter)
        {
            var parameter = GetParameter(name);

            parameter.Update(newParameter, Name);
        }
Exemplo n.º 13
0
        public void Update(UnityApiParameter newParameter)
        {
            if (myName != newParameter.myName && !string.IsNullOrEmpty(newParameter.myName))
            {
                myName = newParameter.myName;
            }

            if (myDescription != newParameter.myDescription && !string.IsNullOrEmpty(newParameter.myDescription))
            {
                myDescription = newParameter.myDescription;
            }

            if (myType.FullName != newParameter.myType.FullName)
                throw new InvalidOperationException($"Parameter type differences for parameter {myName}! {myType.FullName} {newParameter.myType.FullName}");
        }
Exemplo n.º 14
0
 public UnityApiParameter AddParameter(string name, ApiType type, string description = null)
 {
     var parmaeter = new UnityApiParameter(name, type, description);
     myParameters.Add(parmaeter);
     return parmaeter;
 }