Пример #1
0
        private static void GenerateMethod(Context context, OutputBuffer output, MethodDeclarationSyntax method, bool asStatic)
        {
            if (method.HasDocumentation())
            {
                output.AppendLine(method.GetDocumentation(output.GetIndent()));
            }

            output.Append($"public ");

            if (asStatic)
            {
                output.Append("static ");
            }

            output.Append($"{method.ReturnType} {method.Identifier}");

            if (method.TypeParameterList != null)
            {
                output.Append(method.TypeParameterList.ToString());
            }

            output.AppendLine(method.ParameterList.ToString());

            if (method.ConstraintClauses.Any())
            {
                output.AppendLine("\t" + method.ConstraintClauses.ToString());
            }

            output.AppendLine("{");

            if (method.ReturnType.ToString() != "void")
            {
                output.Append($"\tvar result = _js.Invoke(nameof({method.Identifier})");

                foreach (var parameter in method.ParameterList.Parameters)
                {
                    output.Append($", {parameter.Identifier}");
                }

                output.AppendLine(");");
                output.AppendLine();
                output.AppendLine("\tif (result == null)");
                output.AppendLine("\t\treturn null;");
                output.AppendLine();

                var returnType = method.ReturnType.ToString();

                if (returnType.EndsWith("?"))
                {
                    returnType = returnType.TrimEnd('?');
                }

                output.AppendLine($"\treturn JSObjectWrapperFactory.Create<{returnType}>(result);");
            }
            else
            {
                output.Append($"\t_js.Invoke(nameof({method.Identifier})");

                foreach (var parameter in method.ParameterList.Parameters)
                {
                    output.Append($", {parameter.Identifier}");
                }

                output.AppendLine(");");
            }

            output.AppendLine("}");
            output.AppendLine();
        }