﻿//using Microsoft.CodeAnalysis;
//using Microsoft.CodeAnalysis.CodeActions;
//using Microsoft.CodeAnalysis.CodeFixes;
//using Microsoft.CodeAnalysis.CSharp;
//using Microsoft.CodeAnalysis.CSharp.Syntax;
//using Microsoft.CodeAnalysis.Rename;
//using Microsoft.CodeAnalysis.Text;
//using System;
//using System.Collections.Generic;
//using System.Collections.Immutable;
//using System.Composition;
//using System.Linq;
//using System.Threading;
//using System.Threading.Tasks;

//namespace Lucene.Net.CodeAnalysis.Dev
//{
//    //[ExportCodeFixProvider(LanguageNames.CSharp, Name = nameof(LuceneNetCodeAnalysisDevCodeFixProvider)), Shared]
//    public class LuceneNetCodeAnalysisDevCodeFixProvider : CodeFixProvider
//    {
//        public sealed override ImmutableArray<string> FixableDiagnosticIds
//        {
//            get { return ImmutableArray.Create(LuceneNetCodeAnalysisDevAnalyzer.DiagnosticId); }
//        }

//        public sealed override FixAllProvider GetFixAllProvider()
//        {
//            // See https://github.com/dotnet/roslyn/blob/main/docs/analyzers/FixAllProvider.md for more information on Fix All Providers
//            return WellKnownFixAllProviders.BatchFixer;
//        }

//        public sealed override async Task RegisterCodeFixesAsync(CodeFixContext context)
//        {
//            var root = await context.Document.GetSyntaxRootAsync(context.CancellationToken).ConfigureAwait(false);

//            // TODO: Replace the following code with your own analysis, generating a CodeAction for each fix to suggest
//            var diagnostic = context.Diagnostics.First();
//            var diagnosticSpan = diagnostic.Location.SourceSpan;

//            // Find the type declaration identified by the diagnostic.
//            var declaration = root.FindToken(diagnosticSpan.Start).Parent.AncestorsAndSelf().OfType<TypeDeclarationSyntax>().First();
            

//            // Register a code action that will invoke the fix.
//            context.RegisterCodeFix(
//                CodeAction.Create(
//                    title: CodeFixResources.CodeFixTitle,
//                    createChangedSolution: c => MakeUppercaseAsync(context.Document, declaration, c),
//                    equivalenceKey: nameof(CodeFixResources.CodeFixTitle)),
//                diagnostic);
//        }

//        private async Task<Solution> MakeUppercaseAsync(Document document, TypeDeclarationSyntax typeDecl, CancellationToken cancellationToken)
//        {
//            // Compute new uppercase name.
//            var identifierToken = typeDecl.Identifier;
//            var newName = identifierToken.Text.ToUpperInvariant();

//            // Get the symbol representing the type to be renamed.
//            var semanticModel = await document.GetSemanticModelAsync(cancellationToken);
//            var typeSymbol = semanticModel.GetDeclaredSymbol(typeDecl, cancellationToken);

//            // Produce a new solution that has all references to that type renamed, including the declaration.
//            var originalSolution = document.Project.Solution;
//            var optionSet = originalSolution.Workspace.Options;
//            var newSolution = await Renamer.RenameSymbolAsync(document.Project.Solution, typeSymbol, newName, optionSet, cancellationToken).ConfigureAwait(false);

//            // Return the new solution with the now-uppercase type name.
//            return newSolution;
//        }
//    }
//}
