/// <nodoc /> public LoggingClass(LoggingDetailsAttribute loggingDetailsAttribute, ISymbol symbol) { Name = loggingDetailsAttribute.Name; InstanceBasedLogging = loggingDetailsAttribute.InstanceBasedLogging; EmitDebuggingInfo = loggingDetailsAttribute.EmitDebuggingInfo; Symbol = symbol; }
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); }