private static void AnalyzeAttributeClassName(SyntaxNodeAnalysisContext context)
        {
            var attributeExpression = context.Node as AttributeSyntax;

            if (attributeExpression != null && attributeExpression.ChildNodes().First().ToString() == "EntityTrigger")
            {
                if (SyntaxNodeUtils.TryGetFunctionAttribute(attributeExpression, out SyntaxNode functionAttribute))
                {
                    if (SyntaxNodeUtils.TryGetFunctionName(functionAttribute, out SyntaxNode attributeArgument))
                    {
                        var functionName = attributeArgument.ToString().Trim('"');
                        if (SyntaxNodeUtils.TryGetClassSymbol(attributeExpression, context.SemanticModel, out INamedTypeSymbol classSymbol))
                        {
                            var className = classSymbol.Name.ToString();

                            if (!ClassNameMatchesFunctionName(classSymbol, functionName))
                            {
                                var diagnosticClassName = Diagnostic.Create(Rule, classSymbol.Locations[0], className, functionName);
                                var diagnosticAttribute = Diagnostic.Create(Rule, attributeArgument.GetLocation(), className, functionName);

                                context.ReportDiagnostic(diagnosticClassName);
                                context.ReportDiagnostic(diagnosticAttribute);
                            }
                        }
                    }
                }
            }
        }
Example #2
0
        public void FindActivities(SyntaxNodeAnalysisContext context)
        {
            var attributeExpression = context.Node as AttributeSyntax;

            if (attributeExpression != null && attributeExpression.ChildNodes().First().ToString() == "ActivityTrigger")
            {
                if (SyntaxNodeUtils.TryGetFunctionAttribute(attributeExpression, out SyntaxNode functionAttribute))
                {
                    if (SyntaxNodeUtils.TryGetFunctionName(functionAttribute, out SyntaxNode attributeArgument))
                    {
                        var functionName = attributeArgument.ToString().Trim('"');
                        if (SyntaxNodeUtils.TryGetParameterNodeNextToAttribute(attributeExpression, context, out SyntaxNode inputTypeNode))
                        {
                            ITypeSymbol inputType = context.SemanticModel.GetTypeInfo(inputTypeNode).Type;
                            if (inputType.ToString().Equals("Microsoft.Azure.WebJobs.IDurableActivityContext") || inputType.ToString().Equals("Microsoft.Azure.WebJobs.DurableActivityContext"))
                            {
                                if (!TryGetInputTypeFromDurableContextCall(out inputType, context, attributeExpression))
                                {
                                    return;
                                }
                            }

                            if (SyntaxNodeUtils.TryGetReturnType(attributeExpression, context, out ITypeSymbol returnType))
                            {
                                availableFunctions.Add(new ActivityFunctionDefinition
                                {
                                    FunctionName = functionName,
                                    InputType    = GetQualifiedTypeName(inputType),
                                    ReturnType   = GetQualifiedTypeName(returnType)
                                });
                            }
                        }
                    }
                }
            }
        }