public static async Task <IEnumerable <MemberDeclarationSyntax> > CreateMethodDeclarations(string controllerName, SyntaxNode wcfUnit, IEnumerable <string> wcfMethodNames, bool isAsmx) { // create new web api methods from filtered list of wcf methods var wcfMethods = wcfUnit .DescendantNodes() .OfType <MethodDeclarationSyntax>() .Where(wcfMethod => wcfMethodNames.Contains(wcfMethod.Identifier.ValueText)) .ToList(); // create members including methods and nested classes var wcfClassName = wcfUnit .DescendantNodes() .OfType <ClassDeclarationSyntax>() .First() .Identifier .ValueText; // build unique method name mappings if any methods (i.e. overload) have duplicate names var namesMap = DuplicateMethodNamesGenerator.CreateMappings(wcfMethods); var methodsTasks = wcfMethods .Select(async wcfMethod => await CreateMethods(controllerName, wcfMethod, wcfClassName, namesMap, isAsmx)) .ToList(); var methods = (await Task.WhenAll(methodsTasks)) .SelectMany(method => method) .ToList(); return(methods); }
private static MethodDeclarationSyntax FindServiceGenMethod(MethodDeclarationSyntax wcfMethod, IEnumerable <MethodDeclarationSyntax> wcfMethods, IEnumerable <MethodDeclarationSyntax> serviceGenMethods) { var wcfMethodName = wcfMethod.Identifier.ValueText; var wcfParameters = wcfMethod.ParameterList.Parameters; // need to account for overload methods (duplicate) var duplicateMethodNamesMap = DuplicateMethodNamesGenerator.CreateMappings(wcfMethods); var serviceMethodName = DuplicateMethodNamesGenerator.TransformMethodNameIfDuplicate(duplicateMethodNamesMap, wcfMethodName, wcfParameters); var serviceGenMethod = serviceGenMethods.SingleOrDefault(serviceMethod => { var name = serviceMethod.Identifier.ValueText; return(name == serviceMethodName); }); return(serviceGenMethod); }