public static void ReportProblems( CompilationAnalysisContext context, SemanticModel semanticModel, IEnumerable <ActivityFunctionDefinition> availableFunctions, IEnumerable <ActivityFunctionCall> calledFunctions) { foreach (var activityInvocation in calledFunctions) { var functionDefinition = availableFunctions.Where(x => x.FunctionName == activityInvocation.Name).FirstOrDefault(); if (functionDefinition != null) { var isInvokedWithNonNullInput = TryGetInvocationInputType(semanticModel, activityInvocation, out ITypeSymbol invocationInputType); var functionDefinitionUsesInput = TryGetDefinitionInputType(semanticModel, functionDefinition, out ITypeSymbol definitionInputType); if (!functionDefinitionUsesInput) { if (isInvokedWithNonNullInput) { var diagnostic = Diagnostic.Create(InputNotUsedRule, activityInvocation.ParameterNode.GetLocation(), activityInvocation.Name); context.ReportDiagnostic(diagnostic); } } else if (!IsValidArgumentForDefinition(invocationInputType, definitionInputType)) { var invocationTypeName = SyntaxNodeUtils.GetQualifiedTypeName(invocationInputType); var definitionTypeName = SyntaxNodeUtils.GetQualifiedTypeName(definitionInputType); var diagnostic = Diagnostic.Create(MismatchRule, activityInvocation.ParameterNode.GetLocation(), activityInvocation.Name, definitionTypeName, invocationTypeName); context.ReportDiagnostic(diagnostic); } } } }
public static void ReportProblems( CompilationAnalysisContext context, SemanticModel semanticModel, IEnumerable <ActivityFunctionDefinition> availableFunctions, IEnumerable <ActivityFunctionCall> calledFunctions) { foreach (var activityInvocation in calledFunctions) { var functionDefinition = availableFunctions.Where(x => x.FunctionName == activityInvocation.Name).FirstOrDefault(); if (functionDefinition != null && activityInvocation.ReturnTypeNode != null) { TryGetInvocationReturnType(semanticModel, activityInvocation, out ITypeSymbol invocationReturnType); TryGetDefinitionReturnType(semanticModel, functionDefinition, out ITypeSymbol definitionReturnType); if (!InputMatchesOrTaskOrCompatibleType(invocationReturnType, definitionReturnType)) { var invocationTypeName = SyntaxNodeUtils.GetQualifiedTypeName(invocationReturnType); var functionTypeName = SyntaxNodeUtils.GetQualifiedTypeName(definitionReturnType); var diagnostic = Diagnostic.Create(Rule, activityInvocation.InvocationExpression.GetLocation(), activityInvocation.Name, functionTypeName, invocationTypeName); context.ReportDiagnostic(diagnostic); } } } }