Doxygen
Loading...
Searching...
No Matches
namespacedef.h File Reference

#include <src/namespacedef.h>

Include dependency graph for namespacedef.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  NamespaceLinkedMap
class  NamespaceLinkedRefMap
class  NamespaceDef
 An abstract interface of a namespace symbol. More...
class  NamespaceDefMutable

Typedefs

using NamespaceDefSet = std::unordered_set<const NamespaceDef*>

Functions

std::unique_ptr< NamespaceDef > createNamespaceDef (const DString &defFileName, int defLine, size_t defColumn, const DString &name, const DString &ref=DString(), const DString &refFile=DString(), const DString &type=DString(), bool isPublished=false)
 Factory method to create new NamespaceDef instance.
std::unique_ptr< NamespaceDef > createNamespaceDefAlias (const Definition *newScope, const NamespaceDef *nd)
 Factory method to create an alias of an existing namespace.
NamespaceDef * toNamespaceDef (Definition *d)
NamespaceDef * toNamespaceDef (DefinitionMutable *d)
const NamespaceDef * toNamespaceDef (const Definition *d)
NamespaceDefMutable * toNamespaceDefMutable (Definition *d)
void replaceNamespaceAliases (DString &name)
NamespaceDef * getResolvedNamespace (const DString &key)
NamespaceDefMutable * getResolvedNamespaceMutable (const DString &key)
bool namespaceHasNestedNamespace (const NamespaceDef *nd)
bool namespaceHasNestedConcept (const NamespaceDef *nd)
bool namespaceHasNestedClass (const NamespaceDef *nd, bool filterClasses, ClassDef::CompoundType ct)

Typedef Documentation

◆ NamespaceDefSet

using NamespaceDefSet = std::unordered_set<const NamespaceDef*>

Definition at line 39 of file namespacedef.h.

Function Documentation

◆ createNamespaceDef()

std::unique_ptr< NamespaceDef > createNamespaceDef ( const DString & defFileName,
int defLine,
size_t defColumn,
const DString & name,
const DString & ref = DString(),
const DString & refFile = DString(),
const DString & type = DString(),
bool isPublished = false )

Factory method to create new NamespaceDef instance.

Definition at line 180 of file namespacedef.cpp.

184{
185 //printf("createNamespaceDef(%s)\n",qPrint(name));
186 return std::make_unique<NamespaceDefImpl>(defFileName,defLine,defColumn,name,ref,refFile,type,isPublished);
187}

Referenced by adjustConfiguration(), buildNamespaceList(), buildScopeFromQualifiedName(), findUsingDirectives(), and NamespaceDefMutable::setInline().

◆ createNamespaceDefAlias()

std::unique_ptr< NamespaceDef > createNamespaceDefAlias ( const Definition * newScope,
const NamespaceDef * nd )

Factory method to create an alias of an existing namespace.

Used for inline namespaces.

Definition at line 268 of file namespacedef.cpp.

269{
270 auto alnd = std::make_unique<NamespaceDefAliasImpl>(newScope,nd);
271 //printf("alnd name=%s localName=%s qualifiedName=%s displayName()=%s\n",
272 // qPrint(alnd->name()),qPrint(alnd->localName()),qPrint(alnd->qualifiedName()),
273 // qPrint(alnd->displayName()));
274 return alnd;
275}

Referenced by buildNamespaceList(), and NamespaceDefMutable::setInline().

◆ getResolvedNamespace()

NamespaceDef * getResolvedNamespace ( const DString & key)

Definition at line 1906 of file namespacedef.cpp.

1907{
1908 //printf("> getResolvedNamespace(%s)\n",qPrint(name));
1909 if (name.empty()) return nullptr;
1910 StringSet namespacesTried;
1911 auto ns = getResolvedNamespaceRec(namespacesTried,NamespaceAliasInfo(name.str()));
1912 //printf("< getResolvedNamespace(%s)=%s\n",qPrint(name),ns?qPrint(ns->qualifiedName()):"nullptr");
1913 return ns;
1914}
std::set< std::string > StringSet
Definition containers.h:31
static NamespaceDef * getResolvedNamespaceRec(StringSet &namespacesTried, const NamespaceAliasInfo &aliasInfo)

