summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Smith <martin.smith@theqtcompany.com>2016-04-04 13:35:08 +0200
committerMartin Smith <martin.smith@theqtcompany.com>2016-04-05 07:43:10 +0000
commitc2fdb56f732a32af174f6b11f5d1aefd11f038ed (patch)
tree1ead465bff1eb5061fb7ce976ee9fbb1b43d3bbd
parentaec1d10c66a676781c767099e81871faa040162f (diff)
downloadqttools-c2fdb56f732a32af174f6b11f5d1aefd11f038ed.tar.gz
qdoc: Correct source line numbers in index file
Many function clauses in the .index files show the wrong source file line number for the function declaration. This update ensures that the source file line number is correct. Change-Id: I8494b649be1d1a74e5b057391566503f3d6f1424 Task-number: QTBUG-52290 Reviewed-by: Topi Reiniƶ <topi.reinio@theqtcompany.com>
-rw-r--r--src/qdoc/cppcodeparser.cpp32
-rw-r--r--src/qdoc/cppcodeparser.h3
2 files changed, 27 insertions, 8 deletions
diff --git a/src/qdoc/cppcodeparser.cpp b/src/qdoc/cppcodeparser.cpp
index e4e423982..c1295c3a7 100644
--- a/src/qdoc/cppcodeparser.cpp
+++ b/src/qdoc/cppcodeparser.cpp
@@ -1550,7 +1550,10 @@ bool CppCodeParser::matchFunctionDecl(Aggregate *parent,
VariableNode *var = new VariableNode(parent, name);
var->setAccess(access);
- var->setLocation(location());
+ if (parsingHeaderFile_)
+ var->setLocation(declLoc());
+ else
+ var->setLocation(location());
var->setLeftType(returnType.left());
var->setRightType(returnType.right());
if (matched_compat)
@@ -1640,7 +1643,10 @@ bool CppCodeParser::matchFunctionDecl(Aggregate *parent,
if (matched_friend)
access = Node::Public;
func->setAccess(access);
- func->setLocation(location());
+ if (parsingHeaderFile_)
+ func->setLocation(declLoc());
+ else
+ func->setLocation(location());
func->setReturnType(returnType.toString());
func->setParentPath(parentPath);
func->setTemplateStuff(templateStuff);
@@ -1792,7 +1798,7 @@ bool CppCodeParser::matchClassDecl(Aggregate *parent,
*/
ClassNode *classe = new ClassNode(parent, className);
classe->setAccess(access);
- classe->setLocation(location());
+ classe->setLocation(declLoc());
if (compat)
classe->setStatus(Node::Compat);
if (!physicalModuleName.isEmpty())
@@ -1836,7 +1842,7 @@ bool CppCodeParser::matchNamespaceDecl(Aggregate *parent)
if (!ns) {
ns = new NamespaceNode(parent, namespaceName);
ns->setAccess(access);
- ns->setLocation(location());
+ ns->setLocation(declLoc());
}
readToken(); // skip '{'
@@ -1999,7 +2005,7 @@ bool CppCodeParser::matchEnumDecl(Aggregate *parent)
if (!name.isEmpty()) {
enume = new EnumNode(parent, name);
enume->setAccess(access);
- enume->setLocation(location());
+ enume->setLocation(declLoc());
}
readToken();
@@ -2029,7 +2035,7 @@ bool CppCodeParser::matchTypedefDecl(Aggregate *parent)
if (parent && !parent->findChildNode(name, Node::Typedef)) {
TypedefNode* td = new TypedefNode(parent, name);
td->setAccess(access);
- td->setLocation(location());
+ td->setLocation(declLoc());
}
return true;
}
@@ -2058,7 +2064,7 @@ bool CppCodeParser::matchProperty(Aggregate *parent)
PropertyNode *property = new PropertyNode(parent, name);
property->setAccess(Node::Public);
- property->setLocation(location());
+ property->setLocation(declLoc());
property->setDataType(dataType.toString());
while (tok != Tok_RightParen && tok != Tok_Eoi) {
@@ -2163,12 +2169,15 @@ bool CppCodeParser::matchDeclList(Aggregate *parent)
case Tok_class:
case Tok_struct:
case Tok_union:
+ setDeclLoc();
matchClassDecl(parent, templateStuff);
break;
case Tok_namespace:
+ setDeclLoc();
matchNamespaceDecl(parent);
break;
case Tok_using:
+ setDeclLoc();
matchUsingDecl(parent);
break;
case Tok_template:
@@ -2180,9 +2189,11 @@ bool CppCodeParser::matchDeclList(Aggregate *parent)
}
continue;
case Tok_enum:
+ setDeclLoc();
matchEnumDecl(parent);
break;
case Tok_typedef:
+ setDeclLoc();
matchTypedefDecl(parent);
break;
case Tok_private:
@@ -2218,6 +2229,7 @@ bool CppCodeParser::matchDeclList(Aggregate *parent)
case Tok_Q_PROPERTY:
case Tok_Q_PRIVATE_PROPERTY:
case Tok_QDOC_PROPERTY:
+ setDeclLoc();
if (!matchProperty(parent)) {
location().warning(tr("Failed to parse token %1 in property declaration").arg(lexeme()));
skipTo(Tok_RightParen);
@@ -2250,13 +2262,14 @@ bool CppCodeParser::matchDeclList(Aggregate *parent)
break;
case Tok_Q_DECLARE_FLAGS:
readToken();
+ setDeclLoc();
if (match(Tok_LeftParen) && match(Tok_Ident)) {
QString flagsType = previousLexeme();
if (match(Tok_Comma) && match(Tok_Ident)) {
QString name = previousLexeme();
TypedefNode *flagsNode = new TypedefNode(parent, flagsType);
flagsNode->setAccess(access);
- flagsNode->setLocation(location());
+ flagsNode->setLocation(declLoc());
EnumNode* en = static_cast<EnumNode*>(parent->findChildNode(name, Node::Enum));
if (en)
en->setFlagsType(flagsNode);
@@ -2266,6 +2279,7 @@ bool CppCodeParser::matchDeclList(Aggregate *parent)
break;
case Tok_QT_MODULE:
readToken();
+ setDeclLoc();
if (match(Tok_LeftParen) && match(Tok_Ident))
physicalModuleName = previousLexeme();
if (!physicalModuleName.startsWith("Qt"))
@@ -2273,6 +2287,8 @@ bool CppCodeParser::matchDeclList(Aggregate *parent)
match(Tok_RightParen);
break;
default:
+ if (parsingHeaderFile_)
+ setDeclLoc();
if (!matchFunctionDecl(parent, 0, 0, templateStuff, extra)) {
while (tok != Tok_Eoi &&
(tokenizer->braceDepth() > braceDepth0 ||
diff --git a/src/qdoc/cppcodeparser.h b/src/qdoc/cppcodeparser.h
index 7c110d2bb..d3a5829e3 100644
--- a/src/qdoc/cppcodeparser.h
+++ b/src/qdoc/cppcodeparser.h
@@ -76,6 +76,8 @@ public:
virtual void doneParsingHeaderFiles() Q_DECL_OVERRIDE;
virtual void doneParsingSourceFiles() Q_DECL_OVERRIDE;
bool parseParameters(const QString& parameters, QVector<Parameter>& pvect, bool& isQPrivateSignal);
+ const Location& declLoc() const { return declLoc_; }
+ void setDeclLoc() { declLoc_ = location(); }
protected:
const QSet<QString>& topicCommands();
@@ -163,6 +165,7 @@ protected:
QStringList lastPath_;
QRegExp varComment;
QRegExp sep;
+ Location declLoc_;
private:
QString sequentialIteratorDefinition;