mirror of
https://github.com/space-wizards/RobustToolbox.git
synced 2026-09-06 17:58:05 +02:00
* Add source generator for DataDefinition validation * Add source generator for reading * Add source generator for writing * Include prototypes and other meansdatadefinition types * Target ISerializationGenerated in data definitions * Murder * Use array, struct, enum methods * Source generate get field definitions * serv5 * Fix and pray * Fix release compile * Tayrtahn review * a * Generator bugfix --------- Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
70 lines
1.8 KiB
C#
70 lines
1.8 KiB
C#
using System.Diagnostics.CodeAnalysis;
|
|
using Microsoft.CodeAnalysis;
|
|
|
|
namespace Robust.Roslyn.Shared;
|
|
|
|
#nullable enable
|
|
|
|
public static class AttributeHelper
|
|
{
|
|
public static bool HasAttribute(ISymbol symbol, string attributeMetadataName, [NotNullWhen(true)] out AttributeData? matchedAttribute)
|
|
{
|
|
foreach (var attribute in symbol.GetAttributes())
|
|
{
|
|
if (attribute.AttributeClass == null)
|
|
continue;
|
|
|
|
if (TypeSymbolHelper.ShittyTypeMatch(attribute.AttributeClass, attributeMetadataName))
|
|
{
|
|
matchedAttribute = attribute;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
matchedAttribute = null;
|
|
return false;
|
|
}
|
|
|
|
public static bool HasAttribute(ISymbol symbol, string attributeMetadataName)
|
|
{
|
|
return HasAttribute(symbol, attributeMetadataName, out _);
|
|
}
|
|
|
|
public static bool GetNamedArgumentBool(AttributeData data, string name, bool defaultValue)
|
|
{
|
|
foreach (var kv in data.NamedArguments)
|
|
{
|
|
if (kv.Key != name)
|
|
continue;
|
|
|
|
if (kv.Value.Kind != TypedConstantKind.Primitive)
|
|
continue;
|
|
|
|
if (kv.Value.Value is not bool value)
|
|
continue;
|
|
|
|
return value;
|
|
}
|
|
|
|
return defaultValue;
|
|
}
|
|
|
|
public static bool HasAttribute(
|
|
ISymbol symbol,
|
|
ITypeSymbol attribute,
|
|
[NotNullWhen(true)] out AttributeData? matchedAttribute)
|
|
{
|
|
matchedAttribute = null;
|
|
foreach (var typeAttribute in symbol.GetAttributes())
|
|
{
|
|
if (SymbolEqualityComparer.Default.Equals(typeAttribute.AttributeClass, attribute))
|
|
{
|
|
matchedAttribute = typeAttribute;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|