private static void AnalyzeSymbol(SymbolAnalysisContext context, ImmutableTypes immutableTypes) { immutableTypes.Initialize(context.Compilation, context.Options, context.CancellationToken); var symbol = (IFieldSymbol)context.Symbol; var containingType = symbol.ContainingType; if (containingType == null) { return; } string genericTypeArgument = null; if (Helper.HasImmutableAttributeAndShouldVerify(containingType) && Helper.ShouldCheckMemberTypeForImmutability(symbol) && !immutableTypes.IsImmutableType(symbol.Type, ref genericTypeArgument)) { if (genericTypeArgument != null) { var diagnostic = Diagnostic.Create(RuleGeneric, symbol.Locations[0], symbol.Name, genericTypeArgument); context.ReportDiagnostic(diagnostic); } else { var diagnostic = Diagnostic.Create(Rule, symbol.Locations[0], symbol.Name); context.ReportDiagnostic(diagnostic); } } }
private static void AnalyzeSymbol(SymbolAnalysisContext context, ImmutableTypes immutableTypes) { immutableTypes.Initialize(context.Compilation, context.Options, context.CancellationToken); string genericTypeArgument = null; var symbol = (INamedTypeSymbol)context.Symbol; if (symbol.BaseType != null && Helper.HasImmutableAttributeAndShouldVerify(symbol) && !immutableTypes.IsImmutableType(symbol.BaseType, ref genericTypeArgument)) { var diagnostic = Diagnostic.Create(Rule, symbol.Locations[0], symbol.Name); context.ReportDiagnostic(diagnostic); } }
public override void Initialize(AnalysisContext context) { context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None); context.EnableConcurrentExecution(); var whitelist = new ImmutableTypes(); IMM001.Initialize(context); IMM002.Initialize(context); IMM003.Initialize(context, whitelist); IMM004.Initialize(context, whitelist); IMM005.Initialize(context); IMM006.Initialize(context, whitelist); IMM007.Initialize(context); }
internal static void Initialize(AnalysisContext context, ImmutableTypes immutableTypes) { context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.Analyze | GeneratedCodeAnalysisFlags.ReportDiagnostics); context.EnableConcurrentExecution(); context.RegisterSymbolAction(x => AnalyzeSymbol(x, immutableTypes), SymbolKind.NamedType); }