From f14b644004498dc6fb1a9437b81e3164e89bfdb5 Mon Sep 17 00:00:00 2001
From: Martin Smith <martin.smith@nokia.com>
Date: Wed, 7 Jul 2010 09:51:34 +0200
Subject: qdoc: Fixed the case where the property and type names are the same.

Also simplified some code.

Task-number: QTBUG-6340
---
 tools/qdoc3/codemarker.cpp      |  8 ++++++++
 tools/qdoc3/codemarker.h        |  9 +++++----
 tools/qdoc3/cppcodemarker.cpp   | 15 +++++++++------
 tools/qdoc3/cppcodemarker.h     |  7 ++++---
 tools/qdoc3/htmlgenerator.cpp   |  8 +++++---
 tools/qdoc3/htmlgenerator.h     |  7 ++++---
 tools/qdoc3/javacodemarker.cpp  |  6 ++++--
 tools/qdoc3/javacodemarker.h    |  5 ++++-
 tools/qdoc3/plaincodemarker.cpp |  7 -------
 tools/qdoc3/plaincodemarker.h   |  1 -
 tools/qdoc3/qscodemarker.cpp    |  7 -------
 tools/qdoc3/qscodemarker.h      |  1 -
 tools/qdoc3/tree.cpp            | 10 ++++++----
 tools/qdoc3/tree.h              | 20 ++++++++++++--------
 14 files changed, 61 insertions(+), 50 deletions(-)

diff --git a/tools/qdoc3/codemarker.cpp b/tools/qdoc3/codemarker.cpp
index 33ceaf5..7130d61 100644
--- a/tools/qdoc3/codemarker.cpp
+++ b/tools/qdoc3/codemarker.cpp
@@ -630,4 +630,12 @@ QList<Section> CodeMarker::qmlSections(const QmlClassNode* , SynopsisStyle )
 }
 #endif
 
+const Node* CodeMarker::resolveTarget(const QString& , 
+                                      const Tree* ,
+		                      const Node* ,
+                                      const Node* )
+{
+    return 0;
+}
+
 QT_END_NAMESPACE
diff --git a/tools/qdoc3/codemarker.h b/tools/qdoc3/codemarker.h
index aab8a9c..53ad4a8 100644
--- a/tools/qdoc3/codemarker.h
+++ b/tools/qdoc3/codemarker.h
@@ -155,10 +155,11 @@ class CodeMarker
     virtual QList<Section> qmlSections(const QmlClassNode* qmlClassNode,
                                        SynopsisStyle style);
 #endif
-    virtual const Node *resolveTarget(const QString& target, 
-                                      const Tree *tree,
-		                      const Node *relative) = 0;
-    virtual QStringList macRefsForNode(const Node *node);
+    virtual const Node* resolveTarget(const QString& target, 
+                                      const Tree* tree,
+		                      const Node* relative,
+                                      const Node* self = 0);
+    virtual QStringList macRefsForNode(const Node* node);
 
     static void initialize(const Config& config);
     static void terminate();
diff --git a/tools/qdoc3/cppcodemarker.cpp b/tools/qdoc3/cppcodemarker.cpp
index c4ee054..562e92b 100644
--- a/tools/qdoc3/cppcodemarker.cpp
+++ b/tools/qdoc3/cppcodemarker.cpp
@@ -825,9 +825,10 @@ QList<Section> CppCodeMarker::sections(const InnerNode *inner,
     return sections;
 }
 
-const Node *CppCodeMarker::resolveTarget(const QString &target,
-                                         const Tree *tree,
-                                         const Node *relative)
+const Node *CppCodeMarker::resolveTarget(const QString& target,
+                                         const Tree* tree,
+                                         const Node* relative,
+                                         const Node* self)
 {
     if (target.endsWith("()")) {
         const FunctionNode *func;
@@ -869,11 +870,13 @@ const Node *CppCodeMarker::resolveTarget(const QString &target,
     else {
         QStringList path = target.split("::");
         const Node *node;
+        int flags = Tree::SearchBaseClasses |
+            Tree::SearchEnumValues |
+            Tree::NonFunction;
         if ((node = tree->findNode(path,
                                    relative,
-                                   Tree::SearchBaseClasses |
-                                   Tree::SearchEnumValues |
-                                   Tree::NonFunction)))
+                                   flags,
+                                   self)))
             return node;
     }
     return 0;
diff --git a/tools/qdoc3/cppcodemarker.h b/tools/qdoc3/cppcodemarker.h
index 2dcf400..eca3936 100644
--- a/tools/qdoc3/cppcodemarker.h
+++ b/tools/qdoc3/cppcodemarker.h
@@ -81,9 +81,10 @@ class CppCodeMarker : public CodeMarker
                             Status status);
     QList<Section> qmlSections(const QmlClassNode* qmlClassNode,
                                SynopsisStyle style);
-    const Node *resolveTarget(const QString& target, 
-                              const Tree *tree, 
-                              const Node *relative);
+    const Node* resolveTarget(const QString& target, 
+                              const Tree* tree, 
+                              const Node* relative,
+                              const Node* self = 0);
 
 private:
     QString addMarkUp(const QString& protectedCode, 
diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp
index 89b1e98..4461b48 100644
--- a/tools/qdoc3/htmlgenerator.cpp
+++ b/tools/qdoc3/htmlgenerator.cpp
@@ -2676,7 +2676,7 @@ void HtmlGenerator::generateQmlItem(const Node *node,
             }
         }
     }
-    out() << highlightedCode(marked, marker, relative);
+    out() << highlightedCode(marked, marker, relative, false, node);
     debugging_on = false;
 }
 #endif
@@ -2988,7 +2988,8 @@ void HtmlGenerator::generateSynopsis(const Node *node,
 QString HtmlGenerator::highlightedCode(const QString& markedCode,
                                        CodeMarker* marker,
                                        const Node* relative,
-                                       bool alignNames)
+                                       bool alignNames,
+                                       const Node* self)
 {
     QString src = markedCode;
     QString html;
@@ -3067,8 +3068,9 @@ QString HtmlGenerator::highlightedCode(const QString& markedCode,
             bool handled = false;
             if (parseArg(src, typeTag, &i, srcSize, &arg, &par1)) {
                 par1 = QStringRef();
-                const Node* n = marker->resolveTarget(arg.toString(), myTree, relative);
+                const Node* n = marker->resolveTarget(arg.toString(), myTree, relative, self);
                 if (HtmlGenerator::debugging_on) {
+                    qDebug() << "arg.toString()" << arg.toString();
                     if (n) {
                         qDebug() << "  " << n->name() << n->type() << n->subType();
                         qDebug() << "  " << relative->name() << relative->type() << relative->subType();
diff --git a/tools/qdoc3/htmlgenerator.h b/tools/qdoc3/htmlgenerator.h
index 80341de..a2fadf6 100644
--- a/tools/qdoc3/htmlgenerator.h
+++ b/tools/qdoc3/htmlgenerator.h
@@ -210,9 +210,10 @@ class HtmlGenerator : public PageGenerator
                                       const Node *relative,
                                       CodeMarker *marker);
     QString highlightedCode(const QString& markedCode, 
-                            CodeMarker *marker, 
-                            const Node *relative,
-                            bool alignNames = false);
+                            CodeMarker* marker, 
+                            const Node* relative,
+                            bool alignNames = false,
+                            const Node* self = 0);
 
     void generateFullName(const Node *apparentNode, 
                           const Node *relative, 
diff --git a/tools/qdoc3/javacodemarker.cpp b/tools/qdoc3/javacodemarker.cpp
index 1918cd8..c9a8f60 100644
--- a/tools/qdoc3/javacodemarker.cpp
+++ b/tools/qdoc3/javacodemarker.cpp
@@ -155,8 +155,10 @@ QList<Section> JavaCodeMarker::sections(const InnerNode * /* inner */, SynopsisS
     return QList<Section>();
 }
 
-const Node *JavaCodeMarker::resolveTarget(const QString &target, const Tree *tree,
-					  const Node *relative)
+const Node *JavaCodeMarker::resolveTarget(const QString &target,
+                                          const Tree *tree,
+					  const Node *relative,
+                                          const Node* /* self */)
 {
     if (target.endsWith("()")) {
         const FunctionNode *func;
diff --git a/tools/qdoc3/javacodemarker.h b/tools/qdoc3/javacodemarker.h
index a2d04dd..c2aabc0 100644
--- a/tools/qdoc3/javacodemarker.h
+++ b/tools/qdoc3/javacodemarker.h
@@ -72,7 +72,10 @@ public:
     QList<Section> sections(const InnerNode *innerNode, SynopsisStyle style, Status status);
     QString functionBeginRegExp( const QString& funcName );
     QString functionEndRegExp( const QString& funcName );
-    const Node *resolveTarget( const QString& target, const Tree *tree, const Node *relative );
+    const Node* resolveTarget( const QString& target, 
+                               const Tree* tree, 
+                               const Node* relative,
+                               const Node* self = 0 );
 };
 
 QT_END_NAMESPACE
diff --git a/tools/qdoc3/plaincodemarker.cpp b/tools/qdoc3/plaincodemarker.cpp
index 4abfd2b..d825c13 100644
--- a/tools/qdoc3/plaincodemarker.cpp
+++ b/tools/qdoc3/plaincodemarker.cpp
@@ -129,11 +129,4 @@ QList<Section> PlainCodeMarker::sections(const InnerNode * /* innerNode */,
      return QList<Section>();
 }
 
-const Node *PlainCodeMarker::resolveTarget( const QString& /* target */,
-                                            const Tree * /* tree */,
-					    const Node * /* relative */ )
-{
-    return 0;
-}
-
 QT_END_NAMESPACE
diff --git a/tools/qdoc3/plaincodemarker.h b/tools/qdoc3/plaincodemarker.h
index e9cc40d..7afb88e 100644
--- a/tools/qdoc3/plaincodemarker.h
+++ b/tools/qdoc3/plaincodemarker.h
@@ -71,7 +71,6 @@ public:
     QString functionBeginRegExp( const QString& funcName );
     QString functionEndRegExp( const QString& funcName );
     QList<Section> sections(const InnerNode *innerNode, SynopsisStyle style, Status status);
-    const Node *resolveTarget(const QString &target, const Tree *tree, const Node *relative);
 };
 
 QT_END_NAMESPACE
diff --git a/tools/qdoc3/qscodemarker.cpp b/tools/qdoc3/qscodemarker.cpp
index d4b8e80..2ee5d99 100644
--- a/tools/qdoc3/qscodemarker.cpp
+++ b/tools/qdoc3/qscodemarker.cpp
@@ -375,11 +375,4 @@ QList<Section> QsCodeMarker::sections( const InnerNode *inner, SynopsisStyle sty
     return sections;
 }
 
-const Node *QsCodeMarker::resolveTarget( const QString& /* target */,
-                                         const Tree * /* tree */,
-					 const Node * /* relative */ )
-{
-    return 0;
-}
-
 QT_END_NAMESPACE
diff --git a/tools/qdoc3/qscodemarker.h b/tools/qdoc3/qscodemarker.h
index 1590009..c6a177f 100644
--- a/tools/qdoc3/qscodemarker.h
+++ b/tools/qdoc3/qscodemarker.h
@@ -72,7 +72,6 @@ public:
     QList<Section> sections(const InnerNode *innerNode, SynopsisStyle style, Status status);
     QString functionBeginRegExp( const QString& funcName );
     QString functionEndRegExp( const QString& funcName );
-    const Node *resolveTarget( const QString& target, const Tree *tree, const Node *relative );
 };
 
 QT_END_NAMESPACE
diff --git a/tools/qdoc3/tree.cpp b/tools/qdoc3/tree.cpp
index 70b998f..022e1c2 100644
--- a/tools/qdoc3/tree.cpp
+++ b/tools/qdoc3/tree.cpp
@@ -125,18 +125,20 @@ Tree::~Tree()
 
 /*!
  */
-Node *Tree::findNode(const QStringList &path, Node *relative, int findFlags)
+Node *Tree::findNode(const QStringList &path, Node *relative, int findFlags, const Node* self)
 {
     return const_cast<Node*>(const_cast<const Tree*>(this)->findNode(path,
                                                                      relative,
-                                                                     findFlags));
+                                                                     findFlags,
+                                                                     self));
 }
 
 /*!
  */
 const Node* Tree::findNode(const QStringList &path,
                            const Node* start,
-                           int findFlags) const
+                           int findFlags,
+                           const Node* self) const
 {
     const Node* current = start;
     if (!current)
@@ -172,7 +174,7 @@ const Node* Tree::findNode(const QStringList &path,
         if (node && i == path.size()
                 && (!(findFlags & NonFunction) || node->type() != Node::Function
                     || ((FunctionNode *)node)->metaness() == FunctionNode::MacroWithoutParams))
-            if ((node != start) && (node->subType() != Node::QmlPropertyGroup))
+            if ((node != self) && (node->subType() != Node::QmlPropertyGroup))
                 return node;
         current = current->parent();
     } while (current);
diff --git a/tools/qdoc3/tree.h b/tools/qdoc3/tree.h
index 0865847..b34c3a8 100644
--- a/tools/qdoc3/tree.h
+++ b/tools/qdoc3/tree.h
@@ -65,10 +65,13 @@ class Tree
     Tree();
     ~Tree();
 
-    Node *findNode(const QStringList &path, Node *relative=0, int findFlags=0);
-    Node *findNode(const QStringList &path, 
+    Node* findNode(const QStringList &path, 
+                   Node* relative=0, 
+                   int findFlags=0, 
+                   const Node* self=0);
+    Node* findNode(const QStringList &path, 
                    Node::Type type, 
-                   Node *relative = 0,
+                   Node* relative = 0,
                    int findFlags = 0);
     FunctionNode *findFunctionNode(const QStringList &path, 
                                    Node *relative = 0,
@@ -98,12 +101,13 @@ class Tree
     NamespaceNode *root() { return &roo; }
 
     QString version() const { return vers; }
-    const Node *findNode(const QStringList &path, 
-                         const Node *relative = 0, 
-                         int findFlags = 0) const;
-    const Node *findNode(const QStringList &path, 
+    const Node* findNode(const QStringList &path, 
+                         const Node* relative = 0, 
+                         int findFlags = 0,
+                         const Node* self=0) const;
+    const Node* findNode(const QStringList &path, 
                          Node::Type type, const 
-                         Node *relative = 0,
+                         Node* relative = 0,
                          int findFlags = 0) const;
     const FunctionNode *findFunctionNode(const QStringList &path, 
                                          const Node *relative = 0,
-- 
cgit v0.12