29 lines
695 B
C#
29 lines
695 B
C#
|
|
using Microsoft.CodeAnalysis;
|
||
|
|
|
||
|
|
namespace Telegrator.RoslynExtensions;
|
||
|
|
|
||
|
|
public static class SymbolsExtensions
|
||
|
|
{
|
||
|
|
public static bool IsAssignableFrom(this ITypeSymbol symbol, string className)
|
||
|
|
{
|
||
|
|
if (symbol.BaseType == null)
|
||
|
|
return false;
|
||
|
|
|
||
|
|
if (symbol.BaseType.Name == className)
|
||
|
|
return true;
|
||
|
|
|
||
|
|
return symbol.BaseType.IsAssignableFrom(className);
|
||
|
|
}
|
||
|
|
|
||
|
|
public static ITypeSymbol? Cast(this ITypeSymbol symbol, string className)
|
||
|
|
{
|
||
|
|
if (symbol.BaseType == null)
|
||
|
|
return null;
|
||
|
|
|
||
|
|
if (symbol.BaseType.Name == className)
|
||
|
|
return symbol.BaseType;
|
||
|
|
|
||
|
|
return symbol.BaseType.Cast(className);
|
||
|
|
}
|
||
|
|
}
|