Ejemplo n.º 1
0
        public void FindEntityTriggers(SyntaxNodeAnalysisContext context)
        {
            var attribute = context.Node as AttributeSyntax;

            var semanticModel = context.SemanticModel;

            version = SyntaxNodeUtils.GetDurableVersion(semanticModel);

            if (AttributeMatchesVersionClientBinding(attribute))
            {
                if (SyntaxNodeUtils.TryGetParameterNodeNextToAttribute(attribute, context, out SyntaxNode parameterNode))
                {
                    var paramTypeName = parameterNode.ToString();
                    if (!ParameterTypeIsCorrectDurableType(parameterNode))
                    {
                        if (TryGetRuleFromVersion(out DiagnosticDescriptor rule))
                        {
                            var diagnostic = Diagnostic.Create(rule, parameterNode.GetLocation(), parameterNode);

                            context.ReportDiagnostic(diagnostic);
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
0
        public void FindActivityFunction(SyntaxNodeAnalysisContext context)
        {
            var attribute = context.Node as AttributeSyntax;

            if (SyntaxNodeUtils.IsActivityTriggerAttribute(attribute))
            {
                if (!SyntaxNodeUtils.TryGetFunctionName(context.SemanticModel, attribute, out string functionName))
                {
                    //Do not store ActivityFunctionDefinition if there is no function name
                    return;
                }

                if (!SyntaxNodeUtils.TryGetMethodReturnTypeNode(attribute, out SyntaxNode returnTypeNode))
                {
                    //Do not store ActivityFunctionDefinition if there is no return type
                    return;
                }

                SyntaxNodeUtils.TryGetParameterNodeNextToAttribute(context, attribute, out SyntaxNode parameterNode);

                availableFunctions.Add(new ActivityFunctionDefinition
                {
                    FunctionName   = functionName,
                    ParameterNode  = parameterNode,
                    ReturnTypeNode = returnTypeNode
                });
            }
        }
        public void FindActivityFunctionDefinition(SyntaxNodeAnalysisContext context)
        {
            var semanticModel = context.SemanticModel;

            if (context.Node is AttributeSyntax attribute &&
                SyntaxNodeUtils.IsActivityTriggerAttribute(attribute))
            {
                if (!SyntaxNodeUtils.TryGetFunctionName(semanticModel, attribute, out string functionName))
                {
                    //Do not store ActivityFunctionDefinition if there is no function name
                    return;
                }

                if (!SyntaxNodeUtils.TryGetMethodReturnTypeNode(attribute, out SyntaxNode returnTypeNode))
                {
                    //Do not store ActivityFunctionDefinition if there is no return type
                    return;
                }

                SyntaxNodeUtils.TryGetITypeSymbol(semanticModel, returnTypeNode, out ITypeSymbol returnType);

                SyntaxNodeUtils.TryGetParameterNodeNextToAttribute(attribute, out SyntaxNode parameterNode);

                TryGetDefinitionInputType(semanticModel, parameterNode, out ITypeSymbol inputType);

                availableFunctions.Add(new ActivityFunctionDefinition
                {
                    FunctionName   = functionName,
                    ParameterNode  = parameterNode,
                    InputType      = inputType,
                    ReturnTypeNode = returnTypeNode,
                    ReturnType     = returnType
                });
            }
        }
        private ITypeSymbol GetActivityFunctionInputTypeName(SyntaxNodeAnalysisContext context, AttributeSyntax attributeExpression)
        {
            if (SyntaxNodeUtils.TryGetParameterNodeNextToAttribute(context, attributeExpression, out SyntaxNode inputTypeNode))
            {
                var inputType = context.SemanticModel.GetTypeInfo(inputTypeNode).Type;
                if (inputType.ToString().Equals("Microsoft.Azure.WebJobs.IDurableActivityContext") || inputType.ToString().Equals("Microsoft.Azure.WebJobs.DurableActivityContext"))
                {
                    TryGetInputTypeFromDurableContextCall(context, attributeExpression, out inputType);
                }

                return(inputType);
            }

            return(null);
        }
        public void FindEntityTriggers(SyntaxNodeAnalysisContext context)
        {
            var attribute = context.Node as AttributeSyntax;

            if (SyntaxNodeUtils.IsEntityTriggerAttribute(attribute))
            {
                if (SyntaxNodeUtils.TryGetParameterNodeNextToAttribute(attribute, out SyntaxNode parameterNode))
                {
                    var paramTypeName = parameterNode.ToString();
                    if (!string.Equals(paramTypeName, "IDurableEntityContext"))
                    {
                        var diagnostic = Diagnostic.Create(Rule, parameterNode.GetLocation(), paramTypeName);

                        context.ReportDiagnostic(diagnostic);
                    }
                }
            }
        }
Ejemplo n.º 6
0
        public void FindOrchestrationTriggers(SyntaxNodeAnalysisContext context)
        {
            if (SyntaxNodeUtils.IsInsideFunction(context.SemanticModel, context.Node) && context.Node is AttributeSyntax attribute)
            {
                var semanticModel = context.SemanticModel;
                version = SyntaxNodeUtils.GetDurableVersion(semanticModel);

                if (string.Equals(attribute.ToString(), "OrchestrationTrigger"))
                {
                    if (SyntaxNodeUtils.TryGetParameterNodeNextToAttribute(attribute, out SyntaxNode parameterNode))
                    {
                        if (!ParameterTypeIsCorrectDurableType(parameterNode))
                        {
                            if (TryGetRuleFromVersion(out DiagnosticDescriptor rule))
                            {
                                var diagnostic = Diagnostic.Create(rule, parameterNode.GetLocation(), parameterNode);

                                context.ReportDiagnostic(diagnostic);
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 7
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)
                                });
                            }
                        }
                    }
                }
            }
        }