Source Generator で enumの情報(基底型とか定数値)を取得する
タイトルの通りです。
Source Generatorに関する情報はまだ少ないので、簡単にですがまとめておきます。
誰かのお役に立てれば幸いです。
Execute
メソッドの実装以外は省略しています。
public void Execute(GeneratorExecutionContext context)
{
// Enum型の完全修飾名からシンボルを取得
INamedTypeSymbol type = context.Compilation.GetTypeByMetadataName("System.DayOfWeek");
// 基底型のシンボル(DayOfWeekならint)
INamedTypeSymbol underlyingType = type.EnumUnderlyingType;
// シンボルがEnum型のものかどうか判定
bool isEnum = type.TypeKind == TypeKind.Enum;
// 基底型の有無でも判定可能
// bool isEnum = type.EnumUnderlyingType is not null;
// フィールドのシンボルだけ取得
foreach (var member in type.GetMembers().OfType<IFieldSymbol>())
{
// メンバー名
string name = member.Name;
// 定数値
object value = member.ConstantValue;
}
}