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)); }
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)); }