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;
}