public Func GetCompilationUnitAction()

in src/CTA.Rules.Actions/ActionsLoader.cs [193:274]


        public Func<SyntaxGenerator, CompilationUnitSyntax, CompilationUnitSyntax> GetCompilationUnitAction(string name, dynamic value)
            => GetAction<Func<SyntaxGenerator, CompilationUnitSyntax, CompilationUnitSyntax>>
                (compilationUnitActions, compilationUnitObject, name, value);
        public Func<SyntaxGenerator, AttributeSyntax, AttributeSyntax> GetAttributeAction(string name, dynamic value) =>
            GetAction<Func<SyntaxGenerator, AttributeSyntax, AttributeSyntax>>
                (attributeActions, attributeObject, name, value);
        public Func<SyntaxGenerator, AttributeListSyntax, AttributeListSyntax> GetAttributeListAction(string name, dynamic value) =>
            GetAction<Func<SyntaxGenerator, AttributeListSyntax, AttributeListSyntax>>
                (attributeListActions, attributeListObject, name, value);
        public Func<SyntaxGenerator, ClassDeclarationSyntax, ClassDeclarationSyntax> GetClassAction(string name, dynamic value) =>
            GetAction<Func<SyntaxGenerator, ClassDeclarationSyntax, ClassDeclarationSyntax>>
                (classActions, classObject, name, value);
        public Func<SyntaxGenerator, InterfaceDeclarationSyntax, InterfaceDeclarationSyntax> GetInterfaceAction(string name, dynamic value) =>
            GetAction<Func<SyntaxGenerator, InterfaceDeclarationSyntax, InterfaceDeclarationSyntax>>
                (interfaceActions, interfaceObject, name, value);
        public Func<SyntaxGenerator, IdentifierNameSyntax, IdentifierNameSyntax> GetIdentifierNameAction(string name, dynamic value) =>
            GetAction<Func<SyntaxGenerator, IdentifierNameSyntax, IdentifierNameSyntax>>
                (identifierNameActions, identifierNameObject, name, value);
        public Func<SyntaxGenerator, InvocationExpressionSyntax, InvocationExpressionSyntax> GetInvocationExpressionAction(string name, dynamic value) =>
            GetAction<Func<SyntaxGenerator, InvocationExpressionSyntax, InvocationExpressionSyntax>>
                (invocationExpressionActions, invocationExpressionObject, name, value);
        public Func<SyntaxGenerator, SyntaxNode, SyntaxNode> GetExpressionAction(string name, dynamic value) =>
            GetAction<Func<SyntaxGenerator, SyntaxNode, SyntaxNode>>
                (expressionActions, expressionObject, name, value);
        public Func<SyntaxGenerator, MethodDeclarationSyntax, MethodDeclarationSyntax> GetMethodDeclarationAction(string name, dynamic value) =>
            GetAction<Func<SyntaxGenerator, MethodDeclarationSyntax, MethodDeclarationSyntax>>
                (methodDeclarationActions, methodDeclarationObject, name, value);
        public Func<SyntaxGenerator, NamespaceDeclarationSyntax, NamespaceDeclarationSyntax> GetNamespaceActions(string name, dynamic value) =>
            GetAction<Func<SyntaxGenerator, NamespaceDeclarationSyntax, NamespaceDeclarationSyntax>>
                (namespaceActions, namespaceObject, name, value);
        public Func<SyntaxGenerator, ObjectCreationExpressionSyntax, ExpressionSyntax> GetObjectCreationExpressionActions(string name, dynamic value) =>
            GetAction<Func<SyntaxGenerator, ObjectCreationExpressionSyntax, ExpressionSyntax>>
                (objectCreationExpressionActions, objectExpressionObject, name, value);
        public Func<string, ProjectType, string> GetProjectLevelActions(string name, dynamic value) =>
            GetAction<Func<string, ProjectType, string>>
                (projectLevelActions, projectLevelObject, name, value);
        public Func<string, ProjectType, List<string>, Dictionary<string, string>, List<string>, List<string>, string> GetProjectFileActions(string name, dynamic value) =>
            GetAction<Func<string, ProjectType, List<string>, Dictionary<string, string>, List<string>, List<string>, string>>
                (projectFileActions, projectFileObject, name, value);
        public Func<SyntaxGenerator, ElementAccessExpressionSyntax, ElementAccessExpressionSyntax> GetElementAccessExpressionActions(string name, dynamic value) =>
            GetAction<Func<SyntaxGenerator, ElementAccessExpressionSyntax, ElementAccessExpressionSyntax>>
                (elementAccessActions, elementAccessObject, name, value);
        public Func<SyntaxGenerator, SyntaxNode, SyntaxNode> GetMemberAccessExpressionActions(string name, dynamic value) =>
            GetAction<Func<SyntaxGenerator, SyntaxNode, SyntaxNode>>
                (memberAccessActions, memberAccessObject, name, value);

        /// <summary>
        /// Gets the action by invoking the methods that will create it
        /// </summary>
        /// <typeparam name="T">The type of the object</typeparam>
        /// <param name="actions">List of actions on the type T</param>
        /// <param name="invokeObject">The object that will be used to retrieve the action</param>
        /// <param name="name">Name of the action</param>
        /// <param name="value">Parameter(s) of the action</param>
        /// <returns></returns>
        private T GetAction<T>(List<MethodInfo> actions, object invokeObject, string name, dynamic value)
        {
            T val = default;
            try
            {
                string actionName = GetActionName(name);
                var method = actions.Where(m => m.Name == actionName).FirstOrDefault();
                if (method == null)
                {
                    LogHelper.LogDebug(string.Format("No such action {0}", actionName));
                }
                else
                {
                    var parameters = GetParameters(value, method);

                    if (parameters != null)
                    {
                        val = (T)method.Invoke(invokeObject, parameters);
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.LogError(ex, "Error while loading action {0}", name);
            }
            return val;
        }