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