Spaces:
Running
Running
File size: 1,329 Bytes
1ae2e8e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
namespace RobloxCS
{
public sealed class MemberCollectionResult
{
public Dictionary<NamespaceDeclarationSyntax, List<MemberDeclarationSyntax>> Namespaces { get; set; } = [];
}
public sealed class MemberCollector : CSharpSyntaxWalker
{
private readonly Dictionary<NamespaceDeclarationSyntax, List<MemberDeclarationSyntax>> _namespaces = [];
private readonly List<SyntaxTree> _trees;
public MemberCollector(List<SyntaxTree> trees)
{
_trees = trees;
}
public MemberCollectionResult Collect()
{
foreach (var tree in _trees)
{
Visit(tree.GetRoot());
}
return new MemberCollectionResult()
{
Namespaces = _namespaces
};
}
public override void VisitNamespaceDeclaration(NamespaceDeclarationSyntax node)
{
var members = _namespaces.ContainsKey(node) ? _namespaces[node] : new List<MemberDeclarationSyntax>();
foreach (var member in node.Members)
{
members.Add(member);
}
_namespaces[node] = members;
}
}
}
|