using System.Collections.Generic; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.CSharp.Syntax; namespace FastScriptReload.Editor.Compilation.CodeRewriting { class FieldsWalker : CSharpSyntaxWalker { private readonly Dictionary> _typeNameToFieldDeclarations = new Dictionary>(); public override void VisitClassDeclaration(ClassDeclarationSyntax node) { var className = node.Identifier; var fullClassName = RoslynUtils.GetMemberFQDN(node, className.ToString()); if(!_typeNameToFieldDeclarations.ContainsKey(fullClassName)) { _typeNameToFieldDeclarations[fullClassName] = new List(); } base.VisitClassDeclaration(node); } public override void VisitFieldDeclaration(FieldDeclarationSyntax node) { var fieldName = node.Declaration.Variables.First().Identifier.ToString(); var fullClassName = RoslynUtils.GetMemberFQDNWithoutMemberName(node); if(!_typeNameToFieldDeclarations.ContainsKey(fullClassName)) { _typeNameToFieldDeclarations[fullClassName] = new List(); } _typeNameToFieldDeclarations[fullClassName].Add(new NewFieldDeclaration(fieldName, node.Declaration.Type.ToString(), node)); base.VisitFieldDeclaration(node); } public Dictionary> GetTypeToFieldDeclarations() { return _typeNameToFieldDeclarations; } } }