private string GetMethodReturnTypeFromStyle(ReactMethod.MethodReturnStyle returnStyle) { switch (returnStyle) { case ReactMethod.MethodReturnStyle.Void: return("Void"); case ReactMethod.MethodReturnStyle.Task: case ReactMethod.MethodReturnStyle.Promise: return("Promise"); case ReactMethod.MethodReturnStyle.Callback: case ReactMethod.MethodReturnStyle.ReturnValue: return("Callback"); case ReactMethod.MethodReturnStyle.TwoCallbacks: return("TwoCallbacks"); default: throw new InvalidOperationException("Unexpected ReturnStyle"); } }
private void TestMethod(string methodDecl, ReactMethod.MethodReturnStyle returnStyle, bool isSynchronous) { TestCodeGen <IMethodSymbol>( methodDecl, (codeGen, symbol) => { var returnType = symbol.ReturnType; var parameters = new List <IParameterSymbol>(symbol.Parameters); switch (returnStyle) { case ReactMethod.MethodReturnStyle.Promise: case ReactMethod.MethodReturnStyle.Callback: returnType = ((INamedTypeSymbol)parameters[parameters.Count - 1].Type).TypeArguments[0]; parameters.RemoveAt(parameters.Count - 1); break; case ReactMethod.MethodReturnStyle.TwoCallbacks: returnType = ((INamedTypeSymbol)parameters[parameters.Count - 2].Type).TypeArguments[0]; parameters.RemoveRange(parameters.Count - 2, 2); break; case ReactMethod.MethodReturnStyle.Task: var namedReturnType = ((INamedTypeSymbol)returnType); returnType = namedReturnType.TypeArguments.Any() ? ((INamedTypeSymbol)returnType).TypeArguments[0] : codeGen.ReactTypes.SystemVoid; break; } return(codeGen.AddMethod(new ReactMethod( symbol, "MyMethod", isSynchronous: isSynchronous, returnStyle: returnStyle, effectiveReturnType: returnType, effectiveParameters: parameters))); }, lkgName: isSynchronous ? "Sync" : "Async"); }
private void TestMethod(string methodDecl, ReactMethod.MethodReturnStyle returnStyle) { TestMethod(methodDecl, returnStyle, isSynchronous: true); TestMethod(methodDecl, returnStyle, isSynchronous: false); }