mirror of
https://github.com/github/codeql.git
synced 2026-04-28 18:25:24 +02:00
C#: Clear TRAP stack when calling PopulateGenerics
This commit is contained in:
@@ -250,41 +250,44 @@ namespace Semmle.Extraction.CSharp.Entities
|
||||
/// </summary>
|
||||
public void PopulateGenerics()
|
||||
{
|
||||
if (Symbol is null || !NeedsPopulation || !Context.ExtractGenerics(this))
|
||||
return;
|
||||
|
||||
var members = new List<ISymbol>();
|
||||
|
||||
foreach (var member in Symbol.GetMembers())
|
||||
members.Add(member);
|
||||
foreach (var member in Symbol.GetTypeMembers())
|
||||
members.Add(member);
|
||||
|
||||
// Mono extractor puts all BASE interface members as members of the current interface.
|
||||
|
||||
if (Symbol.TypeKind == TypeKind.Interface)
|
||||
Context.PopulateLater(() =>
|
||||
{
|
||||
foreach (var baseInterface in Symbol.Interfaces)
|
||||
if (Symbol is null || !NeedsPopulation || !Context.ExtractGenerics(this))
|
||||
return;
|
||||
|
||||
var members = new List<ISymbol>();
|
||||
|
||||
foreach (var member in Symbol.GetMembers())
|
||||
members.Add(member);
|
||||
foreach (var member in Symbol.GetTypeMembers())
|
||||
members.Add(member);
|
||||
|
||||
// Mono extractor puts all BASE interface members as members of the current interface.
|
||||
|
||||
if (Symbol.TypeKind == TypeKind.Interface)
|
||||
{
|
||||
foreach (var member in baseInterface.GetMembers())
|
||||
members.Add(member);
|
||||
foreach (var member in baseInterface.GetTypeMembers())
|
||||
members.Add(member);
|
||||
foreach (var baseInterface in Symbol.Interfaces)
|
||||
{
|
||||
foreach (var member in baseInterface.GetMembers())
|
||||
members.Add(member);
|
||||
foreach (var member in baseInterface.GetTypeMembers())
|
||||
members.Add(member);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var member in members)
|
||||
{
|
||||
Context.CreateEntity(member);
|
||||
}
|
||||
foreach (var member in members)
|
||||
{
|
||||
Context.CreateEntity(member);
|
||||
}
|
||||
|
||||
if (Symbol.BaseType is not null)
|
||||
Create(Context, Symbol.BaseType).PopulateGenerics();
|
||||
if (Symbol.BaseType is not null)
|
||||
Create(Context, Symbol.BaseType).PopulateGenerics();
|
||||
|
||||
foreach (var i in Symbol.Interfaces)
|
||||
{
|
||||
Create(Context, i).PopulateGenerics();
|
||||
}
|
||||
foreach (var i in Symbol.Interfaces)
|
||||
{
|
||||
Create(Context, i).PopulateGenerics();
|
||||
}
|
||||
}, preserveDuplicationKey: false);
|
||||
}
|
||||
|
||||
public void ExtractRecursive(TextWriter trapFile, IEntity parent)
|
||||
|
||||
Reference in New Issue
Block a user