public UnityApiParameter AddParameter(string name, ApiType type, string description = null) { var parmaeter = new UnityApiParameter(name, type, description); myParameters.Add(parmaeter); return(parmaeter); }
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); }
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; } }
public bool IsEquivalent(UnityApiParameter other) { if (myDescription != other.myDescription && !string.IsNullOrEmpty(other.myDescription)) { return(false); } return(Equals(Type, other.Type)); }
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")); } } }
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); }
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); } } }
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}"); } }
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); }
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; } }
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); }
public void UpdateParameter(string name, UnityApiParameter newParameter) { var parameter = GetParameter(name); parameter.Update(newParameter, Name); }
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}"); }
public UnityApiParameter AddParameter(string name, ApiType type, string description = null) { var parmaeter = new UnityApiParameter(name, type, description); myParameters.Add(parmaeter); return parmaeter; }