113 lines
2.9 KiB
C#
113 lines
2.9 KiB
C#
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
|
|
);
|
|
|
|
}
|
|
} |