public void Process(TranslationUnit translationUnit)
        {
            var funcs = translationUnit.Functions.Where(x => !x.IsInline);

            if (Filter != null)
            {
                var filters = Array.ConvertAll(Filter.GetInvocationList(), filter => (FilterHandler)filter);
                funcs = funcs.Where(func => !filters.Any(filter => filter(func)));
            }

            foreach (var function in funcs)
            {
                var functionName = function.Name;
                if (!context.FunctionExportMap.TryGetValue(functionName, out FunctionExport export))
                {
                    Console.WriteLine($"Export not found. Skipping {functionName} function.");
                    continue;
                }

                var functionDefinition = new Definitions.FunctionDefinition {
                    Name               = functionName,
                    ReturnType         = GetTypeDefinition(function.ReturnType.Type),
                    Content            = function.Comment?.BriefText,
                    DetailedContent    = function.Comment?.Text,
                    LibraryName        = export.LibraryName,
                    IsConstLibraryName = export.IsConstLibraryName,
                    Params             = function.Parameters.Select((x, i) => GetParameter(function, x, i)).ToArray(),
                    IsObsolete         = IsObsolete(function),
                    ObsoleteMessage    = GetObsoleteMessage(function),
                    CallingConvention  = GetCallingConvention(function.CallingConvention),
                };
                context.AddUnit(functionDefinition);
            }
        }
 public ClassAndFunctionToken(Scope scope, ClassToken classToken, DotToken dotToken, FunctionCallToken funcToken, Definitions.FunctionDefinition funcDef)
     : base(scope)
 {
     AddToken(classToken);
     AddToken(dotToken);
     AddToken(_funcToken = funcToken);
 }