summaryrefslogtreecommitdiffstats
path: root/src/tools/qdoc/qmlvisitor.cpp
diff options
context:
space:
mode:
authorMartin Smith <martin.smith@digia.com>2013-02-20 12:03:32 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-02-20 17:22:26 +0100
commit2cb22c6cc01627700ebfb8d2528ab4f700917a9b (patch)
tree2a90f9db61cf7ee292f58975a52cff1738487db0 /src/tools/qdoc/qmlvisitor.cpp
parentdacc222d5a3327fb27d69e57d99111cdf9084304 (diff)
qdoc: QML Inheritance is not resolved correctly.
This change adds some QML property, signal, and method data to the .index file. It also provides more robust resolving of QML inheritance for qml types. Task-number: QTBUG-29778 Change-Id: Iaefd64227913a19f427b21e904ca5e32c82d7b29 Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
Diffstat (limited to 'src/tools/qdoc/qmlvisitor.cpp')
-rw-r--r--src/tools/qdoc/qmlvisitor.cpp41
1 files changed, 30 insertions, 11 deletions
diff --git a/src/tools/qdoc/qmlvisitor.cpp b/src/tools/qdoc/qmlvisitor.cpp
index 15af03d9ba..8b6f81de3e 100644
--- a/src/tools/qdoc/qmlvisitor.cpp
+++ b/src/tools/qdoc/qmlvisitor.cpp
@@ -374,6 +374,24 @@ void QmlDocVisitor::applyMetacommands(QQmlJS::AST::SourceLocation,
}
/*!
+ Reconstruct the qualified \a id using dot notation
+ and return the fully qualified string.
+ */
+QString QmlDocVisitor::getFullyQualifiedId(QQmlJS::AST::UiQualifiedId *id)
+{
+ QString result;
+ if (id) {
+ result = id->name.toString();
+ id = id->next;
+ while (id != 0) {
+ result += QChar('.') + id->name.toString();
+ id = id->next;
+ }
+ }
+ return result;
+}
+
+/*!
Begin the visit of the object \a definition, recording it in the
qdoc database. Increment the object nesting level, which is used
to test whether we are at the public API level. The public level
@@ -381,7 +399,7 @@ void QmlDocVisitor::applyMetacommands(QQmlJS::AST::SourceLocation,
*/
bool QmlDocVisitor::visit(QQmlJS::AST::UiObjectDefinition *definition)
{
- QString type = definition->qualifiedTypeNameId->name.toString();
+ QString type = getFullyQualifiedId(definition->qualifiedTypeNameId);
nestingLevel++;
if (current->type() == Node::Namespace) {
@@ -420,17 +438,18 @@ void QmlDocVisitor::endVisit(QQmlJS::AST::UiObjectDefinition *definition)
*/
bool QmlDocVisitor::visit(QQmlJS::AST::UiImportList *imports)
{
- QQmlJS::AST::UiImport* imp = imports->import;
- quint32 length = imp->versionToken.offset - imp->fileNameToken.offset - 1;
- QString module = document.mid(imp->fileNameToken.offset,length);
- QString version = document.mid(imp->versionToken.offset, imp->versionToken.length);
- if (version.size() > 1) {
- int dot = version.lastIndexOf(QChar('.'));
- if (dot > 0)
- version = version.left(dot);
+ while (imports != 0) {
+ QQmlJS::AST::UiImport* imp = imports->import;
+
+ QString name = document.mid(imp->fileNameToken.offset, imp->fileNameToken.length);
+ if (name[0] == '\"')
+ name = name.mid(1, name.length()-2);
+ QString version = document.mid(imp->versionToken.offset, imp->versionToken.length);
+ QString importId = document.mid(imp->importIdToken.offset, imp->importIdToken.length);
+ QString importUri = getFullyQualifiedId(imp->importUri);
+ importList.append(ImportRec(name, version, importId, importUri));
+ imports = imports->next;
}
- importList.append(QPair<QString, QString>(module, version));
-
return true;
}