QDoc: Allow '0' to be used as 2nd arg for \qmlclass.
authorCasper van Donderen <casper.vandonderen@nokia.com>
Thu, 28 Jun 2012 10:49:06 +0000 (12:49 +0200)
committerQt by Nokia <qt-info@nokia.com>
Thu, 28 Jun 2012 12:44:20 +0000 (14:44 +0200)
There can be occurences of \qmlclass where there is no C++ class (for a
pure QML Type for example). QDoc will ignore searching for a C++ class
when '0' is specified as second argument to the \qmlclass command.

Change-Id: I09c8c7ad302daffb0723a49967951ca623e646e4
Reviewed-by: Martin Smith <martin.smith@nokia.com>
src/tools/qdoc/cppcodeparser.cpp

index f1a01e7..5fcbc3e 100644 (file)
@@ -728,8 +728,17 @@ Node* CppCodeParser::processTopicCommand(const Doc& doc,
     else if (command == COMMAND_QMLCLASS) {
         ClassNode* classNode = 0;
         QStringList names = arg.first.split(QLatin1Char(' '));
-        if (names.size() > 1)
-            classNode = tree_->findClassNode(names[1].split("::"));
+        bool ignoreCppClass = false;
+        if (names.size() > 1) {
+            /*
+              If the second argument of the \\qmlclass command is 0 we should ignore the C++ class.
+              The second argument should only be 0 when you are documenting QML in a .qdoc file.
+             */
+            if (names[1] != "0")
+                classNode = tree_->findClassNode(names[1].split("::"));
+            else
+                ignoreCppClass = true;
+        }
 
         /*
           Search for a node with the same name. If there is one,
@@ -746,17 +755,18 @@ Node* CppCodeParser::processTopicCommand(const Doc& doc,
         QmlClassNode* qcn = new QmlClassNode(tree_->root(), names[0], classNode);
         qcn->setLocation(doc.startLocation());
         if (isParsingCpp() || isParsingQdoc()) {
-            qcn->requireCppClass();
-            if (names.size() < 2) {
-                QString msg = "C++ class name not specified for class documented as "
-                    "QML type: '\\qmlclass " + arg.first + " <class name>'";
-                doc.startLocation().warning(tr(msg.toLatin1().data()));
-            }
-            else if (!classNode) {
-                QString msg = "C++ class not found in any .h file for class documented "
+            QString msg;
+            if (names.size() < 2)
+                msg = "C++ class name not specified for class documented as "
+                    "QML type: '\\qmlclass " + arg.first + " <class name>'."
+                    " '0' should be used as second argument if there is no C++ class.";
+            else if (!classNode && !ignoreCppClass)
+                msg = "C++ class not found in any .h file for class documented "
                     "as QML type: '\\qmlclass " + arg.first + "'";
+            else if (!ignoreCppClass)
+                qcn->requireCppClass();
+            if (!msg.isEmpty())
                 doc.startLocation().warning(tr(msg.toLatin1().data()));
-            }
         }
         if (ncn)
             ncn->addCollision(qcn);