Skip to content

Commit a18e4c7

Browse files
committed
bug 473140 Broken anonymous union data in XML
Remove artificial anonymous identification (at the known places).
1 parent 6daf5d3 commit a18e4c7

File tree

3 files changed

+36
-19
lines changed

3 files changed

+36
-19
lines changed

src/xmlgen.cpp

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "doxygen.h"
2121
#include "message.h"
2222
#include "config.h"
23+
#include "regex.h"
2324
#include "classlist.h"
2425
#include "util.h"
2526
#include "defargs.h"
@@ -497,9 +498,15 @@ static void writeMemberReference(TextStream &t,const Definition *def,const Membe
497498

498499
}
499500

500-
static void stripQualifiers(QCString &typeStr)
501+
static void stripQualifiers(QCString &typeStr,const bool onlyAnon)
501502
{
502-
bool done=FALSE;
503+
static const reg::Ex marker(R"(::@\d+)");
504+
static const reg::Ex marker1(R"(^@\d+)");
505+
506+
typeStr = reg::replace(reg::replace(typeStr.str(),marker,""),marker1,"");
507+
if (onlyAnon) return;
508+
509+
bool done=false;
503510
typeStr.stripPrefix("friend ");
504511
while (!done)
505512
{
@@ -576,16 +583,18 @@ static void generateXMLForMember(const MemberDef *md,TextStream &ti,TextStream &
576583
case MemberType_Dictionary: memType="dictionary"; break;
577584
}
578585

586+
QCString nameStr = md->name();
587+
stripQualifiers(nameStr,true);
579588
ti << " <member refid=\"" << memberOutputFileBase(md)
580589
<< "_1" << md->anchor() << "\" kind=\"" << memType << "\"><name>"
581-
<< convertToXML(md->name()) << "</name></member>\n";
590+
<< convertToXML(nameStr) << "</name></member>\n";
582591

583592
if (groupMember)
584593
{
585594
t << " <member refid=\""
586595
<< md->getGroupDef()->getOutputFileBase()
587596
<< "_1" << md->anchor() << "\" kind=\"" << memType << "\"><name>"
588-
<< convertToXML(md->name()) << "</name></member>\n";
597+
<< convertToXML(nameStr) << "</name></member>\n";
589598
return;
590599
}
591600
else
@@ -815,11 +824,13 @@ static void generateXMLForMember(const MemberDef *md,TextStream &ti,TextStream &
815824
{
816825
writeMemberTemplateLists(md,t);
817826
QCString typeStr = md->typeString();
818-
stripQualifiers(typeStr);
827+
stripQualifiers(typeStr,false);
819828
t << " <type>";
820829
linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md,typeStr);
821830
t << "</type>\n";
822-
t << " <definition>" << convertToXML(md->definition()) << "</definition>\n";
831+
QCString defStr = md->definition();
832+
stripQualifiers(defStr,true);
833+
t << " <definition>" << convertToXML(defStr) << "</definition>\n";
823834
t << " <argsstring>" << convertToXML(md->argsString()) << "</argsstring>\n";
824835
}
825836

@@ -830,12 +841,12 @@ static void generateXMLForMember(const MemberDef *md,TextStream &ti,TextStream &
830841
t << "</type>\n";
831842
}
832843

833-
QCString name = md->name();
834-
QCString qualifiedName = md->qualifiedName();;
835-
t << " <name>" << convertToXML(name) << "</name>\n";
836-
if (name!=qualifiedName)
844+
QCString qualifiedNameStr = md->qualifiedName();;
845+
stripQualifiers(qualifiedNameStr,true);
846+
t << " <name>" << convertToXML(nameStr) << "</name>\n";
847+
if (nameStr!=qualifiedNameStr)
837848
{
838-
t << " <qualifiedname>" << convertToXML(qualifiedName) << "</qualifiedname>\n";
849+
t << " <qualifiedname>" << convertToXML(qualifiedNameStr) << "</qualifiedname>\n";
839850
}
840851

841852
if (md->memberType() == MemberType_Property)
@@ -876,7 +887,7 @@ static void generateXMLForMember(const MemberDef *md,TextStream &ti,TextStream &
876887
{
877888
t << " <param>\n";
878889
t << " <type>";
879-
linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md,md->name());
890+
linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md,nameStr);
880891
t << "</type>\n";
881892
t << " </param>\n";
882893
}
@@ -1323,7 +1334,9 @@ static void generateXMLForClass(const ClassDef *cd,TextStream &ti)
13231334
if (cd->isAbstract()) t << "\" abstract=\"yes";
13241335
t << "\">\n";
13251336
t << " <compoundname>";
1326-
writeXMLString(t,cd->name());
1337+
QCString nameStr = cd->name();
1338+
stripQualifiers(nameStr,true);
1339+
writeXMLString(t,nameStr);
13271340
t << "</compoundname>\n";
13281341
for (const auto &bcd : cd->baseClasses())
13291342
{
@@ -1478,7 +1491,9 @@ static void generateXMLForConcept(const ConceptDef *cd,TextStream &ti)
14781491
t << " <compounddef id=\"" << cd->getOutputFileBase()
14791492
<< "\" kind=\"concept\">\n";
14801493
t << " <compoundname>";
1481-
writeXMLString(t,cd->name());
1494+
QCString nameStr = cd->name();
1495+
stripQualifiers(nameStr,true);
1496+
writeXMLString(t,nameStr);
14821497
t << "</compoundname>\n";
14831498
writeIncludeInfo(cd->includeInfo(),t);
14841499
writeTemplateList(cd,t);
@@ -1535,7 +1550,9 @@ static void generateXMLForNamespace(const NamespaceDef *nd,TextStream &ti)
15351550
<< "language=\""
15361551
<< langToString(nd->getLanguage()) << "\">\n";
15371552
t << " <compoundname>";
1538-
writeXMLString(t,nd->name());
1553+
QCString nameStr = nd->name();
1554+
stripQualifiers(nameStr,true);
1555+
writeXMLString(t,nameStr);
15391556
t << "</compoundname>\n";
15401557

15411558
writeInnerClasses(nd->getClasses(),t);

testing/071/namespace_a_namespace_1_1_0d0.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
22
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="" xml:lang="en-US">
33
<compounddef id="namespace_a_namespace_1_1_0d0" kind="namespace" language="C++">
4-
<compoundname>ANamespace::@0</compoundname>
4+
<compoundname>ANamespace</compoundname>
55
<sectiondef kind="enum">
66
<memberdef kind="enum" id="namespace_a_namespace_1_1_0d0_1a96ab6574751fdf6a53ceec8a3896c45d" prot="public" static="no" strong="yes">
77
<type/>
88
<name>Boolean</name>
9-
<qualifiedname>ANamespace::@0::Boolean</qualifiedname>
9+
<qualifiedname>ANamespace::Boolean</qualifiedname>
1010
<enumvalue id="namespace_a_namespace_1_1_0d0_1a96ab6574751fdf6a53ceec8a3896c45daf8320b26d30ab433c5a54546d21f414c" prot="public">
1111
<name>False</name>
1212
<briefdescription>

testing/073/073__typed__enum_8cpp.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@
7777
</memberdef>
7878
<memberdef kind="enum" id="073__typed__enum_8cpp_1a06fc87d81c62e9abb8790b6e5713c55b" prot="public" static="no" strong="no">
7979
<type/>
80-
<name>@0</name>
80+
<name/>
8181
<enumvalue id="073__typed__enum_8cpp_1a06fc87d81c62e9abb8790b6e5713c55ba52c998ad250c15a855ff5559e6d0d1d6" prot="public">
8282
<name>Unnamed1</name>
8383
<briefdescription>
@@ -95,7 +95,7 @@
9595
</memberdef>
9696
<memberdef kind="enum" id="073__typed__enum_8cpp_1adf764cbdea00d65edcd07bb9953ad2b7" prot="public" static="no" strong="no">
9797
<type/>
98-
<name>@1</name>
98+
<name/>
9999
<enumvalue id="073__typed__enum_8cpp_1adf764cbdea00d65edcd07bb9953ad2b7a7b130af0c5cb18bfee8c60994fe1d5ee" prot="public">
100100
<name>Unnamed2</name>
101101
<briefdescription>

0 commit comments

Comments
 (0)