qdoc: Part 2 of fix for inheriting abstract QML types
This fix not only gets the property lists correct but also creates correct links to the property docs. A side effect is that QML properties, methods, and signals whose names begin with "__" are automatically treated as if they are marked \internal. This had been agreed earlier but had not been implemented. It is also required to fix this bug so it is included here. Task-number: QTBUG-33814 Change-Id: I57de1e49774db47cb57c042f181ccc8edec62d13 Reviewed-by: Topi Reiniö <topi.reinio@digia.com> Reviewed-by: Nico Vertriest <nico.vertriest@digia.com> Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>bb10
parent
7e6ca1ef0d
commit
6893a0d656
|
|
@ -1111,6 +1111,10 @@ QList<Section> CppCodeMarker::qmlSections(const QmlClassNode* qmlClassNode, Syno
|
|||
while (qcn != 0) {
|
||||
NodeList::ConstIterator c = qcn->childNodes().constBegin();
|
||||
while (c != qcn->childNodes().constEnd()) {
|
||||
if ((*c)->status() == Node::Internal) {
|
||||
++c;
|
||||
continue;
|
||||
}
|
||||
if ((*c)->type() == Node::QmlPropertyGroup) {
|
||||
insert(qmlproperties, *c, style, Okay);
|
||||
}
|
||||
|
|
@ -1172,6 +1176,10 @@ QList<Section> CppCodeMarker::qmlSections(const QmlClassNode* qmlClassNode, Syno
|
|||
while (qcn != 0) {
|
||||
NodeList::ConstIterator c = qcn->childNodes().constBegin();
|
||||
while (c != qcn->childNodes().constEnd()) {
|
||||
if ((*c)->status() == Node::Internal) {
|
||||
++c;
|
||||
continue;
|
||||
}
|
||||
if ((*c)->type() == Node::QmlPropertyGroup) {
|
||||
insert(qmlproperties,*c,style,Okay);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2311,7 +2311,7 @@ QString HtmlGenerator::generateAllQmlMembersFile(const QmlClassNode* qml_cn,
|
|||
}
|
||||
out() << "<ul>\n";
|
||||
for (int j=0; j<keys.size(); j++) {
|
||||
if (nodes[j]->access() == Node::Private) {
|
||||
if (nodes[j]->access() == Node::Private || nodes[j]->status() == Node::Internal) {
|
||||
continue;
|
||||
}
|
||||
out() << "<li class=\"fn\">";
|
||||
|
|
@ -2320,7 +2320,8 @@ QString HtmlGenerator::generateAllQmlMembersFile(const QmlClassNode* qml_cn,
|
|||
prefix = keys.at(j).mid(1);
|
||||
prefix = prefix.left(keys.at(j).indexOf("::")+1);
|
||||
}
|
||||
generateSynopsis(nodes[j], qcn, marker, CodeMarker::Summary, false, &prefix);
|
||||
generateQmlItem(nodes[j], qcn, marker, true);
|
||||
//generateSynopsis(nodes[j], qcn, marker, CodeMarker::Subpage, false, &prefix);
|
||||
out() << "</li>\n";
|
||||
}
|
||||
out() << "</ul>\n";
|
||||
|
|
|
|||
|
|
@ -1867,7 +1867,10 @@ FunctionNode::FunctionNode(Type type, InnerNode *parent, const QString& name, bo
|
|||
rf(0),
|
||||
ap(0)
|
||||
{
|
||||
// nothing.
|
||||
if (type == QmlMethod || type == QmlSignal) {
|
||||
if (name.startsWith("__"))
|
||||
setStatus(Internal);
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
|
|
@ -2326,6 +2329,8 @@ QmlPropertyNode::QmlPropertyNode(InnerNode* parent,
|
|||
setPageType(ApiPage);
|
||||
if (type_ == QString("alias"))
|
||||
isAlias_ = true;
|
||||
if (name.startsWith("__"))
|
||||
setStatus(Internal);
|
||||
}
|
||||
|
||||
/*!
|
||||
|
|
|
|||
|
|
@ -195,6 +195,7 @@ public:
|
|||
|
||||
virtual bool isInnerNode() const = 0;
|
||||
virtual bool isQmlModule() const { return false; }
|
||||
virtual bool isQmlType() const { return false; }
|
||||
virtual bool isExample() const { return false; }
|
||||
virtual bool isExampleFile() const { return false; }
|
||||
virtual bool isLeaf() const { return false; }
|
||||
|
|
@ -610,6 +611,7 @@ public:
|
|||
QmlClassNode(InnerNode* parent, const QString& name);
|
||||
virtual ~QmlClassNode();
|
||||
virtual bool isQmlNode() const { return true; }
|
||||
virtual bool isQmlType() const { return true; }
|
||||
virtual bool isQtQuickNode() const { return (qmlModuleName() == QLatin1String("QtQuick")); }
|
||||
virtual ClassNode* classNode() { return cnode_; }
|
||||
virtual void setClassNode(ClassNode* cn) { cnode_ = cn; }
|
||||
|
|
|
|||
|
|
@ -120,7 +120,6 @@ void QDocIndexFiles::readIndexFile(const QString& path)
|
|||
{
|
||||
QFile file(path);
|
||||
if (file.open(QFile::ReadOnly)) {
|
||||
//qDebug() << "READING:" << path;
|
||||
QDomDocument document;
|
||||
document.setContent(&file);
|
||||
file.close();
|
||||
|
|
@ -515,10 +514,12 @@ void QDocIndexFiles::readIndexSection(const QDomElement& element,
|
|||
QString moduleName = element.attribute("module");
|
||||
if (!moduleName.isEmpty())
|
||||
node->setModuleName(moduleName);
|
||||
if (node->isExternalPage())
|
||||
node->setUrl(href);
|
||||
else if (!indexUrl.isEmpty())
|
||||
node->setUrl(indexUrl + QLatin1Char('/') + href);
|
||||
if (!href.isEmpty()) {
|
||||
if (node->isExternalPage())
|
||||
node->setUrl(href);
|
||||
else if (!indexUrl.isEmpty())
|
||||
node->setUrl(indexUrl + QLatin1Char('/') + href);
|
||||
}
|
||||
|
||||
QString since = element.attribute("since");
|
||||
if (!since.isEmpty()) {
|
||||
|
|
@ -717,6 +718,7 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter& writer,
|
|||
access = "protected";
|
||||
break;
|
||||
case Node::Private:
|
||||
#if 0
|
||||
// Do not include private non-internal nodes in the index.
|
||||
// (Internal public and protected nodes are marked as private
|
||||
// by qdoc. We can check their internal status to determine
|
||||
|
|
@ -725,6 +727,13 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter& writer,
|
|||
access = "internal";
|
||||
else
|
||||
return false;
|
||||
#endif
|
||||
{
|
||||
access = "private";
|
||||
bool b = generateInternalNodes;
|
||||
if (b)
|
||||
b = false;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
|
|
@ -811,13 +820,24 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter& writer,
|
|||
}
|
||||
else
|
||||
href = node->name();
|
||||
writer.writeAttribute("href", href);
|
||||
if (node->isQmlNode()) {
|
||||
InnerNode* p = node->parent();
|
||||
if (p) {
|
||||
if (p->isQmlPropertyGroup())
|
||||
p = p->parent();
|
||||
if (p && p->isQmlType() && p->isAbstract())
|
||||
href.clear();
|
||||
}
|
||||
}
|
||||
if (!href.isEmpty())
|
||||
writer.writeAttribute("href", href);
|
||||
|
||||
writer.writeAttribute("access", access);
|
||||
writer.writeAttribute("status", status);
|
||||
if (node->isAbstract())
|
||||
writer.writeAttribute("abstract", "true");
|
||||
writer.writeAttribute("location", node->location().fileName());
|
||||
if (!node->location().fileName().isEmpty())
|
||||
writer.writeAttribute("location", node->location().fileName());
|
||||
if (!node->location().filePath().isEmpty()) {
|
||||
writer.writeAttribute("filepath", node->location().filePath());
|
||||
writer.writeAttribute("lineno", QString("%1").arg(node->location().lineNo()));
|
||||
|
|
|
|||
|
|
@ -404,7 +404,6 @@ void QmlDocVisitor::applyMetacommands(QQmlJS::AST::SourceLocation,
|
|||
}
|
||||
}
|
||||
else if (command == COMMAND_INTERNAL) {
|
||||
node->setAccess(Node::Private);
|
||||
node->setStatus(Node::Internal);
|
||||
}
|
||||
else if (command == COMMAND_OBSOLETE) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue