qdoc: Check and warn if \relates is used incorrectly
authorTopi Reinio <topi.reinio@digia.com>
Wed, 19 Aug 2015 11:18:39 +0000 (13:18 +0200)
committerTopi Reiniƶ <topi.reinio@digia.com>
Wed, 19 Aug 2015 12:06:00 +0000 (12:06 +0000)
There are instances in the documentation where a member function
tries to set itself also a related non-member of its parent. This
should be treated as invalid behavior, as it likely causes also
problems during deletion of the node tree.

QDoc now checks for and warns about these instances.

Change-Id: I951e0de6be4d48618c60b8a0382e2c70700cc402
Task-number: QTBUG-47751
Reviewed-by: Martin Smith <martin.smith@digia.com>
src/tools/qdoc/cppcodeparser.cpp
src/tools/qdoc/node.cpp

index 46a62d629fd0c9457b14c782b4a6165c52ea551e..5d2a2c90d0b4323d4fd38c5ae43b31a356232a09 100644 (file)
@@ -932,8 +932,11 @@ void CppCodeParser::processOtherMetaCommand(const Doc& doc,
                 doc.location().warning(tr("Cannot find '%1' in '\\%2'").arg(arg).arg(COMMAND_RELATES));
 
         }
-        else
+        else if (node->parent() != n)
             node->setRelates(static_cast<Aggregate*>(n));
+        else
+            doc.location().warning(tr("Invalid use of '\\%1' (already a member of '%2')")
+                                   .arg(COMMAND_RELATES, arg));
     }
     else if (command == COMMAND_CONTENTSPAGE) {
         setLink(node, Node::ContentsLink, arg);
index c879d1d9b417431c1fe54e828376dfc88c756949..1fe0af352dc8c47b3f267c6c53539d0eb2bcd361 100644 (file)
@@ -480,6 +480,9 @@ bool Node::fromFlagValue(FlagValue fv, bool defaultValue)
  */
 void Node::setRelates(Aggregate *pseudoParent)
 {
+    if (pseudoParent == parent())
+        return;
+
     removeRelates();
     relatesTo_ = pseudoParent;
     pseudoParent->addRelated(this);