protected override bool ReportSpecialIncompatibleMembersDiagnostic(OperationAnalysisContext operationContext, ImmutableArray <ISymbol> dangerousPatterns, ISymbol member)
 {
     if (member is IMethodSymbol && ImmutableArrayOperations.Contains(dangerousPatterns, member, SymbolEqualityComparer.Default))
     {
         operationContext.ReportDiagnostic(Diagnostic.Create(s_getFilesRule, operationContext.Operation.Syntax.GetLocation(), member.GetDisplayName()));
         return(true);
     }
     else if (member is IPropertySymbol && ImmutableArrayOperations.Contains(dangerousPatterns, member, SymbolEqualityComparer.Default))
     {
         operationContext.ReportDiagnostic(Diagnostic.Create(s_locationRule, operationContext.Operation.Syntax.GetLocation(), member.GetDisplayName()));
         return(true);
     }
     return(false);
 }
                static void CheckCalledMember(
                    OperationAnalysisContext operationContext,
                    ISymbol member,
                    ImmutableArray <ISymbol> dangerousPatterns)
                {
                    // Do not emit any diagnostic if caller is annotated with the attribute too.
                    if (operationContext.ContainingSymbol.HasAttribute(RequiresAssemblyFilesAttribute))
                    {
                        return;
                    }
                    // In case ContainingSymbol is a property accesor check also for RequiresAssemblyFilesAttribute in the associated property
                    if (operationContext.ContainingSymbol is IMethodSymbol containingSymbol && (containingSymbol.MethodKind == MethodKind.PropertyGet || containingSymbol.MethodKind == MethodKind.PropertySet) &&
                        containingSymbol.AssociatedSymbol !.HasAttribute(RequiresAssemblyFilesAttribute))
                    {
                        return;
                    }

                    if (member is IMethodSymbol && ImmutableArrayOperations.Contains(dangerousPatterns, member, SymbolEqualityComparer.Default))
                    {
                        operationContext.ReportDiagnostic(Diagnostic.Create(s_getFilesRule, operationContext.Operation.Syntax.GetLocation(), member));
                        return;
                    }
                    else if (member is IPropertySymbol && ImmutableArrayOperations.Contains(dangerousPatterns, member, SymbolEqualityComparer.Default))
                    {
                        operationContext.ReportDiagnostic(Diagnostic.Create(s_locationRule, operationContext.Operation.Syntax.GetLocation(), member));
                        return;
                    }

                    if (member.TryGetRequiresAssemblyFileAttribute(out AttributeData? requiresAssemblyFilesAttribute))
                    {
                        var message = requiresAssemblyFilesAttribute?.NamedArguments.FirstOrDefault(na => na.Key == "Message").Value.Value?.ToString();
                        message     = message != null ? " " + message + "." : message;
                        var url     = requiresAssemblyFilesAttribute?.NamedArguments.FirstOrDefault(na => na.Key == "Url").Value.Value?.ToString();
                        url         = url != null ? " " + url : url;
                        operationContext.ReportDiagnostic(Diagnostic.Create(
                                                              s_requiresAssemblyFilesRule,
                                                              operationContext.Operation.Syntax.GetLocation(),
                                                              member.OriginalDefinition.ToString(),
                                                              message,
                                                              url));
                    }
                }