private void AnalyzeSymbol(SymbolUsageAnalysisContext context, PlatformCompatOptions options) { var symbol = context.Symbol; // We only want to handle a specific set of symbols var isApplicable = symbol.Kind == SymbolKind.Event || symbol.Kind == SymbolKind.Field || symbol.Kind == SymbolKind.Method || symbol.Kind == SymbolKind.NamedType || symbol.Kind == SymbolKind.Namespace || symbol.Kind == SymbolKind.Property; if (!isApplicable) { return; } if (!_store.Value.TryLookup(symbol, out var entry)) { return; } var api = symbol.ToDisplayString(SymbolDisplayFormat.CSharpShortErrorMessageFormat); var location = context.GetLocation(); var diagnostic = Diagnostic.Create(Rule, location, api); context.ReportDiagnostic(diagnostic); }
private void AnalyzeSymbol(SymbolUsageAnalysisContext context, PlatformCompatOptions options) { var symbol = context.Symbol; // We only want to handle a specific set of symbols var isApplicable = symbol.Kind == SymbolKind.Method || symbol.Kind == SymbolKind.Property || symbol.Kind == SymbolKind.Event; if (!isApplicable) { return; } if (!_store.Value.TryLookup(symbol, out var entry)) { return; } // Check that the affected platforms aren't suppressed var maskedPlatforms = entry.Data & ~options.IgnoredPlatforms; if (maskedPlatforms == Platform.None) { return; } var api = symbol.ToDisplayString(SymbolDisplayFormat.CSharpShortErrorMessageFormat); var location = context.GetLocation(); var list = maskedPlatforms.ToFriendlyString(); var diagnostic = Diagnostic.Create(Rule, location, api, list); context.ReportDiagnostic(diagnostic); }
public override void Initialize(AnalysisContext context) { context.RegisterCompilationStartAction(startContext => { var settings = startContext.Options.GetFileSettings(PlatformCompatOptions.SettingsName); var options = new PlatformCompatOptions(settings); // We only want to run if the project is targeting .NET Standard. var shouldRun = options.TargetFrameworkIsNetStandard(); if (!shouldRun) { return; } startContext.RegisterSymbolUsageAction( usageContext => AnalyzeSymbol(usageContext, options) ); }); }
private void AnalyzeMethod(SymbolAnalysisContext context, PlatformCompatOptions options) { var symbol = (IMethodSymbol)context.Symbol; var dllImportData = symbol.GetDllImportData(); if (dllImportData == null) { return; } var entryPoint = dllImportData.EntryPointName ?? symbol.Name; var moduleName = dllImportData.ModuleName; var key = (entryPoint, moduleName); if (_modernSdk.Value.Contains(key)) { return; } var location = symbol.Locations.First(); var diagnostic = Diagnostic.Create(Rule, location, moduleName, entryPoint); context.ReportDiagnostic(diagnostic); }