using System.Collections; using System.Collections.Generic; using System.Text.RegularExpressions; using System.Text; using System.Reflection; namespace Rokojori.DocGenerator; public class ClassDocFromParser { public ClassDocInfo objectInfo = new ClassDocInfo(); public static ClassDocInfo CreateFrom( CSObjectDeclaration csClass ) { var cd = new ClassDocFromParser(); cd.Create( csClass ); return cd.objectInfo; } public void Create( CSObjectDeclaration csClass ) { var walker = csClass.parser.root.walker; objectInfo.name = csClass.objectName.match; objectInfo.csNameSpace = csClass.GetNamespace(); objectInfo.doc = csClass.GetDocumentation(); objectInfo.attributes = csClass.GetMemberAttributes(); objectInfo.modifiers = csClass.GetMemberModifiers(); if ( csClass.objectTail != null && csClass.objectTail.inheritanceDeclaration != null ) { objectInfo.extendingClasses = [ csClass.objectTail.GetExtendingObject() ]; } objectInfo.attributes = CSModifierAttributesParser.GetAttributes( csClass.attributeBrackets ); var members = new List(); walker.Iterate( csClass, n => { // if ( n is CSEnumDeclaration en ) // { // var enumType = new GDScriptGeneratorEnum(); // enumType.name = en.objectName.match; // var values = en.objectBody.children.FilterType( ); // enumType.values =values.Map( v => v.GetEnumName() ); // gdClass.members.Add( enumType ); // return; // } if ( ! ( n is CSMemberDeclaration ) ) { return; } var m = n as CSMemberDeclaration; MemberInfo member = new MemberInfo(); member.name = m.GetMemberName(); member.dataType = m.GetMemberType(); member.doc = m.GetDocumentation(); member.attributes = m.GetMemberAttributes(); member.modifiers = m.GetMemberModifiers(); if ( m is CSFieldDeclaration f ) { member.memberType = MemberInfo.Field; } else if ( m is CSMethodMemberDeclaration me ) { member.memberType = me.isContructor ? MemberInfo.Constructor : MemberInfo.Method; if ( me.parametersContent != null ) { me.parametersContent.children.ForEach( ( c ) => { var p = c as CSParameterDeclaration; var parameter = new ParameterType(); parameter.name = p.GetParameterName(); parameter.type = p.GetParameterType(); if ( p.parameterValue != null ) { parameter.value = p.GetParameterValue(); } member.parameters.Add( parameter ); } ); } } objectInfo.memberInfos.Add( member ); }, false ); } }