References DString::empty(), getResolvedNamespaceRec(), and DString::str().

Referenced by addMemberFunction(), buildFunctionList(), buildTypedefList(), extractNamespaceName(), findUsedNamespace(), findUsingDeclImports(), findUsingDirectives(), generateClassOrGlobalLink(), generateClassOrGlobalLink(), getResolvedNamespaceMutable(), CCodeParser::parseCode(), setCallContextForVar(), NamespaceDefMutable::setInline(), and writeAlphabeticalClassList().

◆ getResolvedNamespaceMutable()

NamespaceDefMutable * getResolvedNamespaceMutable ( const DString & key)
inline

Definition at line 152 of file namespacedef.h.

153{
155}
NamespaceDef * getResolvedNamespace(const DString &key)
NamespaceDefMutable * toNamespaceDefMutable(Definition *d)

References getResolvedNamespace(), getResolvedNamespaceMutable(), and toNamespaceDefMutable().

Referenced by addEnumValuesToEnums(), addGlobalFunction(), addVariableToFile(), findEnums(), findUsingDeclarations(), findUsingDirectives(), and getResolvedNamespaceMutable().

◆ namespaceHasNestedClass()

bool namespaceHasNestedClass ( const NamespaceDef * nd,
bool filterClasses,
ClassDef::CompoundType ct )

Definition at line 1954 of file namespacedef.cpp.

1955{
1956 //printf(">namespaceHasNestedClass(%s,filterClasses=%d)\n",qPrint(nd->name()),filterClasses);
1957 for (const auto &cnd : nd->getNamespaces())
1958 {
1959 if (namespaceHasNestedClass(cnd,filterClasses,ct))
1960 {
1961 //printf("<namespaceHasNestedClass(%s,filterClasses=%d): case1\n",qPrint(nd->name()),filterClasses);
1962 return true;
1963 }
1964 }
1965
1966 ClassLinkedRefMap list = nd->getClasses();
1967 if (filterClasses)
1968 {
1969 switch (ct)
1970 {
1972 list = nd->getInterfaces();
1973 break;
1974 case ClassDef::Struct:
1975 list = nd->getStructs();
1976 break;
1978 list = nd->getExceptions();
1979 break;
1980 default:
1981 break;
1982 }
1983 }
1984
1985 for (const auto &cd : list)
1986 {
1987 //printf("candidate %s isLinkableInProject()=%d\n",qPrint(cd->name()),cd->isLinkableInProject());
1988 if (cd->isLinkableInProject())
1989 {
1990 //printf("<namespaceHasNestedClass(%s,filterClasses=%d): case2\n",qPrint(nd->name()),filterClasses);
1991 return true;
1992 }
1993 }
1994 //printf("<namespaceHasNestedClass(%s,filterClasses=%d): case3\n",qPrint(nd->name()),filterClasses);
1995 return false;
1996}
@ Interface
Definition classdef.h:108
@ Exception
Definition classdef.h:111
virtual ClassLinkedRefMap getStructs() const =0
virtual ClassLinkedRefMap getExceptions() const =0
virtual NamespaceLinkedRefMap getNamespaces() const =0
virtual ClassLinkedRefMap getClasses() const =0
virtual ClassLinkedRefMap getInterfaces() const =0
bool namespaceHasNestedClass(const NamespaceDef *nd, bool filterClasses, ClassDef::CompoundType ct)

References ClassDef::Exception, NamespaceDef::getClasses(), NamespaceDef::getExceptions(), NamespaceDef::getInterfaces(), NamespaceDef::getNamespaces(), NamespaceDef::getStructs(), ClassDef::Interface, namespaceHasNestedClass(), and ClassDef::Struct.

Referenced by namespaceHasNestedClass(), writeClassTreeInsideNamespaceElement(), and writeNamespaceTreeElement().

