示例#1
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)
                                });
                            }
                        }
                    }
                }
            }
        }