Commit 7ee74300 authored by Dimitri van Heesch's avatar Dimitri van Heesch
Browse files

Show the parent-child type specialization relation in Java/C# generics inheritance diagrams

parent 05648813
Loading
Loading
Loading
Loading
+15 −4
Original line number Original line Diff line number Diff line
@@ -1310,11 +1310,11 @@ static void addClassToContext(EntryNav *rootNav)
    QCString tagName;
    QCString tagName;
    QCString refFileName;
    QCString refFileName;
    TagInfo *tagInfo = rootNav->tagInfo();
    TagInfo *tagInfo = rootNav->tagInfo();
    int i;
    if (tagInfo)
    if (tagInfo)
    {
    {
      tagName     = tagInfo->tagName;
      tagName     = tagInfo->tagName;
      refFileName = tagInfo->fileName;
      refFileName = tagInfo->fileName;
      int i;
      if ((i=fullName.find("::"))!=-1) 
      if ((i=fullName.find("::"))!=-1) 
        // symbols imported via tag files may come without the parent scope, 
        // symbols imported via tag files may come without the parent scope, 
        // so we artificially create it here
        // so we artificially create it here
@@ -1322,6 +1322,19 @@ static void addClassToContext(EntryNav *rootNav)
        buildScopeFromQualifiedName(fullName,fullName.contains("::"),root->lang,tagInfo);
        buildScopeFromQualifiedName(fullName,fullName.contains("::"),root->lang,tagInfo);
      }
      }
    }
    }
    ArgumentList *tArgList = 0;
    if ((root->lang==SrcLangExt_CSharp || root->lang==SrcLangExt_Java) && (i=fullName.find('<'))!=-1)
    {
      // a Java/C# generic class looks like a C++ specialization, so we need to split the
      // name and template arguments here
      tArgList = new ArgumentList;
      stringToArgumentList(fullName.mid(i),tArgList);
      fullName=fullName.left(i);
    }
    else
    {
      tArgList = getTemplateArgumentsFromName(fullName,root->tArgLists);
    }
    cd=new ClassDef(root->fileName,root->startLine,root->startColumn,
    cd=new ClassDef(root->fileName,root->startLine,root->startColumn,
        fullName,sec,tagName,refFileName,TRUE,root->spec&Entry::Enum);
        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",
    Debug::print(Debug::Classes,0,"  New class `%s' (sec=0x%08x)! #tArgLists=%d tagInfo=%p\n",
@@ -1336,8 +1349,6 @@ static void addClassToContext(EntryNav *rootNav)
    cd->setTypeConstraints(root->typeConstr);   
    cd->setTypeConstraints(root->typeConstr);   
    //printf("new ClassDef %s tempArgList=%p specScope=%s\n",fullName.data(),root->tArgList,root->scopeSpec.data());    
    //printf("new ClassDef %s tempArgList=%p specScope=%s\n",fullName.data(),root->tArgList,root->scopeSpec.data());    


    ArgumentList *tArgList =    
      getTemplateArgumentsFromName(fullName,root->tArgLists);   
    //printf("class %s template args=%s\n",fullName.data(),     
    //printf("class %s template args=%s\n",fullName.data(),     
    //    tArgList ? tempArgListToString(tArgList).data() : "<none>");          
    //    tArgList ? tempArgListToString(tArgList).data() : "<none>");          
    cd->setTemplateArguments(tArgList);         
    cd->setTemplateArguments(tArgList);