private static Dictionary <string, InterfaceSymbolDeclaration> GetInterfaceTypeDictionary(GeneratorExecutionContext context,
                                                                                                  CustomAspectInterfaceReceiver customAspectReceiver)
        {
            Dictionary <string, InterfaceSymbolDeclaration> interfaceSymbols = new();

            foreach (var interf in customAspectReceiver.CustomAspectInterfaces)
            {
                var root  = interf.Interface.SyntaxTree.GetRoot().SyntaxTree;
                var model = context.Compilation.GetSemanticModel(root);
                var symb  = model.GetDeclaredSymbol(interf.Interface) as ITypeSymbol;
                if (symb == null)
                {
                    continue;
                }
                interfaceSymbols[$"{symb.ContainingNamespace}.{symb.Name}"] = new(
                    interf.Interface,
                    symb,
                    interf.Types.Select(t =>
                {
                    ITypeSymbol?typeSymbol = null;
                    if (t.Type is IdentifierNameSyntax ident)
                    {
                        typeSymbol = model.GetTypeInfo(ident).Type;
                    }
                    return(new TypeDeclaration(t, typeSymbol));
                }).ToArray());
            }

            return(interfaceSymbols);
        }
        private static Dictionary <string, MethodUsageInformation> GetInterfaceUsageDeclarations(GeneratorExecutionContext context,
                                                                                                 CustomAspectInterfaceReceiver customAspectReceiver, Dictionary <string, InterfaceSymbolDeclaration> interfaceSymbols)
        {
            var interfaceUsageDeclarations = new Dictionary <string, MethodUsageInformation>();

            foreach (var methodDeclaration in customAspectReceiver.MethodDeclarations)
            {
                var model       = context.Compilation.GetSemanticModel(methodDeclaration.SyntaxTree.GetRoot().SyntaxTree);
                var modelSymbol = new Lazy <ISymbol?>(() => model.GetDeclaredSymbol(methodDeclaration));
                foreach (var parameter in methodDeclaration.ParameterList.Parameters)
                {
                    var pSymbol = model.GetDeclaredSymbol(parameter) as IParameterSymbol;
                    if (pSymbol == null)
                    {
                        continue;
                    }
                    var str = $"{pSymbol.Type.ContainingNamespace}.{pSymbol.Type.Name}";
                    if (!interfaceSymbols.TryGetValue(str, out var interf))
                    {
                        continue;
                    }
                    var modelSymb = modelSymbol.Value;
                    if (modelSymb == null)
                    {
                        continue;
                    }
                    interfaceUsageDeclarations
                    .GetOrAdd(methodDeclaration.Identifier.Text, () => new MethodUsageInformation(methodDeclaration, modelSymb, new()))
                    .InterfaceUsages.Add(new(interf, pSymbol.Type, parameter.Identifier.Text));
                }
            }

            return(interfaceUsageDeclarations);
        }