diff options
author | Martin Smith <martin.smith@qt.io> | 2019-07-11 12:49:33 +0200 |
---|---|---|
committer | Martin Smith <martin.smith@qt.io> | 2019-07-11 15:07:11 +0200 |
commit | 710a54b0fe1e109b2c1c504b89f4f25b9c6d18e7 (patch) | |
tree | dc2bb2df01d1010f381baf2ba0eb5720cf40bda2 | |
parent | e8deb03a35ff0122c88549974472274fe2c4131b (diff) | |
download | qttools-710a54b0fe1e109b2c1c504b89f4f25b9c6d18e7.tar.gz |
qdoc: Correct algorithm for finding class qualifier
The algorithm for finding the class qualifier for the function name
in a \fn signature was incorrect in cases where the return type also
had a class qualifier. This resulted in some clang error messages
being printed when they should not have been printed because the
class was marked internal. This update corrects that algorithm.
Change-Id: I02983710c73251b8fc75ccb2893ae1d9f5aa0fe6
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
-rw-r--r-- | src/qdoc/clangcodeparser.cpp | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/src/qdoc/clangcodeparser.cpp b/src/qdoc/clangcodeparser.cpp index 9c4105992..b7f9e86ad 100644 --- a/src/qdoc/clangcodeparser.cpp +++ b/src/qdoc/clangcodeparser.cpp @@ -1587,18 +1587,21 @@ Node* ClangCodeParser::parseFnArg(const Location& location, const QString& fnArg unsigned diagnosticCount = clang_getNumDiagnostics(tu); if (diagnosticCount > 0 && (!Generator::preparing() || Generator::singleExec())) { bool report = true; - QStringList signature = fnArg.split(QLatin1String("::")); + QStringList signature = fnArg.split(QChar('(')); if (signature.size() > 1) { - QStringList typeAndQualifier = signature.at(0).split(' '); - QString qualifier = typeAndQualifier.last(); - int i = 0; - while (qualifier.size() > i && !qualifier.at(i).isLetter()) - qualifier[i++] = QChar(' '); - if (i > 0) - qualifier = qualifier.simplified(); - ClassNode* cn = qdb_->findClassNode(QStringList(qualifier)); - if (cn && cn->isInternal()) - report = false; + QStringList qualifiedName = signature.at(0).split(QChar(' ')); + qualifiedName = qualifiedName.last().split(QLatin1String("::")); + if (qualifiedName.size() > 1) { + QString qualifier = qualifiedName.at(0); + int i = 0; + while (qualifier.size() > i && !qualifier.at(i).isLetter()) + qualifier[i++] = QChar(' '); + if (i > 0) + qualifier = qualifier.simplified(); + ClassNode* cn = qdb_->findClassNode(QStringList(qualifier)); + if (cn && cn->isInternal()) + report = false; + } } if (report) { location.warning(ClangCodeParser::tr("clang found diagnostics parsing \\fn %1").arg(fnArg)); |