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);
        }
示例#2
0
        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);
        }