Field::Field( const Cursor &cursor, const Namespace ¤tNamespace, Class *parent ) : LanguageType( cursor, currentNamespace ) , m_isConst( cursor.GetType( ).IsConst( ) ) , m_parent( parent ) , m_name( cursor.GetSpelling( ) ) , m_type( utils::GetQualifiedName( cursor.GetType( ) ) ) { auto displayName = m_metaData.GetNativeString( native_property::DisplayName ); if (displayName.empty( )) m_displayName = m_name; else m_displayName = displayName; m_explicitGetter = m_metaData.GetNativeString( native_property::ExplicitGetter ); m_veryExplicitGetter = m_metaData.GetNativeString( native_property::VeryExplicitGetter ); m_hasExplicitGetter = !m_explicitGetter.empty( ) || !m_veryExplicitGetter.empty( ); m_explicitSetter = m_metaData.GetNativeString( native_property::ExplicitSetter ); m_hasExplicitSetter = !m_explicitSetter.empty( ); }
Global::Global( const Cursor &cursor, const Namespace ¤tNamespace, Class *parent ) : LanguageType( cursor, currentNamespace ) , m_isConst( cursor.GetType( ).IsConst( ) ) , m_hasExplicitGetter( m_metaData.GetFlag( native_property::ExplicitGetter ) ) , m_hasExplicitSetter( m_metaData.GetFlag( native_property::ExplicitSetter ) ) , m_parent( parent ) , m_name( cursor.GetSpelling( ) ) , m_qualifiedName( utils::GetQualifiedName( cursor, currentNamespace ) ) , m_type( utils::GetQualifiedName( cursor.GetType( ) ) ) { auto displayName = m_metaData.GetNativeString( native_property::DisplayName ); if (displayName.empty( )) { m_displayName = m_qualifiedName; } else { m_displayName = utils::GetQualifiedName( displayName, currentNamespace ); } }
Field::Field( const Cursor &cursor, const Namespace ¤tNamespace, Class *parent ) : LanguageType( cursor, currentNamespace ) , m_isConst( cursor.GetType( ).IsConst( ) ) , m_parent( parent ) , m_name( cursor.GetSpelling( ) ) , m_type( cursor.GetType( ).GetDisplayName( ) ) { auto displayName = m_metaData.GetNativeString( kMetaDisplayName ); if (displayName.empty( )) m_displayName = m_name; else m_displayName = displayName; m_explicitGetter = m_metaData.GetNativeString( kMetaExplicitGetter ); m_hasExplicitGetter = !m_explicitGetter.empty( ); m_explicitSetter = m_metaData.GetNativeString( kMetaExplicitSetter ); m_hasExplicitSetter = !m_explicitSetter.empty( ); }
Enum::Enum(const Cursor &cursor, const Namespace ¤tNamespace) : LanguageType( cursor, currentNamespace ) , m_name( cursor.GetType( ).GetDisplayName( ) ) , m_qualifiedName( m_name ) { auto displayName = m_metaData.GetNativeString( kMetaDisplayName ); if (displayName.empty( )) m_displayName = m_qualifiedName; else m_displayName = utils::GetQualifiedName( cursor, currentNamespace ); // it's an anonymous enum? if (m_displayName.find( "anonymous enum" ) != std::string::npos) m_displayName = ""; for (auto &child : cursor.GetChildren( )) { if (child.GetKind( ) == CXCursor_EnumConstantDecl) m_values.emplace_back( this, child ); } }
Class::Class(const Cursor &cursor, const Namespace ¤tNamespace) : LanguageType( cursor, currentNamespace ) , m_name( cursor.GetDisplayName( ) ) , m_qualifiedName( cursor.GetType( ).GetDisplayName( ) ) { auto displayName = m_metaData.GetNativeString( native_property::DisplayName ); if (displayName.empty( )) { m_displayName = m_qualifiedName; } else { m_displayName = displayName; } for (auto &child : cursor.GetChildren( )) { switch (child.GetKind( )) { case CXCursor_CXXBaseSpecifier: { auto baseClass = new BaseClass( child ); m_baseClasses.emplace_back( baseClass ); // automatically enable the type if not explicitly disabled if (isNativeType( baseClass->name )) m_enabled = !m_metaData.GetFlag( native_property::Disable ); } break; // constructor case CXCursor_Constructor: m_constructors.emplace_back( new Constructor( child, currentNamespace, this ) ); break; // field case CXCursor_FieldDecl: m_fields.emplace_back( new Field( child, currentNamespace, this ) ); break; // static field case CXCursor_VarDecl: m_staticFields.emplace_back( new Global( child, Namespace( ), this ) ); break; // method / static method case CXCursor_CXXMethod: if (child.IsStatic( )) { m_staticMethods.emplace_back( new Function( child, Namespace( ), this ) ); } else { m_methods.emplace_back( new Method( child, currentNamespace, this ) ); } break; default: break; } } }
BaseClass::BaseClass(const Cursor &cursor) : name( cursor.GetType( ).GetCanonicalType( ).GetDisplayName( ) ) { }