Skip to content

Commit 04457ac

Browse files
authored
Merge pull request doxygen#12215 from albert-github/feature/bug_membertype
Creating some helper functions for the `enum class MemberType`
2 parents 9699f77 + 66c3be0 commit 04457ac

7 files changed

Lines changed: 83 additions & 152 deletions

File tree

src/defgen.cpp

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -87,27 +87,9 @@ static void generateDEFForMember(const MemberDef *md,
8787
memPrefix.append( prefix );
8888
memPrefix.append( "-mem-" );
8989

90-
QCString memType;
91-
bool isFunc=FALSE;
92-
switch (md->memberType())
93-
{
94-
case MemberType::Define: memType="define"; break;
95-
case MemberType::EnumValue: ASSERT(0); break;
96-
case MemberType::Property: memType="property"; break;
97-
case MemberType::Event: memType="event"; break;
98-
case MemberType::Variable: memType="variable"; break;
99-
case MemberType::Typedef: memType="typedef"; break;
100-
case MemberType::Enumeration: memType="enum"; break;
101-
case MemberType::Interface: memType="interface"; break;
102-
case MemberType::Service: memType="service"; break;
103-
case MemberType::Sequence: memType="sequence"; break;
104-
case MemberType::Dictionary: memType="dictionary"; break;
105-
case MemberType::Function: memType="function"; isFunc=TRUE; break;
106-
case MemberType::Signal: memType="signal"; isFunc=TRUE; break;
107-
case MemberType::Friend: memType="friend"; isFunc=TRUE; break;
108-
case MemberType::DCOP: memType="dcop"; isFunc=TRUE; break;
109-
case MemberType::Slot: memType="slot"; isFunc=TRUE; break;
110-
}
90+
if (md->memberType() == MemberType::EnumValue) ASSERT(0);
91+
bool isFunc=to_isFunction(md->memberType());
92+
QCString memType = to_string_lower(md->memberType());
11193

11294
t << memPrefix << "kind = '" << memType << "';\n";
11395
t << memPrefix << "id = '"

src/memberdef.cpp

Lines changed: 15 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -4097,26 +4097,15 @@ void MemberDefImpl::writeMemberDocSimple(OutputList &ol, const Definition *conta
40974097

40984098
QCString MemberDefImpl::memberTypeName() const
40994099
{
4100-
switch (m_mtype)
4101-
{
4102-
case MemberType::Define: return "macro definition";
4103-
case MemberType::Function: return "function";
4104-
case MemberType::Variable: return "variable";
4105-
case MemberType::Typedef: return "typedef";
4106-
case MemberType::Enumeration: return "enumeration";
4107-
case MemberType::EnumValue: return "enumvalue";
4108-
case MemberType::Signal: return "signal";
4109-
case MemberType::Slot: return "slot";
4110-
case MemberType::Friend: return "friend";
4111-
case MemberType::DCOP: return "dcop";
4112-
case MemberType::Property: return "property";
4113-
case MemberType::Event: return "event";
4114-
case MemberType::Interface: return "interface";
4115-
case MemberType::Service: return "service";
4116-
case MemberType::Sequence: return "sequence";
4117-
case MemberType::Dictionary: return "dictionary";
4118-
default: return "unknown";
4100+
if (m_mtype == MemberType::Define)
4101+
{
4102+
return "macro definition";
4103+
}
4104+
else if (m_mtype == MemberType::Enumeration)
4105+
{
4106+
return "enumeration";
41194107
}
4108+
return to_string_lower(m_mtype);
41204109
}
41214110

41224111
void MemberDefImpl::warnIfUndocumented() const
@@ -4627,24 +4616,13 @@ void MemberDefImpl::writeTagFile(TextStream &tagFile,bool useQualifiedName,bool
46274616
if (!isLinkableInProject()) return;
46284617
if (!showNamespaceMembers && getNamespaceDef()) return;
46294618
tagFile << " <member kind=\"";
4630-
switch (m_mtype)
4631-
{
4632-
case MemberType::Define: tagFile << "define"; break;
4633-
case MemberType::EnumValue: tagFile << "enumvalue"; break;
4634-
case MemberType::Property: tagFile << "property"; break;
4635-
case MemberType::Event: tagFile << "event"; break;
4636-
case MemberType::Variable: tagFile << "variable"; break;
4637-
case MemberType::Typedef: tagFile << "typedef"; break;
4638-
case MemberType::Enumeration: tagFile << "enumeration"; break;
4639-
case MemberType::Function: tagFile << "function"; break;
4640-
case MemberType::Signal: tagFile << "signal"; break;
4641-
case MemberType::Friend: tagFile << "friend"; break;
4642-
case MemberType::DCOP: tagFile << "dcop"; break;
4643-
case MemberType::Slot: tagFile << "slot"; break;
4644-
case MemberType::Interface: tagFile << "interface"; break;
4645-
case MemberType::Service: tagFile << "service"; break;
4646-
case MemberType::Sequence: tagFile << "sequence"; break;
4647-
case MemberType::Dictionary: tagFile << "dictionary"; break;
4619+
if (m_mtype == MemberType::Enumeration)
4620+
{
4621+
tagFile << "enumeration";
4622+
}
4623+
else
4624+
{
4625+
tagFile << to_string_lower(m_mtype);
46484626
}
46494627
if (m_prot!=Protection::Public)
46504628
{

src/message.h

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -204,27 +204,7 @@ template<> struct fmt::formatter<SrcLangExt> : formatter<std::string>
204204
template<> struct fmt::formatter<MemberType> : formatter<std::string>
205205
{
206206
auto format(MemberType mtype, format_context& ctx) const {
207-
std::string result="Unknown";
208-
switch (mtype)
209-
{
210-
case MemberType::Define: result="Define"; break;
211-
case MemberType::Function: result="Function"; break;
212-
case MemberType::Variable: result="Variable"; break;
213-
case MemberType::Typedef: result="Typedef"; break;
214-
case MemberType::Enumeration: result="Enumeration"; break;
215-
case MemberType::EnumValue: result="EnumValue"; break;
216-
case MemberType::Signal: result="Signal"; break;
217-
case MemberType::Slot: result="Slot"; break;
218-
case MemberType::Friend: result="Friend"; break;
219-
case MemberType::DCOP: result="DCOP"; break;
220-
case MemberType::Property: result="Property"; break;
221-
case MemberType::Event: result="Event"; break;
222-
case MemberType::Interface: result="Interface"; break;
223-
case MemberType::Service: result="Service"; break;
224-
case MemberType::Sequence: result="Sequence"; break;
225-
case MemberType::Dictionary: result="Dictionary"; break;
226-
}
227-
return formatter<std::string>::format(result, ctx);
207+
return formatter<std::string>::format(to_string(mtype), ctx);
228208
}
229209
};
230210

src/perlmodgen.cpp

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1498,28 +1498,9 @@ void PerlModGenerator::generatePerlModForMember(const MemberDef *md,const Defini
14981498
// - template arguments
14991499
// (templateArguments(), definitionTemplateParameterLists())
15001500

1501-
QCString memType;
1501+
QCString memType = to_string_lower(md->memberType());
15021502
QCString name;
1503-
bool isFunc=FALSE;
1504-
switch (md->memberType())
1505-
{
1506-
case MemberType::Define: memType="define"; break;
1507-
case MemberType::EnumValue: memType="enumvalue"; break;
1508-
case MemberType::Property: memType="property"; break;
1509-
case MemberType::Variable: memType="variable"; break;
1510-
case MemberType::Typedef: memType="typedef"; break;
1511-
case MemberType::Enumeration: memType="enum"; break;
1512-
case MemberType::Function: memType="function"; isFunc=TRUE; break;
1513-
case MemberType::Signal: memType="signal"; isFunc=TRUE; break;
1514-
case MemberType::Friend: memType="friend"; isFunc=TRUE; break;
1515-
case MemberType::DCOP: memType="dcop"; isFunc=TRUE; break;
1516-
case MemberType::Slot: memType="slot"; isFunc=TRUE; break;
1517-
case MemberType::Event: memType="event"; break;
1518-
case MemberType::Interface: memType="interface"; break;
1519-
case MemberType::Service: memType="service"; break;
1520-
case MemberType::Sequence: memType="sequence"; break;
1521-
case MemberType::Dictionary: memType="dictionary"; break;
1522-
}
1503+
bool isFunc=to_isFunction(md->memberType());
15231504

15241505
bool isFortran = md->getLanguage()==SrcLangExt::Fortran;
15251506
name = md->name();

src/sqlite3gen.cpp

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1660,19 +1660,7 @@ static void generateSqlite3ForMember(const MemberDef *md, struct Refid scope_ref
16601660
bindIntParameter(memberdef_insert,":static",md->isStatic());
16611661
bindIntParameter(memberdef_insert,":extern",md->isExternal());
16621662

1663-
bool isFunc=FALSE;
1664-
switch (md->memberType())
1665-
{
1666-
case MemberType::Function: // fall through
1667-
case MemberType::Signal: // fall through
1668-
case MemberType::Friend: // fall through
1669-
case MemberType::DCOP: // fall through
1670-
case MemberType::Slot:
1671-
isFunc=TRUE;
1672-
break;
1673-
default:
1674-
break;
1675-
}
1663+
bool isFunc=to_isFunction(md->memberType());
16761664

16771665
if (isFunc)
16781666
{

src/types.h

Lines changed: 58 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -548,26 +548,66 @@ constexpr const char *codeSymbolType2Str(CodeSymbolType type) noexcept
548548
}
549549

550550

551-
enum class MemberType
552-
{
553-
Define,
554-
Function,
555-
Variable,
556-
Typedef,
557-
Enumeration,
558-
EnumValue,
559-
Signal,
560-
Slot,
561-
Friend,
562-
DCOP,
563-
Property,
564-
Event,
565-
Interface,
566-
Service,
567-
Sequence,
568-
Dictionary
551+
#define MEMBERTYPE_SPECIFICATIONS \
552+
MEMBERTYPE(Define, define, false) \
553+
MEMBERTYPE(Function, function, true) \
554+
MEMBERTYPE(Variable, variable, false) \
555+
MEMBERTYPE(Typedef, typedef, false) \
556+
MEMBERTYPE(Enumeration, enum, false) \
557+
MEMBERTYPE(EnumValue, enumvalue, false) \
558+
MEMBERTYPE(Signal, signal, true) \
559+
MEMBERTYPE(Slot, slot, true) \
560+
MEMBERTYPE(Friend, friend, true) \
561+
MEMBERTYPE(DCOP, dcop, true) \
562+
MEMBERTYPE(Property, property, false) \
563+
MEMBERTYPE(Event, event, false) \
564+
MEMBERTYPE(Interface, interface, false) \
565+
MEMBERTYPE(Service, service, false) \
566+
MEMBERTYPE(Sequence, sequence, false) \
567+
MEMBERTYPE(Dictionary, dictionary, false)
568+
569+
enum class MemberType {
570+
#define MEMBERTYPE(x,y,z) x,
571+
MEMBERTYPE_SPECIFICATIONS
572+
#undef MEMBERTYPE
569573
};
570574

575+
[[maybe_unused]] static constexpr const char *to_string(MemberType mt) noexcept
576+
{
577+
const char *result = "Unknown";
578+
switch (mt)
579+
{
580+
#define MEMBERTYPE(x,y,z) case MemberType::x: result = #x; break;
581+
MEMBERTYPE_SPECIFICATIONS
582+
#undef MEMBERTYPE
583+
}
584+
return result;
585+
}
586+
587+
[[maybe_unused]] static constexpr const char *to_string_lower(MemberType mt) noexcept
588+
{
589+
const char *result = "unknown";
590+
switch (mt)
591+
{
592+
#define MEMBERTYPE(x,y,z) case MemberType::x: result = #y; break;
593+
MEMBERTYPE_SPECIFICATIONS
594+
#undef MEMBERTYPE
595+
}
596+
return result;
597+
}
598+
599+
[[maybe_unused]] static constexpr bool to_isFunction(MemberType mt) noexcept
600+
{
601+
bool result = false;
602+
switch (mt)
603+
{
604+
#define MEMBERTYPE(x,y,z) case MemberType::x: result = z; break;
605+
MEMBERTYPE_SPECIFICATIONS
606+
#undef MEMBERTYPE
607+
}
608+
return result;
609+
}
610+
571611
enum class FortranFormat
572612
{
573613
Unknown,

src/xmlgen.cpp

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -696,27 +696,9 @@ static void generateXMLForMember(const MemberDef *md,TextStream &ti,TextStream &
696696
// group members are only visible in their group
697697
bool groupMember = md->getGroupDef() && def->definitionType()!=Definition::TypeGroup;
698698

699-
QCString memType;
700-
bool isFunc=FALSE;
701-
switch (md->memberType())
702-
{
703-
case MemberType::Define: memType="define"; break;
704-
case MemberType::Function: memType="function"; isFunc=TRUE; break;
705-
case MemberType::Variable: memType="variable"; break;
706-
case MemberType::Typedef: memType="typedef"; break;
707-
case MemberType::Enumeration: memType="enum"; break;
708-
case MemberType::EnumValue: ASSERT(0); break;
709-
case MemberType::Signal: memType="signal"; isFunc=TRUE; break;
710-
case MemberType::Slot: memType="slot"; isFunc=TRUE; break;
711-
case MemberType::Friend: memType="friend"; isFunc=TRUE; break;
712-
case MemberType::DCOP: memType="dcop"; isFunc=TRUE; break;
713-
case MemberType::Property: memType="property"; break;
714-
case MemberType::Event: memType="event"; break;
715-
case MemberType::Interface: memType="interface"; break;
716-
case MemberType::Service: memType="service"; break;
717-
case MemberType::Sequence: memType="sequence"; break;
718-
case MemberType::Dictionary: memType="dictionary"; break;
719-
}
699+
if (md->memberType() == MemberType::EnumValue) ASSERT(0);
700+
bool isFunc=to_isFunction(md->memberType());
701+
QCString memType = to_string_lower(md->memberType());
720702

721703
QCString nameStr = md->name();
722704
QCString typeStr = md->typeString();

0 commit comments

Comments
 (0)