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(); }