public static bool IsTypeAwaitable(Type type, out CoercedAwaitableInfo info) { if (AwaitableInfo.IsTypeAwaitable(type, out var directlyAwaitableInfo)) { info = new CoercedAwaitableInfo(directlyAwaitableInfo); return(true); } info = default(CoercedAwaitableInfo); return(false); }
public NonEscapedString MethodEscaped(MethodInfo method) { var @public = WrapKeyword("public"); var async = string.Empty; string @return; var isAwaitable = CoercedAwaitableInfo.IsTypeAwaitable(method.ReturnType, out var coercedAwaitableInfo); if (isAwaitable) { async = WrapKeyword("async"); var asyncResultType = coercedAwaitableInfo.AwaitableInfo.ResultType; @return = WrapType("Task") + WrapIdentifier("<") + WrapType(asyncResultType) + WrapIdentifier(">"); } else { @return = WrapType(method.ReturnType); } var name = method.Name; string paramType = null; string paramName = null; var @params = method.GetParameters(); if (@params.Length == 1) { var firstParam = @params[0]; var firstParamType = firstParam.ParameterType; paramType = WrapType(firstParamType); paramName = firstParam.Name; } var paramString = paramType == null ? "();" : $"({paramType} {paramName});"; var outputString = @public + " " + (string.IsNullOrEmpty(async) ? "" : async + " ") + @return + " " + name + paramString; return(new NonEscapedString(outputString)); }