summaryrefslogtreecommitdiffstats
path: root/src/tools
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@digia.com>2013-04-22 16:35:41 +0200
committerFrederik Gladhorn <frederik.gladhorn@digia.com>2013-04-22 16:35:43 +0200
commit4c231d5df3040dbf4545a9a77145ee0e1f9c380c (patch)
tree2cc5b71a5d2b464214cf5372776913fbe4622e1e /src/tools
parent7df16fb4ccbe0476bc34274a77e98eec4e8d2d93 (diff)
parentd672ef07681a959d9559dd1e11e70db1f448a7f1 (diff)
Merge remote-tracking branch 'origin/stable' into dev
Diffstat (limited to 'src/tools')
-rw-r--r--src/tools/bootstrap/bootstrap.pro2
-rw-r--r--src/tools/qdoc/codemarker.cpp33
-rw-r--r--src/tools/qdoc/codemarker.h4
-rw-r--r--src/tools/qdoc/codeparser.cpp2
-rw-r--r--src/tools/qdoc/ditaxmlgenerator.cpp37
-rw-r--r--src/tools/qdoc/ditaxmlgenerator.h13
-rw-r--r--src/tools/qdoc/generator.cpp14
-rw-r--r--src/tools/qdoc/generator.h7
-rw-r--r--src/tools/qdoc/htmlgenerator.cpp71
-rw-r--r--src/tools/qdoc/htmlgenerator.h5
-rw-r--r--src/tools/qdoc/node.h15
-rw-r--r--src/tools/qdoc/qdocdatabase.cpp96
-rw-r--r--src/tools/qdoc/qdocdatabase.h7
-rw-r--r--src/tools/qdoc/qdocindexfiles.cpp7
-rw-r--r--src/tools/qdoc/qdocindexfiles.h1
-rw-r--r--src/tools/qdoc/qmlvisitor.cpp2
16 files changed, 224 insertions, 92 deletions
diff --git a/src/tools/bootstrap/bootstrap.pro b/src/tools/bootstrap/bootstrap.pro
index 4819dbdd07..972f57260e 100644
--- a/src/tools/bootstrap/bootstrap.pro
+++ b/src/tools/bootstrap/bootstrap.pro
@@ -28,6 +28,8 @@ DEFINES += \
QT_CRYPTOGRAPHICHASH_ONLY_SHA1 \
QT_NO_CAST_FROM_ASCII
+DEFINES -= QT_EVAL
+
MODULE_PRIVATE_INCLUDES = \
\$\$QT_MODULE_INCLUDE_BASE \
\$\$QT_MODULE_INCLUDE_BASE/QtCore \
diff --git a/src/tools/qdoc/codemarker.cpp b/src/tools/qdoc/codemarker.cpp
index 4e144d2f7d..e39ff203a5 100644
--- a/src/tools/qdoc/codemarker.cpp
+++ b/src/tools/qdoc/codemarker.cpp
@@ -455,39 +455,6 @@ void CodeMarker::insert(FastSection &fastSection,
}
}
-void CodeMarker::insert(FastSection& fastSection,
- Node* node,
- SynopsisStyle style,
- bool /* includeClassName */)
-{
- if (node->status() == Node::Compat || node->status() == Node::Obsolete)
- return;
-
- bool inheritedMember = false;
- InnerNode* parent = node->parent();
- if (parent && (parent->type() == Node::Document) &&
- (parent->subType() == Node::QmlPropertyGroup)) {
- parent = parent->parent();
- }
- inheritedMember = (parent != fastSection.parent_);
-
- if (!inheritedMember || style == Subpage) {
- QString key = sortName(node);
- if (!fastSection.memberMap.contains(key))
- fastSection.memberMap.insert(key, node);
- }
- else {
- if ((parent->type() == Node::Document) && (parent->subType() == Node::QmlClass)) {
- if (fastSection.inherited.isEmpty()
- || fastSection.inherited.last().first != parent) {
- QPair<InnerNode*, int> p(parent, 0);
- fastSection.inherited.append(p);
- }
- fastSection.inherited.last().second++;
- }
- }
-}
-
/*!
Returns true if \a node represents a reimplemented member
function in the class of the FastSection \a fs. If it is
diff --git a/src/tools/qdoc/codemarker.h b/src/tools/qdoc/codemarker.h
index c31b43e875..02caedf9b8 100644
--- a/src/tools/qdoc/codemarker.h
+++ b/src/tools/qdoc/codemarker.h
@@ -178,10 +178,6 @@ protected:
Node *node,
SynopsisStyle style,
Status status);
- void insert(FastSection& fastSection,
- Node* node,
- SynopsisStyle style,
- bool includeClassName = false);
bool insertReimpFunc(FastSection& fs, Node* node, Status status);
void append(QList<Section>& sectionList, const FastSection& fastSection, bool includeKeys = false);
diff --git a/src/tools/qdoc/codeparser.cpp b/src/tools/qdoc/codeparser.cpp
index 65eeda604f..557a6f08fa 100644
--- a/src/tools/qdoc/codeparser.cpp
+++ b/src/tools/qdoc/codeparser.cpp
@@ -237,7 +237,7 @@ void CodeParser::processCommonMetaCommand(const Location& location,
node->setStatus(Node::Compat);
}
else if (command == COMMAND_DEPRECATED) {
- node->setStatus(Node::Deprecated);
+ node->setStatus(Node::Obsolete);
}
else if ((command == COMMAND_INGROUP) || (command == COMMAND_INPUBLICGROUP)) {
// Note: \ingroup and \inpublicgroup are now the same.
diff --git a/src/tools/qdoc/ditaxmlgenerator.cpp b/src/tools/qdoc/ditaxmlgenerator.cpp
index 21bbdafaf5..a828101551 100644
--- a/src/tools/qdoc/ditaxmlgenerator.cpp
+++ b/src/tools/qdoc/ditaxmlgenerator.cpp
@@ -473,8 +473,6 @@ DitaXmlGenerator::DitaXmlGenerator()
inTableBody(false),
noLinks(false),
obsoleteLinks(false),
- offlineDocs(true),
- codeIndent(0),
divNestingLevel(0),
sectionNestingLevel(0),
tableColumnCount(0),
@@ -573,8 +571,6 @@ void DitaXmlGenerator::initializeGenerator(const Config &config)
customHeadElements = config.getStringList(DitaXmlGenerator::format() +
Config::dot +
DITAXMLGENERATOR_CUSTOMHEADELEMENTS);
- // The following line was changed to fix QTBUG-27798
- //codeIndent = config.getInt(CONFIG_CODEINDENT);
version = config.getString(CONFIG_VERSION);
vrm = version.split(QLatin1Char('.'));
}
@@ -1024,10 +1020,10 @@ int DitaXmlGenerator::generateAtom(const Atom *atom,
generateAnnotatedList(relative, marker, qdb_->getCppClasses());
}
else if (atom->string() == "classes") {
- generateCompactList(relative, qdb_->getCppClasses(), true);
+ generateCompactList(Generic, relative, qdb_->getCppClasses(), true);
}
else if (atom->string() == "qmlclasses") {
- generateCompactList(relative, qdb_->getQmlTypes(), true);
+ generateCompactList(Generic, relative, qdb_->getQmlTypes(), true);
}
else if (atom->string().contains("classesbymodule")) {
QString arg = atom->string().trimmed();
@@ -1046,10 +1042,19 @@ int DitaXmlGenerator::generateAtom(const Atom *atom,
generateClassHierarchy(relative, qdb_->getCppClasses());
}
else if (atom->string() == "compatclasses") {
- generateCompactList(relative, qdb_->getCompatibilityClasses(), false);
+ generateCompactList(Generic, relative, qdb_->getCompatibilityClasses(), false);
}
else if (atom->string() == "obsoleteclasses") {
- generateCompactList(relative, qdb_->getObsoleteClasses(), false);
+ generateCompactList(Generic, relative, qdb_->getObsoleteClasses(), false);
+ }
+ else if (atom->string() == "obsoleteqmltypes") {
+ generateCompactList(Generic, relative, qdb_->getObsoleteQmlTypes(), false);
+ }
+ else if (atom->string() == "obsoletecppmembers") {
+ generateCompactList(Obsolete, relative, qdb_->getClassesWithObsoleteMembers(), false);
+ }
+ else if (atom->string() == "obsoleteqmlmembers") {
+ generateCompactList(Obsolete, relative, qdb_->getQmlTypesWithObsoleteMembers(), false);
}
else if (atom->string() == "functionindex") {
generateFunctionIndex(relative);
@@ -1058,10 +1063,10 @@ int DitaXmlGenerator::generateAtom(const Atom *atom,
generateLegaleseList(relative, marker);
}
else if (atom->string() == "mainclasses") {
- generateCompactList(relative, qdb_->getMainClasses(), true);
+ generateCompactList(Generic, relative, qdb_->getMainClasses(), true);
}
else if (atom->string() == "services") {
- generateCompactList(relative, qdb_->getServiceClasses(), false);
+ generateCompactList(Generic, relative, qdb_->getServiceClasses(), false);
}
else if (atom->string() == "overviews") {
generateOverviewList(relative);
@@ -1176,9 +1181,9 @@ int DitaXmlGenerator::generateAtom(const Atom *atom,
writeCharacters(protectEnc((*s).name));
writeEndTag(); // </p>
if (idx == Class)
- generateCompactList(0, ncmap, false, QString("Q"));
+ generateCompactList(Generic, 0, ncmap, false, QString("Q"));
else if (idx == QmlClass)
- generateCompactList(0, nqcmap, false, QString("Q"));
+ generateCompactList(Generic, 0, nqcmap, false, QString("Q"));
else if (idx == MemberFunction) {
ParentMaps parentmaps;
ParentMaps::iterator pmap;
@@ -2599,7 +2604,7 @@ void DitaXmlGenerator::generateTableOfContents(const Node* node,
inLink_ = false;
}
-void DitaXmlGenerator::generateLowStatusMembers(const InnerNode* inner,
+void DitaXmlGenerator::generateLowStatusMembers(InnerNode* inner,
CodeMarker* marker,
CodeMarker::Status status)
{
@@ -2620,6 +2625,9 @@ void DitaXmlGenerator::generateLowStatusMembers(const InnerNode* inner,
if (sections.isEmpty())
return;
+ if (status == CodeMarker::Obsolete)
+ inner->setObsoleteLink(fileBase(inner) + "-obsolete." + fileExtension());
+
QList<Section>::ConstIterator s = sections.constBegin();
while (s != sections.constEnd()) {
if ((*s).name == "Member Function Documentation") {
@@ -2779,7 +2787,8 @@ void DitaXmlGenerator::generateAnnotatedList(const Node* relative,
normally you let it figure it out itself by looking at
the name of the first and last classes in \a classMap.
*/
-void DitaXmlGenerator::generateCompactList(const Node* relative,
+void DitaXmlGenerator::generateCompactList(ListType , // currently not needed for DITA
+ const Node* relative,
const NodeMap& classMap,
bool includeAlphabet,
QString commonPrefix)
diff --git a/src/tools/qdoc/ditaxmlgenerator.h b/src/tools/qdoc/ditaxmlgenerator.h
index c096829cae..15ef4260b2 100644
--- a/src/tools/qdoc/ditaxmlgenerator.h
+++ b/src/tools/qdoc/ditaxmlgenerator.h
@@ -46,7 +46,6 @@
#include <qregexp.h>
#include <qxmlstream.h>
#include "codemarker.h"
-#include "config.h"
#include "generator.h"
QT_BEGIN_NAMESPACE
@@ -374,16 +373,12 @@ private:
Doc::Sections sectioningUnit,
int numColumns,
const Node* relative = 0);
- void generateLowStatusMembers(const InnerNode* inner,
- CodeMarker* marker,
- CodeMarker::Status status);
- QString generateLowStatusMemberFile(const InnerNode* inner,
- CodeMarker* marker,
- CodeMarker::Status status);
+ void generateLowStatusMembers(InnerNode* inner, CodeMarker* marker, CodeMarker::Status status);
void generateClassHierarchy(const Node* relative, NodeMap& classMap);
void generateAnnotatedList(const Node* relative, CodeMarker* marker, const NodeMap& nodeMap);
void generateAnnotatedList(const Node* relative, CodeMarker* marker, const NodeList& nodes);
- void generateCompactList(const Node* relative,
+ void generateCompactList(ListType listType,
+ const Node* relative,
const NodeMap& classMap,
bool includeAlphabet,
QString commonPrefix = QString());
@@ -484,9 +479,7 @@ private:
bool noLinks;
bool obsoleteLinks;
- bool offlineDocs;
- int codeIndent;
int divNestingLevel;
int sectionNestingLevel;
int tableColumnCount;
diff --git a/src/tools/qdoc/generator.cpp b/src/tools/qdoc/generator.cpp
index e2ee660dd1..d9ee0e42ee 100644
--- a/src/tools/qdoc/generator.cpp
+++ b/src/tools/qdoc/generator.cpp
@@ -68,6 +68,7 @@ QStringList Generator::imageDirs;
QStringList Generator::imageFiles;
QMap<QString, QStringList> Generator::imgFileExts;
QString Generator::outDir_;
+QString Generator::outSubdir_;
QSet<QString> Generator::outputFormats;
QHash<QString, QString> Generator::outputPrefixes;
QString Generator::project;
@@ -1477,10 +1478,13 @@ void Generator::initialize(const Config &config)
redirectDocumentationToDevNull_ = config.getBool(CONFIG_REDIRECTDOCUMENTATIONTODEVNULL);
if (!outputFormats.isEmpty()) {
outDir_ = config.getOutputDir();
-
- if (outDir_.isEmpty())
+ if (outDir_.isEmpty()) {
config.lastLocation().fatal(tr("No output directory specified in "
"configuration file or on the command line"));
+ }
+ else {
+ outSubdir_ = outDir_.mid(outDir_.lastIndexOf('/') + 1);
+ }
QDir dirInfo;
if (dirInfo.exists(outDir_)) {
@@ -1625,8 +1629,12 @@ void Generator::augmentImageDirs(QSet<QString>& moreImageDirs)
}
}
-void Generator::initializeGenerator(const Config & /* config */)
+/*!
+ Sets the generator's pointer to the Config instance.
+ */
+void Generator::initializeGenerator(const Config& config)
{
+ config_ = &config;
}
bool Generator::matchAhead(const Atom *atom, Atom::Type expectedAtomType)
diff --git a/src/tools/qdoc/generator.h b/src/tools/qdoc/generator.h
index ec1e49d2fb..08ee9b4e9b 100644
--- a/src/tools/qdoc/generator.h
+++ b/src/tools/qdoc/generator.h
@@ -50,7 +50,7 @@
#include <qstring.h>
#include <qstringlist.h>
#include <qtextstream.h>
-
+#include "config.h"
#include "node.h"
#include "text.h"
@@ -70,6 +70,7 @@ class Generator
public:
enum Passes { Both, Prepare, Generate };
+ enum ListType { Generic, Obsolete };
Generator();
virtual ~Generator();
@@ -81,11 +82,13 @@ public:
virtual void terminateGenerator();
QString fullDocumentLocation(const Node *node, bool subdir = false);
+ const Config* config() { return config_; }
static Generator *currentGenerator() { return currentGenerator_; }
static Generator *generatorForFormat(const QString& format);
static void initialize(const Config& config);
static const QString& outputDir() { return outDir_; }
+ static const QString& outputSubdir() { return outSubdir_; }
static void terminate();
static void writeOutFileNames();
static void augmentImageDirs(QSet<QString>& moreImageDirs);
@@ -192,6 +195,7 @@ private:
static QMap<QString, QStringList> imgFileExts;
static QString project;
static QString outDir_;
+ static QString outSubdir_;
static QSet<QString> outputFormats;
static QHash<QString, QString> outputPrefixes;
static QStringList scriptDirs;
@@ -222,6 +226,7 @@ private:
QRegExp tag;
protected:
+ const Config* config_;
QDocDatabase* qdb_;
bool inLink_;
bool inContents_;
diff --git a/src/tools/qdoc/htmlgenerator.cpp b/src/tools/qdoc/htmlgenerator.cpp
index 7d7f9e811a..c5dc7d17c9 100644
--- a/src/tools/qdoc/htmlgenerator.cpp
+++ b/src/tools/qdoc/htmlgenerator.cpp
@@ -470,10 +470,10 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark
generateAnnotatedList(relative, marker, qdb_->getCppClasses());
}
else if (atom->string() == "classes") {
- generateCompactList(relative, qdb_->getCppClasses(), true);
+ generateCompactList(Generic, relative, qdb_->getCppClasses(), true);
}
else if (atom->string() == "qmlclasses") {
- generateCompactList(relative, qdb_->getQmlTypes(), true);
+ generateCompactList(Generic, relative, qdb_->getQmlTypes(), true);
}
else if (atom->string().contains("classesbymodule")) {
QString arg = atom->string().trimmed();
@@ -492,10 +492,19 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark
generateClassHierarchy(relative, qdb_->getCppClasses());
}
else if (atom->string() == "compatclasses") {
- generateCompactList(relative, qdb_->getCompatibilityClasses(), false);
+ generateCompactList(Generic, relative, qdb_->getCompatibilityClasses(), false);
}
else if (atom->string() == "obsoleteclasses") {
- generateCompactList(relative, qdb_->getObsoleteClasses(), false);
+ generateCompactList(Generic, relative, qdb_->getObsoleteClasses(), false);
+ }
+ else if (atom->string() == "obsoleteqmltypes") {
+ generateCompactList(Generic, relative, qdb_->getObsoleteQmlTypes(), false);
+ }
+ else if (atom->string() == "obsoletecppmembers") {
+ generateCompactList(Obsolete, relative, qdb_->getClassesWithObsoleteMembers(), false);
+ }
+ else if (atom->string() == "obsoleteqmlmembers") {
+ generateCompactList(Obsolete, relative, qdb_->getQmlTypesWithObsoleteMembers(), false);
}
else if (atom->string() == "functionindex") {
generateFunctionIndex(relative);
@@ -504,10 +513,10 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark
generateLegaleseList(relative, marker);
}
else if (atom->string() == "mainclasses") {
- generateCompactList(relative, qdb_->getMainClasses(), true);
+ generateCompactList(Generic, relative, qdb_->getMainClasses(), true);
}
else if (atom->string() == "services") {
- generateCompactList(relative, qdb_->getServiceClasses(), false);
+ generateCompactList(Generic, relative, qdb_->getServiceClasses(), false);
}
else if (atom->string() == "overviews") {
generateOverviewList(relative);
@@ -640,9 +649,9 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark
<< "\"></a>\n";
out() << "<h3>" << protectEnc((*s).name) << "</h3>\n";
if (idx == Class)
- generateCompactList(0, ncmap, false, QString("Q"));
+ generateCompactList(Generic, 0, ncmap, false, QString("Q"));
else if (idx == QmlClass)
- generateCompactList(0, nqcmap, false, QString("Q"));
+ generateCompactList(Generic, 0, nqcmap, false, QString("Q"));
else if (idx == MemberFunction) {
ParentMaps parentmaps;
ParentMaps::iterator pmap;
@@ -1131,9 +1140,10 @@ void HtmlGenerator::generateClassLikeNode(InnerNode* inner, CodeMarker* marker)
QString obsoleteLink = generateLowStatusMemberFile(inner,
marker,
CodeMarker::Obsolete);
- if (!obsoleteLink.isEmpty())
+ if (!obsoleteLink.isEmpty()) {
out() << "<li><a href=\"" << obsoleteLink << "\">"
<< "Obsolete members</a></li>\n";
+ }
QString compatLink = generateLowStatusMemberFile(inner,
marker,
@@ -1481,9 +1491,10 @@ void HtmlGenerator::generateDocNode(DocNode* dn, CodeMarker* marker)
QString obsoleteLink = generateLowStatusMemberFile(dn,
marker,
CodeMarker::Obsolete);
- if (!obsoleteLink.isEmpty())
+ if (!obsoleteLink.isEmpty()) {
out() << "<li><a href=\"" << obsoleteLink << "\">"
<< "Obsolete members</a></li>\n";
+ }
QString compatLink = generateLowStatusMemberFile(dn,
marker,
@@ -2105,7 +2116,7 @@ QString HtmlGenerator::generateAllQmlMembersFile(const QmlClassNode* qml_cn,
return fileName;
}
-QString HtmlGenerator::generateLowStatusMemberFile(const InnerNode *inner,
+QString HtmlGenerator::generateLowStatusMemberFile(InnerNode *inner,
CodeMarker *marker,
CodeMarker::Status status)
{
@@ -2133,6 +2144,10 @@ QString HtmlGenerator::generateLowStatusMemberFile(const InnerNode *inner,
title = "Obsolete Members for " + inner->name();
fileName = fileBase(inner) + "-obsolete." + fileExtension();
}
+ if (status == CodeMarker::Obsolete) {
+ QString link = QString("../" + Generator::outputSubdir() + QLatin1Char('/')) + fileName;
+ inner->setObsoleteLink(link);
+ }
beginSubPage(inner, fileName);
generateHeader(title, inner, marker);
@@ -2292,7 +2307,8 @@ void HtmlGenerator::generateAnnotatedList(const Node *relative,
normally you let it figure it out itself by looking at
the name of the first and last classes in \a classMap.
*/
-void HtmlGenerator::generateCompactList(const Node *relative,
+void HtmlGenerator::generateCompactList(ListType listType,
+ const Node *relative,
const NodeMap &classMap,
bool includeAlphabet,
QString commonPrefix)
@@ -2452,11 +2468,19 @@ void HtmlGenerator::generateCompactList(const Node *relative,
for (int i=0; i<curParOffset; i++)
++it;
- /*
- Previously, we used generateFullName() for this, but we
- require some special formatting.
- */
- out() << "<a href=\"" << linkForNode(it.value(), relative) << "\">";
+ if (listType == Generic) {
+ /*
+ Previously, we used generateFullName() for this, but we
+ require some special formatting.
+ */
+ out() << "<a href=\"" << linkForNode(it.value(), relative) << "\">";
+ }
+ else if (listType == Obsolete) {
+ QString fileName = fileBase(it.value()) + "-obsolete." + fileExtension();
+ QString link = QString("../" + it.value()->outputSubdirectory() +
+ QLatin1Char('/')) + fileName;
+ out() << "<a href=\"" << link << "\">";
+ }
QStringList pieces;
if (it.value()->subType() == Node::QmlClass)
@@ -4158,15 +4182,28 @@ void HtmlGenerator::generateManifestFile(QString manifest, QString element)
else
writer.writeCDATA(QString("No description available"));
writer.writeEndElement(); // description
+
+ // Add words from module name as tags (QtQuickControls -> qt,quick,controls)
+ QRegExp re("([A-Z][a-z0-9]+)");
+ int pos = 0;
+ while ((pos = re.indexIn(project, pos)) != -1) {
+ tags << re.cap(1).toLower();
+ pos += re.matchedLength();
+ }
tags += QSet<QString>::fromList(en->title().toLower().split(QLatin1Char(' ')));
if (!tags.isEmpty()) {
writer.writeStartElement("tags");
bool wrote_one = false;
+ // Exclude invalid and common words
foreach (QString tag, tags) {
+ if (tag.length() < 2)
+ continue;
if (tag.at(0).isDigit())
continue;
if (tag.at(0) == '-')
continue;
+ if (tag == QStringLiteral("qt"))
+ continue;
if (tag.startsWith("example"))
continue;
if (tag.startsWith("chapter"))
diff --git a/src/tools/qdoc/htmlgenerator.h b/src/tools/qdoc/htmlgenerator.h
index f2efab78a1..cdf296e783 100644
--- a/src/tools/qdoc/htmlgenerator.h
+++ b/src/tools/qdoc/htmlgenerator.h
@@ -150,13 +150,14 @@ private:
CodeMarker *marker);
QString generateAllQmlMembersFile(const QmlClassNode* qml_cn,
CodeMarker* marker);
- QString generateLowStatusMemberFile(const InnerNode *inner,
+ QString generateLowStatusMemberFile(InnerNode *inner,
CodeMarker *marker,
CodeMarker::Status status);
void generateClassHierarchy(const Node *relative, NodeMap &classMap);
void generateAnnotatedList(const Node* relative, CodeMarker* marker, const NodeMap& nodeMap);
void generateAnnotatedList(const Node* relative, CodeMarker* marker, const NodeList& nodes);
- void generateCompactList(const Node *relative,
+ void generateCompactList(ListType listType,
+ const Node *relative,
const NodeMap &classMap,
bool includeAlphabet,
QString commonPrefix = QString());
diff --git a/src/tools/qdoc/node.h b/src/tools/qdoc/node.h
index 642bcec06a..d1a95358f0 100644
--- a/src/tools/qdoc/node.h
+++ b/src/tools/qdoc/node.h
@@ -167,7 +167,11 @@ public:
void setAccess(Access access) { access_ = access; }
void setLocation(const Location& location) { loc = location; }
void setDoc(const Doc& doc, bool replace = false);
- void setStatus(Status status) { status_ = status; }
+ void setStatus(Status status) {
+ if (status_ == Obsolete && status == Deprecated)
+ return;
+ status_ = status;
+ }
void setThreadSafeness(ThreadSafeness safeness) { safeness_ = safeness; }
void setSince(const QString &since);
void setRelates(InnerNode* pseudoParent);
@@ -218,6 +222,8 @@ public:
QString url() const;
virtual QString nameForLists() const { return name_; }
virtual QString outputFileName() const { return QString(); }
+ virtual QString obsoleteLink() const { return QString(); }
+ virtual void setObsoleteLink(const QString& ) { };
Access access() const { return access_; }
QString accessString() const;
@@ -253,6 +259,7 @@ public:
QmlClassNode* qmlClassNode();
ClassNode* declarativeCppNode();
const QString& outputSubdirectory() const { return outSubDir_; }
+ void setOutputSubdirectory(const QString& t) { outSubDir_ = t; }
QString fullDocumentName() const;
static QString cleanId(QString str);
QString idForNode() const;
@@ -430,6 +437,8 @@ public:
ClassNode(InnerNode* parent, const QString& name);
virtual ~ClassNode() { }
virtual bool isClass() const { return true; }
+ virtual QString obsoleteLink() const { return obsoleteLink_; }
+ virtual void setObsoleteLink(const QString& t) { obsoleteLink_ = t; };
void addBaseClass(Access access,
ClassNode* node,
@@ -455,6 +464,7 @@ private:
QList<RelatedClass> ignoredBases;
bool abstract_;
QString sname;
+ QString obsoleteLink_;
QmlClassNode* qmlelement;
};
@@ -561,6 +571,8 @@ public:
virtual void setAbstract(bool b) { abstract_ = b; }
virtual bool isInternal() const { return (status() == Internal); }
virtual QString qmlFullBaseName() const;
+ virtual QString obsoleteLink() const { return obsoleteLink_; }
+ virtual void setObsoleteLink(const QString& t) { obsoleteLink_ = t; };
const ImportList& importList() const { return importList_; }
void setImportList(const ImportList& il) { importList_ = il; }
const QString& qmlBaseName() const { return baseName_; }
@@ -582,6 +594,7 @@ private:
bool cnodeRequired_;
ClassNode* cnode_;
QString baseName_;
+ QString obsoleteLink_;
QmlClassNode* baseNode_;
ImportList importList_;
};
diff --git a/src/tools/qdoc/qdocdatabase.cpp b/src/tools/qdoc/qdocdatabase.cpp
index 30a9efaada..674917f6dc 100644
--- a/src/tools/qdoc/qdocdatabase.cpp
+++ b/src/tools/qdoc/qdocdatabase.cpp
@@ -430,6 +430,7 @@ void QDocDatabase::buildCollections()
findAllLegaleseTexts(treeRoot());
findAllNamespaces(treeRoot());
findAllSince(treeRoot());
+ findAllObsoleteThings(treeRoot());
}
/*!
@@ -451,9 +452,6 @@ void QDocDatabase::findAllClasses(const InnerNode* node)
if ((*c)->status() == Node::Compat) {
compatClasses_.insert(className, *c);
}
- else if ((*c)->status() == Node::Obsolete) {
- obsoleteClasses_.insert(className, *c);
- }
else {
nonCompatClasses_.insert(className, *c);
if ((*c)->status() == Node::Main)
@@ -548,6 +546,98 @@ void QDocDatabase::findAllNamespaces(const InnerNode* node)
}
/*!
+ Finds all nodes with status = Obsolete and sorts them into
+ maps. They can be C++ classes, QML types, or they can be
+ functions, enum types, typedefs, methods, etc.
+ */
+void QDocDatabase::findAllObsoleteThings(const InnerNode* node)
+{
+ NodeList::const_iterator c = node->childNodes().constBegin();
+ while (c != node->childNodes().constEnd()) {
+ if ((*c)->access() != Node::Private) {
+ QString name = (*c)->name();
+ if ((*c)->status() == Node::Obsolete) {
+ if ((*c)->type() == Node::Class) {
+ if ((*c)->parent() && (*c)->parent()->type() == Node::Namespace &&
+ !(*c)->parent()->name().isEmpty())
+ name = (*c)->parent()->name() + "::" + name;
+ obsoleteClasses_.insert(name, *c);
+ }
+ else if ((*c)->type() == Node::Document && (*c)->subType() == Node::QmlClass) {
+ if (name.startsWith(QLatin1String("QML:")))
+ name = name.mid(4);
+ name = (*c)->qmlModuleIdentifier() + "::" + name;
+ obsoleteQmlTypes_.insert(name,*c);
+ }
+ }
+ else if ((*c)->type() == Node::Class) {
+ InnerNode* n = static_cast<InnerNode*>(*c);
+ bool inserted = false;
+ NodeList::const_iterator p = n->childNodes().constBegin();
+ while (p != n->childNodes().constEnd()) {
+ if ((*p)->access() != Node::Private) {
+ switch ((*p)->type()) {
+ case Node::Enum:
+ case Node::Typedef:
+ case Node::Function:
+ case Node::Property:
+ case Node::Variable:
+ if ((*p)->status() == Node::Obsolete) {
+ if ((*c)->parent() && (*c)->parent()->type() == Node::Namespace &&
+ !(*c)->parent()->name().isEmpty())
+ name = (*c)->parent()->name() + "::" + name;
+ classesWithObsoleteMembers_.insert(name, *c);
+ inserted = true;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ if (inserted)
+ break;
+ ++p;
+ }
+ }
+ else if ((*c)->type() == Node::Document && (*c)->subType() == Node::QmlClass) {
+ InnerNode* n = static_cast<InnerNode*>(*c);
+ bool inserted = false;
+ NodeList::const_iterator p = n->childNodes().constBegin();
+ while (p != n->childNodes().constEnd()) {
+ if ((*p)->access() != Node::Private) {
+ switch ((*c)->type()) {
+ case Node::QmlProperty:
+ case Node::QmlSignal:
+ case Node::QmlSignalHandler:
+ case Node::QmlMethod:
+ if ((*c)->parent()) {
+ Node* parent = (*c)->parent();
+ if (parent->subType() == Node::QmlPropertyGroup && parent->parent())
+ parent = parent->parent();
+ if (parent && parent->subType() == Node::QmlClass && !parent->name().isEmpty())
+ name = parent->name() + "::" + name;
+ }
+ qmlTypesWithObsoleteMembers_.insert(name,*c);
+ inserted = true;
+ break;
+ default:
+ break;
+ }
+ }
+ if (inserted)
+ break;
+ ++p;
+ }
+ }
+ else if ((*c)->isInnerNode()) {
+ findAllObsoleteThings(static_cast<InnerNode*>(*c));
+ }
+ }
+ ++c;
+ }
+}
+
+/*!
Finds all the nodes where a \e{since} command appeared in the
qdoc comment and sorts them into maps according to the kind of
node.
diff --git a/src/tools/qdoc/qdocdatabase.h b/src/tools/qdoc/qdocdatabase.h
index 19dde361f8..d97fb3809a 100644
--- a/src/tools/qdoc/qdocdatabase.h
+++ b/src/tools/qdoc/qdocdatabase.h
@@ -113,6 +113,7 @@ class QDocDatabase
void findAllFunctions(const InnerNode *node);
void findAllLegaleseTexts(const InnerNode *node);
void findAllNamespaces(const InnerNode *node);
+ void findAllObsoleteThings(const InnerNode* node);
void findAllSince(const InnerNode *node);
void buildCollections();
@@ -121,6 +122,9 @@ class QDocDatabase
NodeMap& getMainClasses() { return mainClasses_; }
NodeMap& getCompatibilityClasses() { return compatClasses_; }
NodeMap& getObsoleteClasses() { return obsoleteClasses_; }
+ NodeMap& getClassesWithObsoleteMembers() { return classesWithObsoleteMembers_; }
+ NodeMap& getObsoleteQmlTypes() { return obsoleteQmlTypes_; }
+ NodeMap& getQmlTypesWithObsoleteMembers() { return qmlTypesWithObsoleteMembers_; }
NodeMap& getNamespaces() { return namespaceIndex_; }
NodeMap& getServiceClasses() { return serviceClasses_; }
NodeMap& getQmlTypes() { return qmlClasses_; }
@@ -223,6 +227,9 @@ class QDocDatabase
NodeMap mainClasses_;
NodeMap compatClasses_;
NodeMap obsoleteClasses_;
+ NodeMap classesWithObsoleteMembers_;
+ NodeMap obsoleteQmlTypes_;
+ NodeMap qmlTypesWithObsoleteMembers_;
NodeMap namespaceIndex_;
NodeMap serviceClasses_;
NodeMap qmlClasses_;
diff --git a/src/tools/qdoc/qdocindexfiles.cpp b/src/tools/qdoc/qdocindexfiles.cpp
index d7a51da952..59adc63c9e 100644
--- a/src/tools/qdoc/qdocindexfiles.cpp
+++ b/src/tools/qdoc/qdocindexfiles.cpp
@@ -136,6 +136,7 @@ void QDocIndexFiles::readIndexFile(const QString& path)
QDir installDir(path.section('/', 0, -3) + "/outputdir");
indexUrl = installDir.relativeFilePath(path).section('/', 0, -2);
}
+ project_ = indexElement.attribute("project", QString());
basesList_.clear();
relatedList_.clear();
@@ -459,7 +460,7 @@ void QDocIndexFiles::readIndexSection(const QDomElement& element,
else if (status == "obsolete")
node->setStatus(Node::Obsolete);
else if (status == "deprecated")
- node->setStatus(Node::Deprecated);
+ node->setStatus(Node::Obsolete);
else if (status == "preliminary")
node->setStatus(Node::Preliminary);
else if (status == "commendable")
@@ -503,6 +504,7 @@ void QDocIndexFiles::readIndexSection(const QDomElement& element,
Doc doc(location, location, " ", emptySet); // placeholder
node->setDoc(doc);
node->setIndexNodeFlag();
+ node->setOutputSubdirectory(project_.toLower());
if (node->isInnerNode()) {
InnerNode* inner = static_cast<InnerNode*>(node);
@@ -712,7 +714,7 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter& writer,
status = "obsolete";
break;
case Node::Deprecated:
- status = "deprecated";
+ status = "obsolete";
break;
case Node::Preliminary:
status = "preliminary";
@@ -1203,6 +1205,7 @@ void QDocIndexFiles::generateIndex(const QString& fileName,
writer.writeAttribute("url", url);
writer.writeAttribute("title", title);
writer.writeAttribute("version", qdb_->version());
+ writer.writeAttribute("project", g->config()->getString(CONFIG_PROJECT));
generateIndexSections(writer, qdb_->treeRoot(), generateInternalNodes);
diff --git a/src/tools/qdoc/qdocindexfiles.h b/src/tools/qdoc/qdocindexfiles.h
index 2b1eb1951e..e4a83176a2 100644
--- a/src/tools/qdoc/qdocindexfiles.h
+++ b/src/tools/qdoc/qdocindexfiles.h
@@ -86,6 +86,7 @@ class QDocIndexFiles
static QDocIndexFiles* qdocIndexFiles_;
QDocDatabase* qdb_;
Generator* gen_;
+ QString project_;
QList<QPair<ClassNode*,QString> > basesList_;
QList<QPair<FunctionNode*,QString> > relatedList_;
diff --git a/src/tools/qdoc/qmlvisitor.cpp b/src/tools/qdoc/qmlvisitor.cpp
index ffe1afe28b..ac659720b2 100644
--- a/src/tools/qdoc/qmlvisitor.cpp
+++ b/src/tools/qdoc/qmlvisitor.cpp
@@ -316,7 +316,7 @@ void QmlDocVisitor::applyMetacommands(QQmlJS::AST::SourceLocation,
}
}
else if (command == COMMAND_DEPRECATED) {
- node->setStatus(Node::Deprecated);
+ node->setStatus(Node::Obsolete);
}
else if (command == COMMAND_INQMLMODULE) {
qdb->addToQmlModule(args[0].first,node);