private static void ReplaceWithUsing(DocumentEditor editor, InvocationExpressionSyntax invocation, CancellationToken cancellationToken)
 {
     if (DisposeCall.TryGetDisposedRootMember(invocation, editor.SemanticModel, cancellationToken, out var root) &&
         editor.SemanticModel.TryGetSymbol(root, cancellationToken, out ILocalSymbol local) &&
         local.TrySingleDeclaration(cancellationToken, out VariableDeclarationSyntax declaration) &&
         invocation.TryFirstAncestor(out ExpressionStatementSyntax expressionStatement) &&
         declaration.Parent is LocalDeclarationStatementSyntax localDeclarationStatement)
     {
         if (expressionStatement.Parent is BlockSyntax finallyBlock &&
             finallyBlock.Parent is FinallyClauseSyntax finallyClause &&
             finallyClause.Parent is TryStatementSyntax tryStatement &&
             !tryStatement.Catches.Any())
         {
             if (declaration.Variables.TrySingle(out var declarator) &&
                 declarator.Initializer?.Value.IsKind(SyntaxKind.NullLiteralExpression) == true &&
                 tryStatement.Block.Statements.TryFirst(out var statement) &&
                 statement is ExpressionStatementSyntax assignExpressionStatement &&
                 assignExpressionStatement.Expression is AssignmentExpressionSyntax assignment)
             {
                 editor.ReplaceNode(
                     tryStatement,
                     SyntaxFactory.UsingStatement(
                         SyntaxFactory.VariableDeclaration(
                             SyntaxFactory.ParseTypeName("var"),
                             SyntaxFactory.SingletonSeparatedList(
                                 declarator.WithInitializer(SyntaxFactory.EqualsValueClause(assignment.Right)))),
                         null,
                         tryStatement.Block.WithStatements(tryStatement.Block.Statements.RemoveAt(0))));
                 editor.RemoveNode(localDeclarationStatement);
             }
        private static void Handle(SyntaxNodeAnalysisContext context)
        {
            if (!context.IsExcludedFromAnalysis() &&
                context.Node is InvocationExpressionSyntax invocation &&
                DisposeCall.IsIDisposableDispose(invocation, context.SemanticModel, context.CancellationToken) &&
                !invocation.TryFirstAncestorOrSelf <AnonymousFunctionExpressionSyntax>(out _) &&
                DisposeCall.TryGetDisposedRootMember(invocation, context.SemanticModel, context.CancellationToken, out var root))
            {
                if (Disposable.IsCachedOrInjected(root, invocation, context.SemanticModel, context.CancellationToken))
                {
                    context.ReportDiagnostic(Diagnostic.Create(IDISP007DontDisposeInjected.Descriptor, invocation.FirstAncestorOrSelf <StatementSyntax>()?.GetLocation() ?? invocation.GetLocation()));
                }
                else if (context.SemanticModel.TryGetSymbol(root, context.CancellationToken, out ILocalSymbol local))
                {
                    if (IsUsedAfter(local, invocation, context, out var locations))
                    {
                        context.ReportDiagnostic(Diagnostic.Create(IDISP016DontUseDisposedInstance.Descriptor, invocation.FirstAncestorOrSelf <StatementSyntax>()?.GetLocation() ?? invocation.GetLocation(), additionalLocations: locations));
                    }

                    if (IsPreferUsing(local, invocation, context))
                    {
                        context.ReportDiagnostic(Diagnostic.Create(IDISP017PreferUsing.Descriptor, invocation.GetLocation()));
                    }
                }
            }
        }
        private static void Handle(SyntaxNodeAnalysisContext context)
        {
            if (!context.IsExcludedFromAnalysis() &&
                context.Node is InvocationExpressionSyntax invocation &&
                DisposeCall.IsMatchAny(invocation, context.SemanticModel, context.CancellationToken) &&
                !invocation.TryFirstAncestorOrSelf <AnonymousFunctionExpressionSyntax>(out _) &&
                DisposeCall.TryGetDisposedRootMember(invocation, context.SemanticModel, context.CancellationToken, out var root))
            {
                if (Disposable.IsCachedOrInjectedOnly(root, invocation, context.SemanticModel, context.CancellationToken))
                {
                    context.ReportDiagnostic(Diagnostic.Create(Descriptors.IDISP007DoNotDisposeInjected, invocation.FirstAncestorOrSelf <StatementSyntax>()?.GetLocation() ?? invocation.GetLocation()));
                }

                if (invocation.Expression is MemberAccessExpressionSyntax {
                    Expression : IdentifierNameSyntax _
                } &&