Beispiel #1
0
        private StringBuilder GenerateFunctionDocumentation(TypeDefFunction typeDefFunction)
        {
            //When no docs exist
            if (typeDefFunction.ReturnType.NativeType.Count <= 1 &&
                string.IsNullOrEmpty(typeDefFunction.Description) &&
                typeDefFunction.Parameters.All(p => string.IsNullOrEmpty(p.Description) && string.IsNullOrEmpty(typeDefFunction.ReturnType.Description)))
            {
                return(new StringBuilder(string.Empty));
            }

            StringBuilder result = new StringBuilder($"\t\t/// <summary>\n");

            if (!string.IsNullOrEmpty(typeDefFunction.Description))
            {
                string[] descriptionLines = typeDefFunction.Description.Split("\n");
                foreach (string descriptionLine in descriptionLines)
                {
                    string sanitizedDescriptionLine = descriptionLine.Replace("/*", string.Empty).Replace("*/", string.Empty).Trim();
                    result.Append($"\t\t/// {sanitizedDescriptionLine}\n");
                }
            }
            result.Append("\t\t/// </summary>\n");

            //Add @remarks in the future?
            foreach (var parameter in typeDefFunction.Parameters)
            {
                if (!string.IsNullOrEmpty(parameter.Description))
                {
                    result.Append($"\t\t/// <param name=\"{GetFixedTypeDefParameterName(parameter.Name)}\">{parameter.Description}</param>\n");
                }
            }
            //For now build return doc with return type because we dont have strong typed return value for natives returning arrays currently..
            //if (!string.IsNullOrEmpty(typeDefFunction.ReturnType.Description))
            //{
            //    result.Append($"\t\t/// <returns>{typeDefFunction.ReturnType.Description}</returns>\n");
            //}
            string returnTypeForTyping = string.Empty;

            if (typeDefFunction.ReturnType.NativeType.Count > 1)
            {
                returnTypeForTyping = "Array<";
                for (int i = 0; i < typeDefFunction.ReturnType.NativeType.Count; i++)
                {
                    returnTypeForTyping += new NativeTypeToCSharpTypingConverter().Convert(null, typeDefFunction.ReturnType.NativeType[i], false);
                    if (i != typeDefFunction.ReturnType.NativeType.Count - 1)
                    {
                        returnTypeForTyping += ", ";
                    }
                }
                returnTypeForTyping += ">";
            }
            if (!string.IsNullOrEmpty(typeDefFunction.ReturnType.Description) || !string.IsNullOrEmpty(returnTypeForTyping))
            {
                var returnDescription = $"{returnTypeForTyping} {typeDefFunction.ReturnType.Description}".Trim();
                result.Append($"\t\t/// <returns>{returnDescription}</returns>\n");
            }
            return(result);
        }
Beispiel #2
0
        private StringBuilder GenerateFunction(TypeDefFunction typeDefFunction)
        {
            StringBuilder result = new StringBuilder(string.Empty);

            if (_generateDocumentation)
            {
                result.Append(GenerateFunctionDocumentation(typeDefFunction));
            }
            var fixedTypeDefName = GetFixedTypeDefFunctionName(typeDefFunction.Name);
            var cSharpReturnType = new NativeReturnTypeToCSharpTypingConverter().Convert(null, typeDefFunction.ReturnType.NativeType);

            result.Append($"\t\tpublic {cSharpReturnType} {typeDefFunction.Name.FirstCharToUpper()}(");
            foreach (var parameter in typeDefFunction.Parameters)
            {
                result.Append($"{new NativeTypeToCSharpTypingConverter().Convert(null, parameter.NativeType, false)} {GetFixedTypeDefParameterName(parameter.Name)}");
                if (typeDefFunction.Parameters.Last() != parameter)
                {
                    result.Append(", ");
                }
            }
            result.Append($")\n\t\t{{\n");
            result.Append($"\t\t\tif ({fixedTypeDefName} == null) {fixedTypeDefName} = (Function) native.GetObjectProperty(\"{typeDefFunction.Name}\");\n");
            if (typeDefFunction.ReturnType.Name != "void")
            {
                if (typeDefFunction.ReturnType.Name == "any")
                {
                    result.Append($"\t\t\treturn {fixedTypeDefName}.Call(native");
                    GenerateCallParameters(result, typeDefFunction);
                }
                else if (typeDefFunction.ReturnType.NativeType.Count > 1)
                {
                    result.Append($"\t\t\tvar results = (Array) {fixedTypeDefName}.Call(native");
                    GenerateCallParameters(result, typeDefFunction);
                    var returnTypeForTyping = "\t\t\treturn (";
                    for (var i = 0; i < typeDefFunction.ReturnType.NativeType.Count; i++)
                    {
                        var tupleReturnType       = typeDefFunction.ReturnType.NativeType[i];
                        var cSharpTupleReturnType =
                            new NativeTypeToCSharpTypingConverter().Convert(null, tupleReturnType, false);
                        returnTypeForTyping += TransformReturnValue(cSharpTupleReturnType, $"results[{i}]");
                        if (i != typeDefFunction.ReturnType.NativeType.Count - 1)
                        {
                            returnTypeForTyping += ", ";
                        }
                    }
                    returnTypeForTyping += ");\n";
                    result.Append(returnTypeForTyping);
                }
                else
                {
                    var returnValue = new StringBuilder();
                    returnValue.Append($"{fixedTypeDefName}.Call(native");
                    GenerateCallParameters(returnValue, typeDefFunction, false);
                    var transformedResult = TransformReturnValue(cSharpReturnType, returnValue.ToString());
                    result.Append($"\t\t\treturn {transformedResult};\n");
                }
            }
            else
            {
                result.Append($"\t\t\t{fixedTypeDefName}.Call(native");
                GenerateCallParameters(result, typeDefFunction);
            }

            result.Append($"\t\t}}\n");

            return(result);
        }