public static LoggerDescriptor ToLoggerDescriptor(this TypeDeclarationSyntax typeDeclarationSyntax,
                                                          TransformationContext context, AttributeData attributeData)
        {
            var className = typeDeclarationSyntax.GetClassNameFromInterfaceDeclaration();

            var methodDeclarations = typeDeclarationSyntax.GetAllMethodDeclarations(context);

            var innerLoggerTypeSymbol = context.Compilation.GetTypeByMetadataName(typeof(ILogger).FullName);

            var filtered = methodDeclarations.Where(_ =>
            {
                var conversion = context.Compilation.ClassifyCommonConversion(_.DeclaredInterfaceSymbol, innerLoggerTypeSymbol);
                return(conversion.Exists && conversion.IsImplicit);
            });

            //var exposeInnerLogger = filtered.Count() < methodDeclarations.Count();

            var exceptionTypeSymbol = context.Compilation.GetTypeByMetadataName(typeof(Exception).FullName);
            var objectTypeSymbol    = context.Compilation.GetTypeByMetadataName(typeof(object).FullName);
            var methods             = methodDeclarations.GetLoggerMethods(context, innerLoggerTypeSymbol, exceptionTypeSymbol);

            var inheritedInterfaceTypes = attributeData.GetInheritedInterfaceTypes();

            return(new LoggerDescriptor(
                       typeDeclarationSyntax,
                       className,
                       inheritedInterfaceTypes,
                       methods,
                       objectTypeSymbol));
        }
Esempio n. 2
0
        public static MetricsCollectorDescriptor ToMetricsCollectorDescriptor(
            this TypeDeclarationSyntax typeDeclarationSyntax, TransformationContext context, AttributeData attributeData)
        {
            var className = typeDeclarationSyntax.GetClassNameFromInterfaceDeclaration(false);

            var methodDeclarations = typeDeclarationSyntax.GetAllMethodDeclarations(context);

            var inheritedInterfaceTypes = attributeData.GetInheritedInterfaceTypes();

            var metricsCollectorMethods = methodDeclarations.GetMetricsCollectorMethods(context);

            var contextName =
                attributeData.GetNamedArgumentValueOrDefault(nameof(GenerateMetricsCollectorAttribute.ContextName), className);

            return(new MetricsCollectorDescriptor(typeDeclarationSyntax, contextName, className,
                                                  inheritedInterfaceTypes, metricsCollectorMethods));
        }