private void AnalyzeInvocation(SyntaxNodeAnalysisContext syntaxNodeContext) { var invocationExpression = (TInvocationExpressionSyntax)syntaxNodeContext.Node; var methodSymbolInfo = syntaxNodeContext.SemanticModel.GetSymbolInfo(invocationExpression); if (methodSymbolInfo.Symbol == null || methodSymbolInfo.Symbol.Kind != SymbolKind.Method) { return; } var methodSymbol = (IMethodSymbol)methodSymbolInfo.Symbol; if (methodSymbol.IsWhenLikeMethod() == false) { return; } var expressionsForAnalysys = _substitutionNodeFinder.FindForWhenExpression(syntaxNodeContext, invocationExpression, methodSymbol); foreach (var analysedSyntax in expressionsForAnalysys) { var symbolInfo = syntaxNodeContext.SemanticModel.GetSymbolInfo(analysedSyntax); if (symbolInfo.Symbol != null) { Analyze(syntaxNodeContext, analysedSyntax, symbolInfo.Symbol); } } }
private void AnalyzeInvocation(SyntaxNodeAnalysisContext syntaxNodeContext) { var invocationExpression = (TInvocationExpressionSyntax)syntaxNodeContext.Node; var methodSymbolInfo = syntaxNodeContext.SemanticModel.GetSymbolInfo(invocationExpression); if (methodSymbolInfo.Symbol?.Kind != SymbolKind.Method) { return; } var methodSymbol = (IMethodSymbol)methodSymbolInfo.Symbol; if (methodSymbol == null) { return; } if (IsWhenLikeMethod(syntaxNodeContext, invocationExpression, methodSymbol.Name) == false) { return; } var expressionsForAnalysys = _substitutionNodeFinder.FindForWhenExpression(syntaxNodeContext, invocationExpression, methodSymbol); foreach (var analysedSyntax in expressionsForAnalysys) { var symbolInfo = syntaxNodeContext.SemanticModel.GetSymbolInfo(analysedSyntax); if (symbolInfo.Symbol != null) { var canBeSetuped = symbolInfo.Symbol.CanBeSetuped(); if (canBeSetuped == false) { var diagnostic = Diagnostic.Create( DiagnosticDescriptorsProvider.NonVirtualWhenSetupSpecification, GetSubstitutionNodeActualLocation(analysedSyntax, symbolInfo), symbolInfo.Symbol.Name); syntaxNodeContext.ReportDiagnostic(diagnostic); } if (canBeSetuped && symbolInfo.Symbol.MemberVisibleToProxyGenerator() == false) { var diagnostic = Diagnostic.Create( DiagnosticDescriptorsProvider.InternalSetupSpecification, GetSubstitutionNodeActualLocation(analysedSyntax, symbolInfo), symbolInfo.Symbol.Name); syntaxNodeContext.ReportDiagnostic(diagnostic); } } } }