rokojori_action_library/Tools/analysis/ClassDocFromParser.cs

113 lines
2.9 KiB
C#
Raw Normal View History

2026-04-27 08:15:59 +00:00
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<CSMemberDeclaration>();
walker.Iterate( csClass,
n =>
{
// if ( n is CSEnumDeclaration en )
// {
// var enumType = new GDScriptGeneratorEnum();
// enumType.name = en.objectName.match;
// var values = en.objectBody.children.FilterType<ASTNode,CSEnumValueDeclaration>( );
// 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
);
}
}