Commit b9ad9a03 authored by Dimitri van Heesch's avatar Dimitri van Heesch
Browse files

Bug 736992 - Member functions omitted from tagfile

parent dec53d22
Loading
Loading
Loading
Loading
+106 −58
Original line number Original line Diff line number Diff line
@@ -1243,24 +1243,6 @@ void ClassDef::writeInheritanceGraph(OutputList &ol)


        if (cd->isLinkable())
        if (cd->isLinkable())
        {
        {
          if (!Config_getString("GENERATE_TAGFILE").isEmpty())
          {
            Doxygen::tagFile << "    <base";
            if (bcd->prot==Protected)
            {
              Doxygen::tagFile << " protection=\"protected\"";
            }
            else if (bcd->prot==Private)
            {
              Doxygen::tagFile << " protection=\"private\"";
            }
            if (bcd->virt==Virtual)
            {
              Doxygen::tagFile << " virtualness=\"virtual\"";
            }
            Doxygen::tagFile << ">" << convertToXML(cd->name())
                             << "</base>" << endl;
          }
          ol.writeObjectLink(cd->getReference(),
          ol.writeObjectLink(cd->getReference(),
                             cd->getOutputFileBase(),
                             cd->getOutputFileBase(),
                             cd->anchor(),
                             cd->anchor(),
@@ -1574,25 +1556,23 @@ void ClassDef::writeSummaryLinks(OutputList &ol)
  ol.popGeneratorState();
  ol.popGeneratorState();
}
}


void ClassDef::writeTagFileMarker()
void ClassDef::writeTagFile(FTextStream &tagFile)
{
{
  // write section to the tag file
  if (!isLinkableInProject()) return;
  if (!Config_getString("GENERATE_TAGFILE").isEmpty())
  tagFile << "  <compound kind=\"" << compoundTypeString();
  {
  tagFile << "\"";
    Doxygen::tagFile << "  <compound kind=\"" << compoundTypeString();
  if (isObjectiveC()) { tagFile << " objc=\"yes\""; }
    Doxygen::tagFile << "\"";
  tagFile << ">" << endl;
    if (isObjectiveC()) { Doxygen::tagFile << " objc=\"yes\""; }
  tagFile << "    <name>" << convertToXML(name()) << "</name>" << endl;
    Doxygen::tagFile << ">" << endl;
  tagFile << "    <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl;
    Doxygen::tagFile << "    <name>" << convertToXML(name()) << "</name>" << endl;
    Doxygen::tagFile << "    <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl;
  if (!anchor().isEmpty())
  if (!anchor().isEmpty())
  {
  {
      Doxygen::tagFile << "    <anchor>" << convertToXML(anchor()) << "</anchor>" << endl;
    tagFile << "    <anchor>" << convertToXML(anchor()) << "</anchor>" << endl;
  }
  }
  QCString idStr = id();
  QCString idStr = id();
  if (!idStr.isEmpty())
  if (!idStr.isEmpty())
  {
  {
      Doxygen::tagFile << "    <clangid>" << convertToXML(idStr) << "</clangid>" << endl;
    tagFile << "    <clangid>" << convertToXML(idStr) << "</clangid>" << endl;
  }
  }
  if (m_impl->tempArgs)
  if (m_impl->tempArgs)
  {
  {
@@ -1600,11 +1580,95 @@ void ClassDef::writeTagFileMarker()
    Argument *a;
    Argument *a;
    for (;(a=ali.current());++ali)
    for (;(a=ali.current());++ali)
    {
    {
        Doxygen::tagFile << "    <templarg>" << convertToXML(a->name) << "</templarg>" << endl;
      tagFile << "    <templarg>" << convertToXML(a->name) << "</templarg>" << endl;
    }
    }
  }
  }
  if (m_impl->inherits)
  {
    BaseClassListIterator it(*m_impl->inherits);
    BaseClassDef *ibcd;
    for (it.toFirst();(ibcd=it.current());++it)
    {
      ClassDef *cd=ibcd->classDef;
      if (cd && cd->isLinkable())
      {
        if (!Config_getString("GENERATE_TAGFILE").isEmpty())
        {
          tagFile << "    <base";
          if (ibcd->prot==Protected)
          {
            tagFile << " protection=\"protected\"";
          }
          else if (ibcd->prot==Private)
          {
            tagFile << " protection=\"private\"";
          }
          if (ibcd->virt==Virtual)
          {
            tagFile << " virtualness=\"virtual\"";
          }
          tagFile << ">" << convertToXML(cd->name()) << "</base>" << endl;
        }
        }
      }
      }
    }
  }
  QListIterator<LayoutDocEntry> eli(
      LayoutDocManager::instance().docEntries(LayoutDocManager::Class));
  LayoutDocEntry *lde;
  for (eli.toFirst();(lde=eli.current());++eli)
  {
    switch (lde->kind())
    {
      case LayoutDocEntry::ClassNestedClasses:
        {
          if (m_impl->innerClasses)
          {
            ClassSDict::Iterator cli(*m_impl->innerClasses);
            ClassDef *innerCd;
            for (cli.toFirst();(innerCd=cli.current());++cli)
            {
              if (innerCd->isLinkableInProject() && innerCd->templateMaster()==0 &&
                  protectionLevelVisible(innerCd->protection()) &&
                  !innerCd->isEmbeddedInOuterScope()
                 )
              {
                tagFile << "    <class kind=\"" << innerCd->compoundTypeString() <<
                  "\">" << convertToXML(innerCd->name()) << "</class>" << endl;
              }
            }
          }
        }
        break;
      case LayoutDocEntry::MemberDecl:
        {
          LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
          MemberList * ml = getMemberList(lmd->type);
          if (ml)
          {
            ml->writeTagFile(tagFile);
          }
        }
        break;
      case LayoutDocEntry::MemberGroups:
        {
          if (m_impl->memberGroupSDict)
          {
            MemberGroupSDict::Iterator mgli(*m_impl->memberGroupSDict);
            MemberGroup *mg;
            for (;(mg=mgli.current());++mgli)
            {
              mg->writeTagFile(tagFile);
            }
          }
        }
        break;
     default:
        break;
    }
  }
  writeDocAnchorsToTagFile(tagFile);
  tagFile << "  </compound>" << endl;
}


/** Write class documentation inside another container (i.e. a group) */
/** Write class documentation inside another container (i.e. a group) */
void ClassDef::writeInlineDocumentation(OutputList &ol)
void ClassDef::writeInlineDocumentation(OutputList &ol)
@@ -1722,9 +1786,6 @@ void ClassDef::writeInlineDocumentation(OutputList &ol)
    ol.endIndent();
    ol.endIndent();
  }
  }
  ol.popGeneratorState();
  ol.popGeneratorState();

  // part 4: write tag file information
  writeTagFileMarker();
}
}


