private static Task <Document> ExecuteAsync(CodeFixExecutionContext <TypeParameterSyntax> context, ITypeSymbol targetType, INamedTypeSymbol attribute)
        {
            INamespaceSymbol? @namespace = (context.SemanticModel.GetDeclaredSymbol(context.Node)?.ContainingNamespace) ?? context.Compilation.GlobalNamespace;

            NameSyntax attributeName = context.SemanticModel.GetNameSyntaxForAttribute(context.Root.Usings, @namespace, attribute, context.CancellationToken);

            TypeParameterSyntax parameter = context.Node.AddAttributeLists(SyntaxFactory.AttributeList(SyntaxFactory.SingletonSeparatedList(SyntaxFactory.Attribute(attributeName))));

            context.RegisterChange(parameter);

            AttributeSyntax attr = context.Node.AttributeLists.Last().Attributes[0];

            return(Task.FromResult(MakeValueOfOverridenAttributeEquivalentCodeFix.Execute(context.WithNode(attr), targetType)));
        }
        /// <inheritdoc/>
        public override async Task RegisterCodeFixesAsync(CodeFixContext context)
        {
            CodeFixData <TypeParameterSyntax> data = await CodeFixData <TypeParameterSyntax> .FromAsync(context, true).ConfigureAwait(false);

            if (!data.Success || !data.HasNode || !data.HasSemanticModel)
            {
                return;
            }

            if (data.SemanticModel.GetDeclaredSymbol(data.Node, data.CancellationToken) is not ITypeParameterSymbol typeParameter ||
                MakeValueOfOverridenAttributeEquivalentCodeFix.GetTargetType(data.Node, data.SemanticModel, typeParameter.Ordinal, data.CancellationToken) is not ITypeSymbol targetType)
            {
                return;
            }

            CodeAction?action = GetCodeAction(in data, targetType);

            if (action is null)
            {
                return;
            }

            context.RegisterCodeFix(action, data.Diagnostic);
        }