public void FindActivityCall(SyntaxNodeAnalysisContext context) { var semanticModel = context.SemanticModel; if (context.Node is InvocationExpressionSyntax invocationExpression && SyntaxNodeUtils.IsInsideFunction(semanticModel, invocationExpression) && IsActivityInvocation(invocationExpression)) { SetSemanticModel(context); if (!TryGetFunctionNameFromActivityInvocation(invocationExpression, out SyntaxNode functionNameNode, out string functionName)) { //Do not store ActivityFunctionCall if there is no function name return; } SyntaxNodeUtils.TryGetTypeArgumentNode((MemberAccessExpressionSyntax)invocationExpression.Expression, out SyntaxNode returnTypeNode); TryGetInputNodeFromCallActivityInvocation(invocationExpression, out SyntaxNode inputNode); calledFunctions.Add(new ActivityFunctionCall { Name = functionName, NameNode = functionNameNode, ParameterNode = inputNode, ReturnTypeNode = returnTypeNode, InvocationExpression = invocationExpression }); } }
private void AnalyzeDispatchAndFindMethodDeclarations(SyntaxNodeAnalysisContext context) { if (context.Node is MemberAccessExpressionSyntax expression && SyntaxNodeUtils.IsInsideFunction(expression)) { var name = expression.Name; if (name.ToString().StartsWith("DispatchAsync")) { if (SyntaxNodeUtils.TryGetMethodDeclaration(expression, out SyntaxNode methodDeclaration)) { methodDeclarations.Add(methodDeclaration); } if (SyntaxNodeUtils.TryGetTypeArgumentNode(expression, out SyntaxNode identifierNode)) { if (SyntaxNodeUtils.TryGetFunctionNameAndNode(expression, out SyntaxNode attributeArgument, out string functionName)) { var identifierName = identifierNode.ToString(); if (!string.Equals(identifierName, functionName)) { var diagnostic = Diagnostic.Create(Rule, identifierNode.GetLocation(), identifierNode, functionName); context.ReportDiagnostic(diagnostic); } } } } } }