void ClassDef::writeMoreLink(OutputList &ol,const QCString &anchor)
void ClassDef::writeMoreLink(OutputList &ol,const QCString &anchor)
@@ -1810,12 +1871,6 @@ void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *heade
      ol.startMemberList();
      ol.startMemberList();
      found=TRUE;
      found=TRUE;
    }
    }
    if (!Config_getString("GENERATE_TAGFILE").isEmpty() &&
        !isReference())  // skip classes found in tag files
    {
      Doxygen::tagFile << "    <class kind=\"" << compoundTypeString()
        << "\">" << convertToXML(name()) << "</class>" << endl;
    }
    ol.startMemberDeclaration();
    ol.startMemberDeclaration();
    ol.startMemberItem(anchor(),FALSE);
    ol.startMemberItem(anchor(),FALSE);
    QCString ctype = compoundTypeString();
    QCString ctype = compoundTypeString();
@@ -1903,8 +1958,6 @@ void ClassDef::writeDocumentationContents(OutputList &ol,const QCString & /*page
  pageType += compoundTypeString();
  pageType += compoundTypeString();
  toupper(pageType.at(1));
  toupper(pageType.at(1));


  writeTagFileMarker();

  Doxygen::indexList->addIndexItem(this,0);
  Doxygen::indexList->addIndexItem(this,0);


  if (Doxygen::searchIndex)
  if (Doxygen::searchIndex)
@@ -2017,11 +2070,6 @@ void ClassDef::writeDocumentationContents(OutputList &ol,const QCString & /*page
    }
    }
  }
  }


  if (!Config_getString("GENERATE_TAGFILE").isEmpty())
  {
    writeDocAnchorsToTagFile();
    Doxygen::tagFile << "  </compound>" << endl;
  }
  ol.endContents();
  ol.endContents();
}
}


@@ -4199,14 +4247,14 @@ void ClassDef::writeMemberDeclarations(OutputList &ol,MemberListType lt,const QC
    if (ml)
    if (ml)
    {
    {
      //printf("  writeDeclaration type=%d count=%d\n",lt,ml->numDecMembers());
      //printf("  writeDeclaration type=%d count=%d\n",lt,ml->numDecMembers());
      ml->writeDeclarations(ol,this,0,0,0,tt,st,definitionType(),FALSE,showInline,inheritedFrom,lt);
      ml->writeDeclarations(ol,this,0,0,0,tt,st,FALSE,showInline,inheritedFrom,lt);
      tt.resize(0);
      tt.resize(0);
      st.resize(0);
      st.resize(0);
    }
    }
    if (ml2)
    if (ml2)
    {
    {
      //printf("  writeDeclaration type=%d count=%d\n",lt2,ml2->numDecMembers());
      //printf("  writeDeclaration type=%d count=%d\n",lt2,ml2->numDecMembers());
      ml2->writeDeclarations(ol,this,0,0,0,tt,st,definitionType(),FALSE,showInline,inheritedFrom,lt);
      ml2->writeDeclarations(ol,this,0,0,0,tt,st,FALSE,showInline,inheritedFrom,lt);
    }
    }
    static bool inlineInheritedMembers = Config_getBool("INLINE_INHERITED_MEMB");
    static bool inlineInheritedMembers = Config_getBool("INLINE_INHERITED_MEMB");
    if (!inlineInheritedMembers) // show inherited members as separate lists
    if (!inlineInheritedMembers) // show inherited members as separate lists
@@ -4261,7 +4309,7 @@ void ClassDef::writePlainMemberDeclaration(OutputList &ol,
  if (ml)
  if (ml)
  {
  {
    ml->setInGroup(inGroup);
    ml->setInGroup(inGroup);
    ml->writePlainDeclarations(ol,this,0,0,0,definitionType(),inheritedFrom,inheritId);
    ml->writePlainDeclarations(ol,this,0,0,0,inheritedFrom,inheritId);
  }
  }
}
}


+2 −1
Original line number Original line Diff line number Diff line
@@ -46,6 +46,7 @@ class StringDict;
struct IncludeInfo;
struct IncludeInfo;
class ClassDefImpl;
class ClassDefImpl;
class ArgumentList;
class ArgumentList;
class FTextStream;


/** A class representing of a compound symbol.
/** A class representing of a compound symbol.
 *
 *
@@ -391,6 +392,7 @@ class ClassDef : public Definition
                              ClassDef *inheritedFrom,const QCString &inheritId);
                              ClassDef *inheritedFrom,const QCString &inheritId);
    int countMembersIncludingGrouped(MemberListType lt,ClassDef *inheritedFrom,bool additional);
    int countMembersIncludingGrouped(MemberListType lt,ClassDef *inheritedFrom,bool additional);
    int countInheritanceNodes();
    int countInheritanceNodes();
    void writeTagFile(FTextStream &);
    
    
    bool visited;
    bool visited;


@@ -400,7 +402,6 @@ class ClassDef : public Definition
    void showUsedFiles(OutputList &ol);
    void showUsedFiles(OutputList &ol);


  private: 
  private: 
    void writeTagFileMarker();
    void writeDocumentationContents(OutputList &ol,const QCString &pageTitle);
    void writeDocumentationContents(OutputList &ol,const QCString &pageTitle);
    void internalInsertMember(MemberDef *md,Protection prot,bool addToAllList);
    void internalInsertMember(MemberDef *md,Protection prot,bool addToAllList);
    void addMemberToList(MemberListType lt,MemberDef *md,bool isBrief);
    void addMemberToList(MemberListType lt,MemberDef *md,bool isBrief);
+6 −8
Original line number Original line Diff line number Diff line
@@ -511,9 +511,9 @@ void Definition::addSectionsToIndex()
  }
  }
}
}


void Definition::writeDocAnchorsToTagFile()
void Definition::writeDocAnchorsToTagFile(FTextStream &tagFile)
{
{
  if (!Config_getString("GENERATE_TAGFILE").isEmpty() && m_impl->sectionDict)
  if (m_impl->sectionDict)
  {
  {
    //printf("%s: writeDocAnchorsToTagFile(%d)\n",name().data(),m_impl->sectionDict->count());
    //printf("%s: writeDocAnchorsToTagFile(%d)\n",name().data(),m_impl->sectionDict->count());
    SDict<SectionInfo>::Iterator sdi(*m_impl->sectionDict);
    SDict<SectionInfo>::Iterator sdi(*m_impl->sectionDict);
@@ -523,15 +523,13 @@ void Definition::writeDocAnchorsToTagFile()
      if (!si->generated)
      if (!si->generated)
      {
      {
        //printf("write an entry!\n");
        //printf("write an entry!\n");
        if (definitionType()==TypeMember) Doxygen::tagFile << "  ";
        if (definitionType()==TypeMember) tagFile << "  ";
        Doxygen::tagFile << "    <docanchor file=\"" 
        tagFile << "    <docanchor file=\"" << si->fileName << "\"";
                         << si->fileName << "\"";
        if (!si->title.isEmpty())
        if (!si->title.isEmpty())
        {
        {
          Doxygen::tagFile << " title=\"" << convertToXML(si->title) << "\"";
          tagFile << " title=\"" << convertToXML(si->title) << "\"";
        }
        }
        Doxygen::tagFile << ">" << si->label 
        tagFile << ">" << si->label << "</docanchor>" << endl;
                         << "</docanchor>" << endl;
      }
      }
    }
    }
  }
  }
+2 −1
Original line number Original line Diff line number Diff line
@@ -34,6 +34,7 @@ struct ListItemInfo;
struct SectionInfo;
struct SectionInfo;
class Definition;
class Definition;
class DefinitionImpl;
class DefinitionImpl;
class FTextStream;
  
  
/** Data associated with a detailed description. */
/** Data associated with a detailed description. */
struct DocInfo
struct DocInfo
@@ -334,7 +335,7 @@ class Definition : public DefinitionIntf
    /*! Writes the documentation anchors of the definition to 
    /*! Writes the documentation anchors of the definition to 
     *  the Doxygen::tagFile stream.
     *  the Doxygen::tagFile stream.
     */
     */
    void writeDocAnchorsToTagFile();
    void writeDocAnchorsToTagFile(FTextStream &);
    void setLocalName(const QCString name);
    void setLocalName(const QCString name);


    void addSectionsToIndex();
    void addSectionsToIndex();
+47 −22
Original line number Original line Diff line number Diff line
@@ -235,10 +235,6 @@ void DirDef::writeSubDirList(OutputList &ol)
      ol.insertMemberAlign();
      ol.insertMemberAlign();
      ol.writeObjectLink(dd->getReference(),dd->getOutputFileBase(),0,dd->shortName());
      ol.writeObjectLink(dd->getReference(),dd->getOutputFileBase(),0,dd->shortName());
      ol.endMemberItem();
      ol.endMemberItem();
      if (!Config_getString("GENERATE_TAGFILE").isEmpty()) 
      {
        Doxygen::tagFile << "    <dir>" << convertToXML(dd->displayName()) << "</dir>" << endl;
      }
      if (!dd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
      if (!dd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
      {
      {
        ol.startMemberDescription(dd->getOutputFileBase());
        ol.startMemberDescription(dd->getOutputFileBase());
@@ -297,10 +293,6 @@ void DirDef::writeFileList(OutputList &ol)
        ol.endTextLink();
        ol.endTextLink();
        ol.popGeneratorState();
        ol.popGeneratorState();
      }
      }
      if (!Config_getString("GENERATE_TAGFILE").isEmpty()) 
      {
        Doxygen::tagFile << "    <file>" << convertToXML(fd->name()) << "</file>" << endl;
      }
      ol.endMemberItem();
      ol.endMemberItem();
      if (!fd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
      if (!fd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
      {
      {
@@ -341,6 +333,53 @@ bool DirDef::hasDetailedDescription() const
  return (!briefDescription().isEmpty() && repeatBrief) || !documentation().isEmpty();
  return (!briefDescription().isEmpty() && repeatBrief) || !documentation().isEmpty();
}
}


void DirDef::writeTagFile(FTextStream &tagFile)
{
  tagFile << "  <compound kind=\"dir\">" << endl;
  tagFile << "    <name>" << convertToXML(displayName()) << "</name>" << endl;
  tagFile << "    <path>" << convertToXML(name()) << "</path>" << endl;
  tagFile << "    <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl;
  QListIterator<LayoutDocEntry> eli(
      LayoutDocManager::instance().docEntries(LayoutDocManager::Directory));
  LayoutDocEntry *lde;
  for (eli.toFirst();(lde=eli.current());++eli)
  {
    switch (lde->kind())
    {
      case LayoutDocEntry::DirSubDirs:
        {
          if (m_subdirs.count()>0)
          {
            DirDef *dd;
            QListIterator<DirDef> it(m_subdirs);
            for (;(dd=it.current());++it)
            {
              tagFile << "    <dir>" << convertToXML(dd->displayName()) << "</dir>" << endl;
            }
          }
        }
        break;
      case LayoutDocEntry::DirFiles:
        {
          if (m_fileList->count()>0)
          {
            QListIterator<FileDef> it(*m_fileList);
            FileDef *fd;
            for (;(fd=it.current());++it)
            {
              tagFile << "    <file>" << convertToXML(fd->name()) << "</file>" << endl;
            }
          }
        }
        break;
      default:
        break;
    }
  }
  writeDocAnchorsToTagFile(tagFile);
  tagFile << "  </compound>" << endl;
}

void DirDef::writeDocumentation(OutputList &ol)
void DirDef::writeDocumentation(OutputList &ol)
{
{
  static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
  static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
@@ -367,14 +406,6 @@ void DirDef::writeDocumentation(OutputList &ol)
  endTitle(ol,getOutputFileBase(),title);
  endTitle(ol,getOutputFileBase(),title);
  ol.startContents();
  ol.startContents();


  if (!Config_getString("GENERATE_TAGFILE").isEmpty()) 
  {
    Doxygen::tagFile << "  <compound kind=\"dir\">" << endl;
    Doxygen::tagFile << "    <name>" << convertToXML(displayName()) << "</name>" << endl;
    Doxygen::tagFile << "    <path>" << convertToXML(name()) << "</path>" << endl;
    Doxygen::tagFile << "    <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl;
  }
  
  //---------------------------------------- start flexible part -------------------------------
  //---------------------------------------- start flexible part -------------------------------


  SrcLangExt lang = getLanguage();
  SrcLangExt lang = getLanguage();
@@ -450,12 +481,6 @@ void DirDef::writeDocumentation(OutputList &ol)


  //---------------------------------------- end flexible part -------------------------------
  //---------------------------------------- end flexible part -------------------------------


  if (!Config_getString("GENERATE_TAGFILE").isEmpty()) 
  {
    writeDocAnchorsToTagFile();
    Doxygen::tagFile << "  </compound>" << endl;
  }

  ol.endContents();
  ol.endContents();


  endFileWithNavPath(this,ol);
  endFileWithNavPath(this,ol);
Loading