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