summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDimitri van Heesch <doxygen@gmail.com>2019-01-12 13:58:16 (GMT)
committerDimitri van Heesch <doxygen@gmail.com>2019-01-12 13:58:16 (GMT)
commit7f40e488e27bcea4bb15045df05479dc5fbd9d6d (patch)
tree9497084f8c326623c0ed92e0f6974f845ad0fa8a /src
parent121ec253945f6563ac6731e3596cd9beaa39cb72 (diff)
downloadDoxygen-7f40e488e27bcea4bb15045df05479dc5fbd9d6d.zip
Doxygen-7f40e488e27bcea4bb15045df05479dc5fbd9d6d.tar.gz
Doxygen-7f40e488e27bcea4bb15045df05479dc5fbd9d6d.tar.bz2
Added declfile, declline, and declcolumn attributes to the location element in the XML output
Diffstat (limited to 'src')
-rw-r--r--src/definition.cpp17
-rw-r--r--src/definition.h3
-rw-r--r--src/doxygen.cpp39
-rw-r--r--src/memberdef.cpp61
-rw-r--r--src/memberdef.h8
-rw-r--r--src/xmlgen.cpp8
6 files changed, 114 insertions, 22 deletions
diff --git a/src/definition.cpp b/src/definition.cpp
index 62a4e69..ae229ad 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -57,6 +57,7 @@ class DefinitionImpl
DefinitionImpl();
~DefinitionImpl();
void init(const char *df, const char *n);
+ void setDefFileName(const QCString &df);
SectionDict *sectionDict; // dictionary of all sections, not accessible
@@ -82,7 +83,7 @@ class DefinitionImpl
Definition *outerScope; // not owner
- // where the item was found
+ // where the item was defined
QCString defFileName;
QCString defFileExt;
@@ -112,7 +113,7 @@ DefinitionImpl::~DefinitionImpl()
delete inbodyDocs;
}
-void DefinitionImpl::init(const char *df, const char *n)
+void DefinitionImpl::setDefFileName(const QCString &df)
{
defFileName = df;
int lastDot = defFileName.findRev('.');
@@ -120,6 +121,11 @@ void DefinitionImpl::init(const char *df, const char *n)
{
defFileExt = defFileName.mid(lastDot);
}
+}
+
+void DefinitionImpl::init(const char *df, const char *n)
+{
+ setDefFileName(df);
QCString name = n;
if (name!="<globalScope>")
{
@@ -147,6 +153,13 @@ void DefinitionImpl::init(const char *df, const char *n)
lang = SrcLangExt_Unknown;
}
+void Definition::setDefFile(const QCString &df,int defLine,int defCol)
+{
+ m_impl->setDefFileName(df);
+ m_defLine = defLine;
+ m_defColumn = defCol;
+}
+
//-----------------------------------------------------------------------------------------
static bool matchExcludedSymbols(const char *name)
diff --git a/src/definition.h b/src/definition.h
index c0428a0..c382013 100644
--- a/src/definition.h
+++ b/src/definition.h
@@ -288,6 +288,9 @@ class Definition : public DefinitionIntf
/*! Sets a unique id for the symbol. Used for libclang integration. */
void setId(const char *name);
+ /*! Set a new file name and position */
+ void setDefFile(const QCString& df,int defLine,int defColumn);
+
/*! Sets the documentation of this definition to \a d. */
virtual void setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace=TRUE);
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index 26f7637..08d3bc7 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -2449,7 +2449,8 @@ static MemberDef *addVariableToFile(
Entry *root = rootNav->entry();
Debug::print(Debug::Variables,0,
" global variable:\n"
- " type=`%s' scope=`%s' name=`%s' args=`%s' prot=`%d mtype=%d lang=%d\n",
+ " file='%s' type=`%s' scope=`%s' name=`%s' args=`%s' prot=`%d mtype=%d lang=%d\n",
+ qPrint(root->fileName),
qPrint(root->type),
qPrint(scope),
qPrint(name),
@@ -2593,11 +2594,23 @@ static MemberDef *addVariableToFile(
)
// not a php array variable
{
-
Debug::print(Debug::Variables,0,
" variable already found: scope=%s\n",qPrint(md->getOuterScope()->name()));
addMemberDocs(rootNav,md,def,0,FALSE);
md->setRefItems(root->sli);
+ // if md is a variable forward declaration and root is the definition that
+ // turn md into the defintion
+ if (!root->explicitExternal && md->isExternal())
+ {
+ md->setDeclFile(md->getDefFileName(),md->getDefLine(),md->getDefColumn());
+ md->setExplicitExternal(FALSE,root->fileName,root->startLine,root->startColumn);
+ }
+ // if md is the definition and root point at a declaration, then add the
+ // declaration info
+ else if (root->explicitExternal && !md->isExternal())
+ {
+ md->setDeclFile(root->fileName,root->startLine,root->startColumn);
+ }
return md;
}
}
@@ -2636,7 +2649,7 @@ static MemberDef *addVariableToFile(
md->enableCallerGraph(root->callerGraph);
md->enableReferencedByRelation(root->referencedByRelation);
md->enableReferencesRelation(root->referencesRelation);
- md->setExplicitExternal(root->explicitExternal);
+ md->setExplicitExternal(root->explicitExternal,fileName,root->startLine,root->startColumn);
//md->setOuterScope(fd);
if (!root->explicitExternal)
{
@@ -3752,7 +3765,13 @@ static void buildFunctionList(EntryNav *rootNav)
// definition, then turn md into a definition.
if (md->isPrototype() && !root->proto)
{
- md->setPrototype(FALSE);
+ md->setDeclFile(md->getDefFileName(),md->getDefLine(),md->getDefColumn());
+ md->setPrototype(FALSE,root->fileName,root->startLine,root->startColumn);
+ }
+ // if md is already the definition, then add the declaration info
+ else if (!md->isPrototype() && root->proto)
+ {
+ md->setDeclFile(root->fileName,root->startLine,root->startColumn);
}
}
}
@@ -3781,7 +3800,7 @@ static void buildFunctionList(EntryNav *rootNav)
md->setDocumentation(root->doc,root->docFile,root->docLine);
md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
- md->setPrototype(root->proto);
+ md->setPrototype(root->proto,root->fileName,root->startLine,root->startColumn);
md->setDocsForDefinition(!root->proto);
md->setTypeConstraints(root->typeConstr);
//md->setBody(root->body);
@@ -6544,7 +6563,7 @@ static void findMember(EntryNav *rootNav,
md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
md->setDocsForDefinition(!root->proto);
- md->setPrototype(root->proto);
+ md->setPrototype(root->proto,root->fileName,root->startLine,root->startColumn);
md->addSectionsToDefinition(root->anchors);
md->setBodySegment(root->bodyLine,root->endBodyLine);
FileDef *fd=rootNav->fileDef();
@@ -6614,7 +6633,7 @@ static void findMember(EntryNav *rootNav,
md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
md->setDocsForDefinition(!root->proto);
- md->setPrototype(root->proto);
+ md->setPrototype(root->proto,root->fileName,root->startLine,root->startColumn);
md->addSectionsToDefinition(root->anchors);
md->setBodySegment(root->bodyLine,root->endBodyLine);
FileDef *fd=rootNav->fileDef();
@@ -6816,7 +6835,7 @@ static void findMember(EntryNav *rootNav,
md->setDocumentation(root->doc,root->docFile,root->docLine);
md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
md->setDocsForDefinition(!root->proto);
- md->setPrototype(root->proto);
+ md->setPrototype(root->proto,root->fileName,root->startLine,root->startColumn);
md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
md->addSectionsToDefinition(root->anchors);
md->setMemberGroupId(root->mGrpId);
@@ -6891,7 +6910,7 @@ localObjCMethod:
md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
md->setDocsForDefinition(!root->proto);
- md->setPrototype(root->proto);
+ md->setPrototype(root->proto,root->fileName,root->startLine,root->startColumn);
md->addSectionsToDefinition(root->anchors);
md->setBodySegment(root->bodyLine,root->endBodyLine);
FileDef *fd=rootNav->fileDef();
@@ -7452,7 +7471,7 @@ static void addEnumValuesToEnums(EntryNav *rootNav)
fmd->setInitializer(root->initializer);
fmd->setMaxInitLines(root->initLines);
fmd->setMemberGroupId(root->mGrpId);
- fmd->setExplicitExternal(root->explicitExternal);
+ fmd->setExplicitExternal(root->explicitExternal,fileName,root->startLine,root->startColumn);
fmd->setRefItems(root->sli);
fmd->setAnchor();
md->insertEnumField(fmd);
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index bcef5ac..29ae057 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -596,6 +596,9 @@ class MemberDefImpl
// FALSE => block is put before declaration.
ClassDef *category;
MemberDef *categoryRelation;
+ QCString declFileName;
+ int declLine;
+ int declColumn;
};
MemberDefImpl::MemberDefImpl() :
@@ -609,7 +612,9 @@ MemberDefImpl::MemberDefImpl() :
defTmpArgLists(0),
classSectionSDict(0),
category(0),
- categoryRelation(0)
+ categoryRelation(0),
+ declLine(-1),
+ declColumn(-1)
{
}
@@ -4740,6 +4745,24 @@ MemberDef *MemberDef::getGroupAlias() const
return m_impl->groupAlias;
}
+QCString MemberDef::getDeclFileName() const
+{
+ return m_impl->declFileName;
+}
+
+int MemberDef::getDeclLine() const
+{
+ return m_impl->declLine;
+}
+
+int MemberDef::getDeclColumn() const
+{
+ return m_impl->declColumn;
+}
+
+
+//----------------------------------------------
+
void MemberDef::setMemberType(MemberType t)
{
m_impl->mtype=t;
@@ -4788,11 +4811,6 @@ void MemberDef::setMaxInitLines(int lines)
}
}
-void MemberDef::setExplicitExternal(bool b)
-{
- m_impl->explExt=b;
-}
-
void MemberDef::setReadAccessor(const char *r)
{
m_impl->read=r;
@@ -4862,9 +4880,38 @@ void MemberDef::setAnonymousEnumType(MemberDef *md)
m_impl->annEnumType = md;
}
-void MemberDef::setPrototype(bool p)
+void MemberDef::setPrototype(bool p,const QCString &df,int line,int column)
{
m_impl->proto=p;
+ if (p)
+ {
+ setDeclFile(df,line,column);
+ }
+ else
+ {
+ setDefFile(df,line,column);
+ }
+}
+
+void MemberDef::setExplicitExternal(bool b,const QCString &df,int line,int column)
+{
+ m_impl->explExt=b;
+ if (b)
+ {
+ setDeclFile(df,line,column);
+ }
+ else
+ {
+ setDefFile(df,line,column);
+ }
+}
+
+
+void MemberDef::setDeclFile(const QCString &df,int line,int column)
+{
+ m_impl->declFileName = df;
+ m_impl->declLine = line;
+ m_impl->declColumn = column;
}
void MemberDef::setMemberGroupId(int id)
diff --git a/src/memberdef.h b/src/memberdef.h
index 2c88438..650d9a5 100644
--- a/src/memberdef.h
+++ b/src/memberdef.h
@@ -274,6 +274,9 @@ class MemberDef : public Definition
QCString fieldType() const;
bool isReference() const;
+ QCString getDeclFileName() const;
+ int getDeclLine() const;
+ int getDeclColumn() const;
//-----------------------------------------------------------------------------------
// ---- setters -----
@@ -297,7 +300,6 @@ class MemberDef : public Definition
void setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,
const QCString &fileName,int startLine,bool hasDocs,
MemberDef *member=0);
- void setExplicitExternal(bool b);
void setReadAccessor(const char *r);
void setWriteAccessor(const char *w);
void setTemplateSpecialization(bool b);
@@ -330,7 +332,9 @@ class MemberDef : public Definition
bool addExample(const char *anchor,const char *name,const char *file);
// prototype related members
- void setPrototype(bool p);
+ void setPrototype(bool p,const QCString &df,int line, int column);
+ void setExplicitExternal(bool b,const QCString &df,int line,int column);
+ void setDeclFile(const QCString &df,int line,int column);
// argument related members
void setArgumentList(ArgumentList *al);
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index 8b8e648..3c71840 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -975,7 +975,7 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De
{
t << " <location file=\""
<< stripFromPath(md->getDefFileName()) << "\" line=\""
- << md->getDefLine() << "\"" << " column=\""
+ << md->getDefLine() << "\" column=\""
<< md->getDefColumn() << "\"" ;
if (md->getStartBodyLine()!=-1)
{
@@ -987,6 +987,12 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De
t << " bodystart=\"" << md->getStartBodyLine() << "\" bodyend=\""
<< md->getEndBodyLine() << "\"";
}
+ if (md->getDeclLine()!=-1)
+ {
+ t << " declfile=\"" << stripFromPath(md->getDeclFileName()) << "\" declline=\""
+ << md->getDeclLine() << "\" declcolumn=\""
+ << md->getDeclColumn() << "\"";
+ }
t << "/>" << endl;
}