◆ namespaceHasNestedConcept()

bool namespaceHasNestedConcept ( const NamespaceDef * nd)

Definition at line 1930 of file namespacedef.cpp.

1931{
1932 //printf(">namespaceHasNestedConcept(%s)\n",qPrint(nd->name()));
1933 for (const auto &cnd : nd->getNamespaces())
1934 {
1936 {
1937 //printf("<namespaceHasNestedConcept(%s): case1\n",qPrint(nd->name()));
1938 return true;
1939 }
1940 }
1941 for (const auto &cnd : nd->getConcepts())
1942 {
1943 //printf("candidate %s isLinkableInProject()=%d\n",qPrint(cnd->name()),cnd->isLinkableInProject());
1944 if (cnd->isLinkableInProject())
1945 {
1946 //printf("<namespaceHasNestedConcept(%s): case2\n",qPrint(nd->name()));
1947 return true;
1948 }
1949 }
1950 //printf("<namespaceHasNestedConcept(%s): case3\n",qPrint(nd->name()));
1951 return false;
1952}
virtual ConceptLinkedRefMap getConcepts() const =0
bool namespaceHasNestedConcept(const NamespaceDef *nd)

References NamespaceDef::getConcepts(), NamespaceDef::getNamespaces(), and namespaceHasNestedConcept().

Referenced by namespaceHasNestedConcept(), and writeNamespaceTreeElement().

◆ namespaceHasNestedNamespace()

bool namespaceHasNestedNamespace ( const NamespaceDef * nd)

Definition at line 1918 of file namespacedef.cpp.

1919{
1920 for (const auto &cnd : nd->getNamespaces())
1921 {
1922 if (cnd->isLinkableInProject() && !cnd->isAnonymous())
1923 {
1924 return true;
1925 }
1926 }
1927 return false;
1928}

References NamespaceDef::getNamespaces().

Referenced by writeNamespaceTreeElement().

◆ replaceNamespaceAliases()

void replaceNamespaceAliases ( DString & name)

Definition at line 1898 of file namespacedef.cpp.

1899{
1900 //printf("> replaceNamespaceAliases(%s)\n",qPrint(name));
1901 StringSet namespacesTried;
1902 name = replaceNamespaceAliasesRec(namespacesTried,name);
1903 //printf("< replaceNamespaceAliases: result=%s\n",qPrint(name));
1904}
static DString replaceNamespaceAliasesRec(StringSet &namespacesTried, const DString &name)

References replaceNamespaceAliasesRec().

Referenced by findClassRelation(), findUsedClassesForClass(), getMemberFromSymbol(), SymbolResolver::Private::getResolvedSymbolRec(), SymbolResolver::Private::getResolvedTypeRec(), and NamespaceDefMutable::setInline().

◆ toNamespaceDef() [1/3]

const NamespaceDef * toNamespaceDef ( const Definition * d)

Definition at line 1783 of file namespacedef.cpp.

1784{
1785 if (d && (typeid(*d)==typeid(NamespaceDefImpl) || typeid(*d)==typeid(NamespaceDefAliasImpl)))
1786 {
1787 return static_cast<const NamespaceDef*>(d);
1788 }
1789 else
1790 {
1791 return nullptr;
1792 }
1793}
An abstract interface of a namespace symbol.

◆ toNamespaceDef() [2/3]

◆ toNamespaceDef() [3/3]

NamespaceDef * toNamespaceDef ( DefinitionMutable * d)

Definition at line 1769 of file namespacedef.cpp.

1770{
1771 Definition *d = toDefinition(md);
1772 if (d && typeid(*d)==typeid(NamespaceDefImpl))
1773 {
1774 return static_cast<NamespaceDef*>(d);
1775 }
1776 else
1777 {
1778 return nullptr;
1779 }
1780}
The common base class of all entity definitions found in the sources.
Definition definition.h:77
Definition * toDefinition(DefinitionMutable *dm)

References toDefinition().

◆ toNamespaceDefMutable()