Example #1
0
 /// <nodoc />
 public LoggingClass(LoggingDetailsAttribute loggingDetailsAttribute, ISymbol symbol)
 {
     Name = loggingDetailsAttribute.Name;
     InstanceBasedLogging = loggingDetailsAttribute.InstanceBasedLogging;
     EmitDebuggingInfo    = loggingDetailsAttribute.EmitDebuggingInfo;
     Symbol = symbol;
 }
Example #2
0
        public bool TryParseLoggingDetailsAttribute(ISymbol symbolForError, AttributeData attributeData, out LoggingDetailsAttribute result)
        {
            if (attributeData.ConstructorArguments.Length > 0 && attributeData.ConstructorArguments[0].Value is string)
            {
                var name = (string)attributeData.ConstructorArguments[0].Value;
                if (string.IsNullOrEmpty(name))
                {
                    m_errorReport.ReportError(symbolForError, $"Unsupported constructor argument value {nameof(LoggingDetailsAttribute.Name)}: Cannot be null or empty.");
                    result = null;
                    return(false);
                }
                result = new LoggingDetailsAttribute(name);
            }
            else
            {
                m_errorReport.ReportError(symbolForError, "First constructor argument should be a string");
                result = null;
                return(false);
            }

            // Pull the data out of the GeneratedEventAttribute
            foreach (var argument in attributeData.NamedArguments)
            {
                switch (argument.Key)
                {
                case nameof(LoggingDetailsAttribute.Name):
                    if (!ParseValue <string>(
                            argument.Value,
                            symbolForError,
                            value => string.IsNullOrEmpty(value) ? $"'{nameof(LoggingDetailsAttribute.Name)}' cannot be null or empty." : null,
                            out var name))
                    {
                        result = null;
                        return(false);
                    }

                    result.Name = name;

                    break;

                case nameof(LoggingDetailsAttribute.InstanceBasedLogging):
                    if (!ParseValue <bool>(
                            argument.Value,
                            symbolForError,
                            _ => null,
                            out var instanceBasedLogging))
                    {
                        result = null;
                        return(false);
                    }

                    result.InstanceBasedLogging = instanceBasedLogging;
                    break;

                case nameof(LoggingDetailsAttribute.EmitDebuggingInfo):
                    if (!ParseValue <bool>(
                            argument.Value,
                            symbolForError,
                            _ => null,
                            out var emitDebuggingInfo))
                    {
                        result = null;
                        return(false);
                    }

                    result.EmitDebuggingInfo = emitDebuggingInfo;
                    break;

                default:
                    m_errorReport.ReportError(symbolForError, $"Unsupported attribute property '{argument.Key}' with value '{argument.Value.Value.ToString()}'");
                    result = null;
                    return(false);
                }
            }

            return(true);
        }