Files
codeql/csharp/extractor/Semmle.Extraction.CSharp/Populators/Symbols.cs
2021-01-19 17:26:31 +01:00

46 lines
1.8 KiB
C#

using Microsoft.CodeAnalysis;
using Semmle.Extraction.CSharp.Entities;
namespace Semmle.Extraction.CSharp.Populators
{
internal class Symbols : SymbolVisitor<IEntity>
{
private readonly Context cx;
public Symbols(Context cx)
{
this.cx = cx;
}
public override IEntity DefaultVisit(ISymbol symbol) => throw new InternalError(symbol, $"Unhandled symbol '{symbol}' of kind '{symbol.Kind}'");
public override IEntity VisitArrayType(IArrayTypeSymbol array) => ArrayType.Create(cx, array);
public override IEntity VisitMethod(IMethodSymbol methodDecl)
{
return Method.Create(cx, methodDecl);
}
public override IEntity VisitField(IFieldSymbol field) => Field.Create(cx, field);
public override IEntity VisitNamedType(INamedTypeSymbol type) =>
type.IsTupleType ? TupleType.Create(cx, type) : (IEntity)NamedType.Create(cx, type);
public override IEntity VisitNamespace(INamespaceSymbol ns) => Namespace.Create(cx, ns);
public override IEntity VisitParameter(IParameterSymbol param) => Parameter.Create(cx, param);
public override IEntity VisitProperty(IPropertySymbol symbol) => Property.Create(cx, symbol);
public override IEntity VisitEvent(IEventSymbol symbol) => Event.Create(cx, symbol);
public override IEntity VisitTypeParameter(ITypeParameterSymbol param) => TypeParameter.Create(cx, param);
public override IEntity VisitPointerType(IPointerTypeSymbol symbol) => PointerType.Create(cx, symbol);
public override IEntity VisitFunctionPointerType(IFunctionPointerTypeSymbol symbol) => FunctionPointerType.Create(cx, symbol);
public override IEntity VisitDynamicType(IDynamicTypeSymbol symbol) => DynamicType.Create(cx, symbol);
}
}