Пример #1
0
        /// <summary>
        /// Analyze each invocation syntax node.
        /// </summary>
        private void AnalyzeInvocation(SyntaxNodeAnalysisContext context)
        {
            var invocation = (InvocationExpressionSyntax)context.Node;
            var symbol     = context.SemanticModel.GetSymbolInfo(invocation.Expression, context.CancellationToken).Symbol;

            if (symbol != null)
            {
                ISymbol type = null;
                if (symbol.Kind == SymbolKind.Method)
                {
                    // Handle the case when call into AsyncEventHandler via Invoke() method.
                    // i.e.
                    // AsyncEventHandler handler;
                    // handler.Invoke(null, null);
                    type = symbol.ContainingType;
                }
                else
                {
                    type = Utils.ResolveTypeFromSymbol(symbol);
                }

                if (type != null)
                {
                    if (type.Name == Types.AsyncEventHandler.TypeName &&
                        type.BelongsToNamespace(Types.AsyncEventHandler.Namespace))
                    {
                        context.ReportDiagnostic(Diagnostic.Create(Descriptor, context.Node.GetLocation()));
                    }
                }
            }
        }
Пример #2
0
 public bool IsMatch(ISymbol symbol)
 {
     return(symbol?.Name == this.Name &&
            symbol.BelongsToNamespace(this.Namespace));
 }
Пример #3
0
 /// <summary>
 /// Tests whether a given symbol matches the description of a type (independent of its <see cref="InvertedLogic"/> property).
 /// </summary>
 internal bool IsMatch(ISymbol symbol)
 {
     return((this.IsWildcard || symbol?.Name == this.Type.Name) &&
            symbol.BelongsToNamespace(this.Type.Namespace));
 }