diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/classdef.cpp | 21 | ||||
-rw-r--r-- | src/classdef.h | 1 | ||||
-rw-r--r-- | src/dotclassgraph.cpp | 2 | ||||
-rw-r--r-- | src/doxygen.cpp | 72 | ||||
-rw-r--r-- | src/doxygen.h | 1 | ||||
-rw-r--r-- | src/markdown.cpp | 2 |
6 files changed, 47 insertions, 52 deletions
diff --git a/src/classdef.cpp b/src/classdef.cpp index 315f3f6..ff39e29 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -82,12 +82,6 @@ static QCString makeQualifiedNameWithTemplateParameters(const ClassDef *cd, bool isSpecialization = cd->localName().find('<')!=-1; QCString clName = cd->className(); - //bool isGeneric = getLanguage()==SrcLangExt_CSharp; - //if (isGeneric && clName.right(2)=="-g") - //{ - // clName = clName.left(clName.length()-2); - //} - //printf("m_impl->lang=%d clName=%s isSpecialization=%d\n",getLanguage(),clName.data(),isSpecialization); scName+=clName; if (!cd->templateArguments().empty()) { @@ -239,7 +233,6 @@ class ClassDefImpl : public DefinitionMixin<ClassDefMutable> virtual const ClassDef *tagLessReference() const; virtual MemberDef *isSmartPointer() const; virtual bool isJavaEnum() const; - virtual bool isGeneric() const; virtual QCString title() const; virtual QCString generatedFromFiles() const; virtual const FileList &usedFiles() const; @@ -522,8 +515,6 @@ class ClassDefAliasImpl : public DefinitionAliasMixin<ClassDef> { return getCdAlias()->isSmartPointer(); } virtual bool isJavaEnum() const { return getCdAlias()->isJavaEnum(); } - virtual bool isGeneric() const - { return getCdAlias()->isGeneric(); } virtual QCString title() const { return getCdAlias()->title(); } virtual QCString generatedFromFiles() const @@ -725,8 +716,6 @@ class ClassDefImpl::IMPL /** Does this class represent a Java style enum? */ bool isJavaEnum = false; - bool isGeneric = false; - uint64 spec = 0; QCString metaData; @@ -783,7 +772,6 @@ void ClassDefImpl::IMPL::init(const char *defFileName, const char *name, { isLocal=FALSE; } - isGeneric = (lang==SrcLangExt_CSharp || lang==SrcLangExt_Java) && QCString(name).find('<')!=-1; } ClassDefImpl::IMPL::IMPL() : vhdlSummaryTitles(17) @@ -4044,11 +4032,11 @@ ClassDef *ClassDefImpl::insertTemplateInstance(const QCString &fileName, ClassDefMutable *templateClass=toClassDefMutable(m_impl->templateInstances->find(templSpec)); if (templateClass==0) { - Debug::print(Debug::Classes,0," New template instance class '%s''%s'\n",qPrint(name()),qPrint(templSpec)); QCString tcname = removeRedundantWhiteSpace(localName()+templSpec); + Debug::print(Debug::Classes,0," New template instance class '%s''%s' inside '%s' hidden=%d\n",qPrint(name()),qPrint(templSpec),qPrint(name()),isHidden()); templateClass = toClassDefMutable( - Doxygen::classLinkedMap->add(tcname, + Doxygen::hiddenClassLinkedMap->add(tcname, std::unique_ptr<ClassDef>( new ClassDefImpl(fileName,startLine,startColumn,tcname,ClassDef::Class)))); templateClass->setTemplateMaster(this); @@ -5023,11 +5011,6 @@ bool ClassDefImpl::isJavaEnum() const return m_impl->isJavaEnum; } -bool ClassDefImpl::isGeneric() const -{ - return m_impl->isGeneric; -} - void ClassDefImpl::setClassSpecifier(uint64 spec) { m_impl->spec = spec; diff --git a/src/classdef.h b/src/classdef.h index 6d2bbef..62db01e 100644 --- a/src/classdef.h +++ b/src/classdef.h @@ -340,7 +340,6 @@ class ClassDef : public Definition virtual bool isJavaEnum() const = 0; - virtual bool isGeneric() const = 0; virtual QCString title() const = 0; virtual QCString generatedFromFiles() const = 0; diff --git a/src/dotclassgraph.cpp b/src/dotclassgraph.cpp index 4077d5b..be318e4 100644 --- a/src/dotclassgraph.cpp +++ b/src/dotclassgraph.cpp @@ -38,7 +38,7 @@ void DotClassGraph::addClass(const ClassDef *cd,DotNode *n,int prot, } else if (templSpec) // name has a template part { - className=insertTemplateSpecifierInScope(cd->name(),templSpec); + className=insertTemplateSpecifierInScope(cd->displayName(),templSpec); } else // just a normal name { diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 64e5ac3..f13a4a8 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -161,7 +161,6 @@ int Doxygen::subpageNestingLevel = 0; bool Doxygen::userComments = FALSE; QCString Doxygen::spaces; bool Doxygen::generatingXmlOutput = FALSE; -GenericsSDict *Doxygen::genericsDict; DefinesPerFileList Doxygen::macroDefinitions; bool Doxygen::clangAssistedParsing = FALSE; @@ -977,8 +976,8 @@ static void addClassToContext(const Entry *root) // see if we already found the class before ClassDefMutable *cd = getClassMutable(qualifiedName); - //Debug::print(Debug::Classes,0, " Found class with name %s (qualifiedName=%s -> cd=%p)\n", - // cd ? qPrint(cd->name()) : qPrint(root->name), qPrint(qualifiedName),cd); + Debug::print(Debug::Classes,0, " Found class with name %s (qualifiedName=%s -> cd=%p)\n", + cd ? qPrint(cd->name()) : qPrint(root->name), qPrint(qualifiedName),cd); if (cd) { @@ -1046,7 +1045,7 @@ static void addClassToContext(const Entry *root) } } std::unique_ptr<ArgumentList> tArgList; - if ((root->lang==SrcLangExt_CSharp || root->lang==SrcLangExt_Java) && (i=fullName.find('<'))!=-1) + if ((root->lang==SrcLangExt_CSharp || root->lang==SrcLangExt_Java) && (i=fullName.findRev('<'))!=-1) { // a Java/C# generic class looks like a C++ specialization, so we need to split the // name and template arguments here @@ -1064,8 +1063,8 @@ static void addClassToContext(const Entry *root) std::unique_ptr<ClassDef>( createClassDef(tagInfo?tagName:root->fileName,root->startLine,root->startColumn, fullName,sec,tagName,refFileName,TRUE,root->spec&Entry::Enum) ))); - Debug::print(Debug::Classes,0," New class '%s' (sec=0x%08x)! #tArgLists=%d tagInfo=%p\n", - qPrint(fullName),sec,root->tArgLists.size(), tagInfo); + Debug::print(Debug::Classes,0," New class '%s' (sec=0x%08x)! #tArgLists=%d tagInfo=%p hidden=%d artificial=%d\n", + qPrint(fullName),sec,root->tArgLists.size(), tagInfo,root->hidden,root->artificial); cd->setDocumentation(root->doc,root->docFile,root->docLine); // copy docs to definition cd->setBriefDescription(root->brief,root->briefFile,root->briefLine); cd->setLanguage(root->lang); @@ -1097,11 +1096,6 @@ static void addClassToContext(const Entry *root) cd->insertUsedFile(fd); - if (cd->isGeneric()) // generics are also stored in a separate dictionary for fast lookup of instances - { - //printf("inserting generic '%s' cd=%p\n",fullName.data(),cd); - Doxygen::genericsDict->insert(fullName,cd); - } } cd->addSectionsToDefinition(root->anchors); @@ -1855,7 +1849,7 @@ static void findUsingDeclarations(const Entry *root) Debug::print(Debug::Classes,0," New using class '%s' (sec=0x%08x)! #tArgLists=%d\n", qPrint(name),root->section,root->tArgLists.size()); usingCd = toClassDefMutable( - Doxygen::hiddenClassLinkedMap->add(root->name, + Doxygen::hiddenClassLinkedMap->add(name, std::unique_ptr<ClassDef>( createClassDef( "<using>",1,1, name, ClassDef::Class)))); usingCd->setArtificial(TRUE); @@ -3841,20 +3835,17 @@ static ClassDef *findClassWithinClassContext(Definition *context,ClassDef *cd,co { result = const_cast<ClassDef*>(resolver.resolveClass(context,name,true,true)); } + //printf("1. result=%p\n",result); if (result==0) { result = const_cast<ClassDef*>(resolver.resolveClass(cd,name,true,true)); } + //printf("2. result=%p\n",result); if (result==0) // try direct class, needed for namespaced classes imported via tag files (see bug624095) { result = getClass(name); } - if (result==0 && - (cd->getLanguage()==SrcLangExt_CSharp || cd->getLanguage()==SrcLangExt_Java) && - name.find('<')!=-1) - { - result = Doxygen::genericsDict->find(name); - } + //printf("3. result=%p\n",result); //printf("** Trying to find %s within context %s class %s result=%s lookup=%p\n", // name.data(), // context ? context->name().data() : "<none>", @@ -4225,6 +4216,36 @@ static int findEndOfTemplate(const QCString &s,int startPos) return brCount==0 ? e : -1; } +static int findTemplateSpecializationPosition(const char *name) +{ + if (name==0 || name[0]=='\0') return 0; + int l = strlen(name); + if (name[l-1]=='>') // search backward to find the matching <, allowing nested <...> and strings. + { + int count=1; + int i=l-2; + char insideQuote=0; + while (count>0 && i>=0) + { + char c = name[i--]; + switch (c) + { + case '>': if (!insideQuote) count++; break; + case '<': if (!insideQuote) count--; break; + case '\'': if (!insideQuote) insideQuote=c; + else if (insideQuote==c && (i<0 || name[i]!='\\')) insideQuote=0; + break; + case '"': if (!insideQuote) insideQuote=c; + else if (insideQuote==c && (i<0 || name[i]!='\\')) insideQuote=0; + break; + default: break; + } + } + if (i>=0) l=i+1; + } + return l; +} + static bool findClassRelation( const Entry *root, Definition *context, @@ -4316,15 +4337,9 @@ static bool findClassRelation( qPrint(templSpec) ); - int i=baseClassName.find('<'); - int si=baseClassName.findRev("::",i==-1 ? baseClassName.length() : i); + int i=findTemplateSpecializationPosition(baseClassName); + int si=baseClassName.findRev("::",i); if (si==-1) si=0; - if (baseClass==0 && (root->lang==SrcLangExt_CSharp || root->lang==SrcLangExt_Java)) - { - // for Java/C# strip the template part before looking for matching - baseClass = toClassDefMutable(Doxygen::genericsDict->find(baseClassName.left(i))); - //printf("looking for '%s' result=%p\n",baseClassName.data(),baseClass); - } if (baseClass==0 && i!=-1) // base class has template specifiers { @@ -4396,6 +4411,7 @@ static bool findClassRelation( found = baseClass!=0 && baseClass!=cd; } + //printf("3. found=%d\n",found); if (!found) { // for PHP the "use A\B as C" construct map class C to A::B, so we lookup @@ -4412,7 +4428,7 @@ static bool findClassRelation( // warning: the following line doesn't work for Mixin classes (see bug 560623) // templSpec = getCanonicalTemplateSpec(cd, cd->getFileDef(), templSpec); - //printf("3. found=%d\n",found); + //printf("4. found=%d\n",found); if (found) { Debug::print(Debug::Classes,0," Documented base class '%s' templSpec=%s\n",qPrint(biName),qPrint(templSpec)); @@ -10047,7 +10063,6 @@ void initDoxygen() Doxygen::memGrpInfoDict.setAutoDelete(TRUE); Doxygen::tagDestinationDict.setAutoDelete(TRUE); Doxygen::dirRelations.setAutoDelete(TRUE); - Doxygen::genericsDict = new GenericsSDict; Doxygen::indexList = new IndexList; // initialisation of these globals depends on @@ -10080,7 +10095,6 @@ void cleanUpDoxygen() SectionManager::instance().clear(); delete Doxygen::indexList; - delete Doxygen::genericsDict; delete Doxygen::inputNameLinkedMap; delete Doxygen::includeNameLinkedMap; delete Doxygen::exampleNameLinkedMap; diff --git a/src/doxygen.h b/src/doxygen.h index a9a708d..76b8ef9 100644 --- a/src/doxygen.h +++ b/src/doxygen.h @@ -139,7 +139,6 @@ class Doxygen static int subpageNestingLevel; static QCString spaces; static bool generatingXmlOutput; - static GenericsSDict *genericsDict; static DefinesPerFileList macroDefinitions; static bool clangAssistedParsing; }; diff --git a/src/markdown.cpp b/src/markdown.cpp index 0cf8b87..4a40a35 100644 --- a/src/markdown.cpp +++ b/src/markdown.cpp @@ -2073,7 +2073,7 @@ void Markdown::writeOneLineHeaderOrRuler(const char *data,int size) { if (!id.isEmpty()) { - m_out.addStr("\\anchor "+id+"\n"); + m_out.addStr("\\anchor "+id+"\\ilinebr "); } hTag.sprintf("h%d",level); m_out.addStr("<"+hTag+">"); |