mirror of
https://github.com/github/codeql.git
synced 2025-12-17 17:23:36 +01:00
31 lines
1.0 KiB
C#
31 lines
1.0 KiB
C#
using System.Linq;
|
|
using Microsoft.CodeAnalysis;
|
|
using Semmle.Util;
|
|
|
|
namespace Semmle.Extraction.CSharp.StubGenerator;
|
|
|
|
internal class RelevantSymbol : IRelevantSymbol
|
|
{
|
|
private readonly IAssemblySymbol assembly;
|
|
private readonly MemoizedFunc<INamedTypeSymbol, bool> isRelevantNamedType;
|
|
private readonly MemoizedFunc<INamespaceSymbol, bool> isRelevantNamespace;
|
|
|
|
public RelevantSymbol(IAssemblySymbol assembly)
|
|
{
|
|
this.assembly = assembly;
|
|
|
|
isRelevantNamedType = new(symbol =>
|
|
StubVisitor.IsRelevantBaseType(symbol) &&
|
|
SymbolEqualityComparer.Default.Equals(symbol.ContainingAssembly, assembly));
|
|
|
|
isRelevantNamespace = new(symbol =>
|
|
symbol.GetTypeMembers().Any(IsRelevantNamedType) ||
|
|
symbol.GetNamespaceMembers().Any(IsRelevantNamespace));
|
|
}
|
|
|
|
public bool IsRelevantNamedType(INamedTypeSymbol symbol) => isRelevantNamedType.Invoke(symbol);
|
|
|
|
public bool IsRelevantNamespace(INamespaceSymbol symbol) => isRelevantNamespace.Invoke(symbol);
|
|
}
|
|
|