private static void Handle(SyntaxNodeAnalysisContext context) { if (!context.IsExcludedFromAnalysis() && context.Node is ObjectCreationExpressionSyntax objectCreation) { if (context.SemanticModel.TryGetType(objectCreation, context.CancellationToken, out var type) && type.IsAssignableTo(KnownSymbol.HttpClient, context.Compilation) && !IsStaticFieldInitializer(objectCreation) && !IsStaticPropertyInitializer(objectCreation) && !IsStaticCtor(context.ContainingSymbol)) { context.ReportDiagnostic(Diagnostic.Create(IDISP014UseSingleInstanceOfHttpClient.Descriptor, objectCreation.GetLocation())); } if (Disposable.IsCreation(objectCreation, context.SemanticModel, context.CancellationToken).IsEither(Result.Yes, Result.AssumeYes) && Disposable.IsIgnored(objectCreation, context.SemanticModel, context.CancellationToken)) { context.ReportDiagnostic(Diagnostic.Create(IDISP004DontIgnoreCreated.Descriptor, context.Node.GetLocation())); } } }
private static void Handle(SyntaxNodeAnalysisContext context) { if (context.IsExcludedFromAnalysis()) { return; } if (context.Node is InvocationExpressionSyntax invocation && Disposable.IsCreation(invocation, context.SemanticModel, context.CancellationToken).IsEither(Result.Yes, Result.AssumeYes) && Disposable.IsIgnored(invocation, context.SemanticModel, context.CancellationToken)) { context.ReportDiagnostic(Diagnostic.Create(Descriptor, context.Node.GetLocation())); } if (context.Node is MemberAccessExpressionSyntax memberAccess && context.SemanticModel.TryGetSymbol(memberAccess.Expression, context.CancellationToken, out IPropertySymbol property) && Disposable.IsPotentiallyAssignableFrom(property.Type, context.Compilation) && Disposable.IsCreation(memberAccess.Expression, context.SemanticModel, context.CancellationToken).IsEither(Result.Yes, Result.AssumeYes) && Disposable.IsIgnored(memberAccess.Expression, context.SemanticModel, context.CancellationToken)) { context.ReportDiagnostic(Diagnostic.Create(Descriptor, context.Node.GetLocation())); } }