summaryrefslogtreecommitdiffstats
path: root/src/tools
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools')
-rw-r--r--src/tools/bootstrap/bootstrap.pro12
-rw-r--r--src/tools/moc/generator.cpp340
-rw-r--r--src/tools/moc/preprocessor.cpp59
-rw-r--r--src/tools/moc/preprocessor.h4
-rw-r--r--src/tools/qdoc/atom.cpp8
-rw-r--r--src/tools/qdoc/atom.h31
-rw-r--r--src/tools/qdoc/codeparser.cpp9
-rw-r--r--src/tools/qdoc/codeparser.h5
-rw-r--r--src/tools/qdoc/config.cpp36
-rw-r--r--src/tools/qdoc/config.h5
-rw-r--r--src/tools/qdoc/cppcodemarker.h30
-rw-r--r--src/tools/qdoc/cppcodeparser.h18
-rw-r--r--src/tools/qdoc/ditaxmlgenerator.cpp6
-rw-r--r--src/tools/qdoc/ditaxmlgenerator.h34
-rw-r--r--src/tools/qdoc/doc.cpp43
-rw-r--r--src/tools/qdoc/doc.h8
-rw-r--r--src/tools/qdoc/generator.cpp17
-rw-r--r--src/tools/qdoc/generator.h22
-rw-r--r--src/tools/qdoc/htmlgenerator.cpp295
-rw-r--r--src/tools/qdoc/htmlgenerator.h30
-rw-r--r--src/tools/qdoc/jscodemarker.h10
-rw-r--r--src/tools/qdoc/location.cpp16
-rw-r--r--src/tools/qdoc/location.h4
-rw-r--r--src/tools/qdoc/main.cpp489
-rw-r--r--src/tools/qdoc/node.cpp2
-rw-r--r--src/tools/qdoc/node.h266
-rw-r--r--src/tools/qdoc/plaincodemarker.h26
-rw-r--r--src/tools/qdoc/puredocparser.h4
-rw-r--r--src/tools/qdoc/qdocdatabase.cpp321
-rw-r--r--src/tools/qdoc/qdocdatabase.h54
-rw-r--r--src/tools/qdoc/qdocindexfiles.cpp4
-rw-r--r--src/tools/qdoc/qmlcodemarker.h20
-rw-r--r--src/tools/qdoc/qmlcodeparser.h12
-rw-r--r--src/tools/qdoc/qmlmarkupvisitor.h172
-rw-r--r--src/tools/qdoc/qmlparser/qqmljsast_p.h548
-rw-r--r--src/tools/qdoc/qmlvisitor.h34
-rw-r--r--src/tools/qdoc/tokenizer.cpp8
-rw-r--r--src/tools/qdoc/tree.cpp72
-rw-r--r--src/tools/qdoc/tree.h36
-rw-r--r--src/tools/uic/cpp/cppextractimages.h6
-rw-r--r--src/tools/uic/cpp/cppwritedeclaration.h14
-rw-r--r--src/tools/uic/cpp/cppwriteicondata.h6
-rw-r--r--src/tools/uic/cpp/cppwriteicondeclaration.h6
-rw-r--r--src/tools/uic/cpp/cppwriteiconinitialization.h6
-rw-r--r--src/tools/uic/cpp/cppwriteincludes.h20
-rw-r--r--src/tools/uic/cpp/cppwriteinitialization.cpp16
-rw-r--r--src/tools/uic/cpp/cppwriteinitialization.h32
-rw-r--r--src/tools/uic/customwidgetsinfo.h6
-rw-r--r--src/tools/uic/databaseinfo.h4
-rw-r--r--src/tools/uic/validator.h12
50 files changed, 1952 insertions, 1286 deletions
diff --git a/src/tools/bootstrap/bootstrap.pro b/src/tools/bootstrap/bootstrap.pro
index 527a932c4d..e0f5546966 100644
--- a/src/tools/bootstrap/bootstrap.pro
+++ b/src/tools/bootstrap/bootstrap.pro
@@ -130,9 +130,15 @@ win32:SOURCES += ../../corelib/io/qfilesystemengine_win.cpp \
../../corelib/plugin/qsystemlibrary.cpp \
mac {
- SOURCES += ../../corelib/kernel/qcoreapplication_mac.cpp \
- ../../corelib/kernel/qcore_mac.cpp
- LIBS += -framework CoreServices -framework Foundation
+ SOURCES += \
+ ../../corelib/kernel/qcoreapplication_mac.cpp \
+ ../../corelib/kernel/qcore_mac.cpp
+ OBJECTIVE_SOURCES += \
+ ../../corelib/kernel/qcore_mac_objc.mm
+
+ LIBS += -framework Foundation
+ osx: LIBS_PRIVATE += -framework CoreServices
+ ios: LIBS_PRIVATE += -framework UIKit
}
macx {
diff --git a/src/tools/moc/generator.cpp b/src/tools/moc/generator.cpp
index 6c5e772e8c..fcc43aca68 100644
--- a/src/tools/moc/generator.cpp
+++ b/src/tools/moc/generator.cpp
@@ -230,13 +230,23 @@ void Generator::generateCode()
//
// Build stringdata struct
//
+ const int constCharArraySizeLimit = 65535;
fprintf(out, "struct qt_meta_stringdata_%s_t {\n", qualifiedClassNameIdentifier.constData());
fprintf(out, " QByteArrayData data[%d];\n", strings.size());
{
- int len = 0;
- for (int i = 0; i < strings.size(); ++i)
- len += strings.at(i).length() + 1;
- fprintf(out, " char stringdata[%d];\n", len);
+ int stringDataLength = 0;
+ int stringDataCounter = 0;
+ for (int i = 0; i < strings.size(); ++i) {
+ int thisLength = strings.at(i).length() + 1;
+ stringDataLength += thisLength;
+ if (stringDataLength / constCharArraySizeLimit) {
+ // save previous stringdata and start computing the next one.
+ fprintf(out, " char stringdata%d[%d];\n", stringDataCounter++, stringDataLength - thisLength);
+ stringDataLength = thisLength;
+ }
+ }
+ fprintf(out, " char stringdata%d[%d];\n", stringDataCounter, stringDataLength);
+
}
fprintf(out, "};\n");
@@ -247,7 +257,7 @@ void Generator::generateCode()
// QByteArrayData::data() implementation returning simply "this + offset".
fprintf(out, "#define QT_MOC_LITERAL(idx, ofs, len) \\\n"
" Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \\\n"
- " qptrdiff(offsetof(qt_meta_stringdata_%s_t, stringdata) + ofs \\\n"
+ " qptrdiff(offsetof(qt_meta_stringdata_%s_t, stringdata0) + ofs \\\n"
" - idx * sizeof(QByteArrayData)) \\\n"
" )\n",
qualifiedClassNameIdentifier.constData());
@@ -282,9 +292,18 @@ void Generator::generateCode()
fprintf(out, " \"");
int col = 0;
int len = 0;
+ int stringDataLength = 0;
for (int i = 0; i < strings.size(); ++i) {
QByteArray s = strings.at(i);
len = s.length();
+ stringDataLength += len + 1;
+ if (stringDataLength >= constCharArraySizeLimit) {
+ fprintf(out, "\",\n \"");
+ stringDataLength = len + 1;
+ col = 0;
+ } else if (i)
+ fputs("\\0", out); // add \0 at the end of each string
+
if (col && col + len >= 72) {
fprintf(out, "\"\n \"");
col = 0;
@@ -309,9 +328,6 @@ void Generator::generateCode()
idx += spanLen;
col += spanLen;
}
-
- if (i != strings.size() - 1) // skip the last \0 the c++ will add it for us
- fputs("\\0", out);
col += len + 2;
}
@@ -359,7 +375,13 @@ void Generator::generateCode()
fprintf(out, " %4d, %4d, // constructors\n", isConstructible ? cdef->constructorList.count() : 0,
isConstructible ? index : 0);
- fprintf(out, " %4d, // flags\n", 0);
+ int flags = 0;
+ if (cdef->hasQGadget) {
+ // Ideally, all the classes could have that flag. But this broke classes generated
+ // by qdbusxml2cpp which generate code that require that we call qt_metacall for properties
+ flags |= PropertyAccessInStaticMetaCall;
+ }
+ fprintf(out, " %4d, // flags\n", flags);
fprintf(out, " %4d, // signalCount\n", cdef->signalList.count());
@@ -425,7 +447,9 @@ void Generator::generateCode()
//
// Generate internal qt_static_metacall() function
//
- if (cdef->hasQObject && !isQt)
+ const bool hasStaticMetaCall = !isQt &&
+ (cdef->hasQObject || !cdef->methodList.isEmpty() || !cdef->propertyList.isEmpty());
+ if (hasStaticMetaCall)
generateStaticMetacall();
//
@@ -513,7 +537,7 @@ void Generator::generateCode()
fprintf(out, "qt_meta_stringdata_%s.data,\n"
" qt_meta_data_%s, ", qualifiedClassNameIdentifier.constData(),
qualifiedClassNameIdentifier.constData());
- if (cdef->hasQObject && !isQt)
+ if (hasStaticMetaCall)
fprintf(out, " qt_static_metacall, ");
else
fprintf(out, " Q_NULLPTR, ");
@@ -538,7 +562,7 @@ void Generator::generateCode()
//
fprintf(out, "\nvoid *%s::qt_metacast(const char *_clname)\n{\n", cdef->qualified.constData());
fprintf(out, " if (!_clname) return Q_NULLPTR;\n");
- fprintf(out, " if (!strcmp(_clname, qt_meta_stringdata_%s.stringdata))\n"
+ fprintf(out, " if (!strcmp(_clname, qt_meta_stringdata_%s.stringdata0))\n"
" return static_cast<void*>(const_cast< %s*>(this));\n",
qualifiedClassNameIdentifier.constData(), cdef->classname.constData());
for (int i = 1; i < cdef->superclassList.size(); ++i) { // for all superclasses but the first one
@@ -919,10 +943,6 @@ void Generator::generateMetacall()
}
if (cdef->propertyList.size()) {
- bool needGet = false;
- bool needTempVarForGet = false;
- bool needSet = false;
- bool needReset = false;
bool needDesignable = false;
bool needScriptable = false;
bool needStored = false;
@@ -930,132 +950,21 @@ void Generator::generateMetacall()
bool needUser = false;
for (int i = 0; i < cdef->propertyList.size(); ++i) {
const PropertyDef &p = cdef->propertyList.at(i);
- needGet |= !p.read.isEmpty() || !p.member.isEmpty();
- if (!p.read.isEmpty() || !p.member.isEmpty())
- needTempVarForGet |= (p.gspec != PropertyDef::PointerSpec
- && p.gspec != PropertyDef::ReferenceSpec);
-
- needSet |= !p.write.isEmpty() || (!p.member.isEmpty() && !p.constant);
- needReset |= !p.reset.isEmpty();
needDesignable |= p.designable.endsWith(')');
needScriptable |= p.scriptable.endsWith(')');
needStored |= p.stored.endsWith(')');
needEditable |= p.editable.endsWith(')');
needUser |= p.user.endsWith(')');
}
- fprintf(out, "\n#ifndef QT_NO_PROPERTIES\n ");
+ fprintf(out, "\n#ifndef QT_NO_PROPERTIES\n ");
if (needElse)
- fprintf(out, " else ");
- fprintf(out, "if (_c == QMetaObject::ReadProperty) {\n");
- if (needGet) {
- if (needTempVarForGet)
- fprintf(out, " void *_v = _a[0];\n");
- fprintf(out, " switch (_id) {\n");
- for (int propindex = 0; propindex < cdef->propertyList.size(); ++propindex) {
- const PropertyDef &p = cdef->propertyList.at(propindex);
- if (p.read.isEmpty() && p.member.isEmpty())
- continue;
- QByteArray prefix;
- if (p.inPrivateClass.size()) {
- prefix = p.inPrivateClass;
- prefix.append("->");
- }
- if (p.gspec == PropertyDef::PointerSpec)
- fprintf(out, " case %d: _a[0] = const_cast<void*>(reinterpret_cast<const void*>(%s%s())); break;\n",
- propindex, prefix.constData(), p.read.constData());
- else if (p.gspec == PropertyDef::ReferenceSpec)
- fprintf(out, " case %d: _a[0] = const_cast<void*>(reinterpret_cast<const void*>(&%s%s())); break;\n",
- propindex, prefix.constData(), p.read.constData());
- else if (cdef->enumDeclarations.value(p.type, false))
- fprintf(out, " case %d: *reinterpret_cast<int*>(_v) = QFlag(%s%s()); break;\n",
- propindex, prefix.constData(), p.read.constData());
- else if (!p.read.isEmpty())
- fprintf(out, " case %d: *reinterpret_cast< %s*>(_v) = %s%s(); break;\n",
- propindex, p.type.constData(), prefix.constData(), p.read.constData());
- else
- fprintf(out, " case %d: *reinterpret_cast< %s*>(_v) = %s%s; break;\n",
- propindex, p.type.constData(), prefix.constData(), p.member.constData());
- }
- fprintf(out, " default: break;\n");
- fprintf(out, " }\n");
- }
-
- fprintf(out,
- " _id -= %d;\n"
- " }", cdef->propertyList.count());
-
- fprintf(out, " else ");
- fprintf(out, "if (_c == QMetaObject::WriteProperty) {\n");
-
- if (needSet) {
- fprintf(out, " void *_v = _a[0];\n");
- fprintf(out, " switch (_id) {\n");
- for (int propindex = 0; propindex < cdef->propertyList.size(); ++propindex) {
- const PropertyDef &p = cdef->propertyList.at(propindex);
- if (p.constant)
- continue;
- if (p.write.isEmpty() && p.member.isEmpty())
- continue;
- QByteArray prefix;
- if (p.inPrivateClass.size()) {
- prefix = p.inPrivateClass;
- prefix.append("->");
- }
- if (cdef->enumDeclarations.value(p.type, false)) {
- fprintf(out, " case %d: %s%s(QFlag(*reinterpret_cast<int*>(_v))); break;\n",
- propindex, prefix.constData(), p.write.constData());
- } else if (!p.write.isEmpty()) {
- fprintf(out, " case %d: %s%s(*reinterpret_cast< %s*>(_v)); break;\n",
- propindex, prefix.constData(), p.write.constData(), p.type.constData());
- } else {
- fprintf(out, " case %d:\n", propindex);
- fprintf(out, " if (%s%s != *reinterpret_cast< %s*>(_v)) {\n",
- prefix.constData(), p.member.constData(), p.type.constData());
- fprintf(out, " %s%s = *reinterpret_cast< %s*>(_v);\n",
- prefix.constData(), p.member.constData(), p.type.constData());
- if (!p.notify.isEmpty() && p.notifyId != -1) {
- const FunctionDef &f = cdef->signalList.at(p.notifyId);
- if (f.arguments.size() == 0)
- fprintf(out, " Q_EMIT %s();\n", p.notify.constData());
- else if (f.arguments.size() == 1 && f.arguments.at(0).normalizedType == p.type)
- fprintf(out, " Q_EMIT %s(%s%s);\n",
- p.notify.constData(), prefix.constData(), p.member.constData());
- }
- fprintf(out, " }\n");
- fprintf(out, " break;\n");
- }
- }
- fprintf(out, " default: break;\n");
- fprintf(out, " }\n");
- }
-
+ fprintf(out, "else ");
fprintf(out,
- " _id -= %d;\n"
- " }", cdef->propertyList.count());
-
- fprintf(out, " else ");
- fprintf(out, "if (_c == QMetaObject::ResetProperty) {\n");
- if (needReset) {
- fprintf(out, " switch (_id) {\n");
- for (int propindex = 0; propindex < cdef->propertyList.size(); ++propindex) {
- const PropertyDef &p = cdef->propertyList.at(propindex);
- if (!p.reset.endsWith(')'))
- continue;
- QByteArray prefix;
- if (p.inPrivateClass.size()) {
- prefix = p.inPrivateClass;
- prefix.append("->");
- }
- fprintf(out, " case %d: %s%s; break;\n",
- propindex, prefix.constData(), p.reset.constData());
- }
- fprintf(out, " default: break;\n");
- fprintf(out, " }\n");
- }
- fprintf(out,
- " _id -= %d;\n"
- " }", cdef->propertyList.count());
+ "if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty\n"
+ " || _c == QMetaObject::ResetProperty || _c == QMetaObject::RegisterPropertyMetaType) {\n"
+ " qt_static_metacall(this, _c, _id, _a);\n"
+ " _id -= %d;\n }", cdef->propertyList.count());
fprintf(out, " else ");
fprintf(out, "if (_c == QMetaObject::QueryPropertyDesignable) {\n");
@@ -1153,16 +1062,6 @@ void Generator::generateMetacall()
" _id -= %d;\n"
" }", cdef->propertyList.count());
- fprintf(out, " else ");
- fprintf(out, "if (_c == QMetaObject::RegisterPropertyMetaType) {\n");
- fprintf(out, " if (_id < %d)\n", cdef->propertyList.size());
-
- if (automaticPropertyMetaTypesHelper().isEmpty())
- fprintf(out, " *reinterpret_cast<int*>(_a[0]) = -1;\n");
- else
- fprintf(out, " qt_static_metacall(this, _c, _id, _a);\n");
- fprintf(out, " _id -= %d;\n }", cdef->propertyList.size());
-
fprintf(out, "\n#endif // QT_NO_PROPERTIES");
}
if (methodList.size() || cdef->signalList.size() || cdef->propertyList.size())
@@ -1246,10 +1145,14 @@ void Generator::generateStaticMetacall()
else
fprintf(out, " ");
fprintf(out, "if (_c == QMetaObject::InvokeMetaMethod) {\n");
+ if (cdef->hasQObject) {
#ifndef QT_NO_DEBUG
- fprintf(out, " Q_ASSERT(staticMetaObject.cast(_o));\n");
+ fprintf(out, " Q_ASSERT(staticMetaObject.cast(_o));\n");
#endif
- fprintf(out, " %s *_t = static_cast<%s *>(_o);\n", cdef->classname.constData(), cdef->classname.constData());
+ fprintf(out, " %s *_t = static_cast<%s *>(_o);\n", cdef->classname.constData(), cdef->classname.constData());
+ } else {
+ fprintf(out, " %s *_t = reinterpret_cast<%s *>(_o);\n", cdef->classname.constData(), cdef->classname.constData());
+ }
fprintf(out, " switch (_id) {\n");
for (int methodindex = 0; methodindex < methodList.size(); ++methodindex) {
const FunctionDef &f = methodList.at(methodindex);
@@ -1377,6 +1280,153 @@ void Generator::generateStaticMetacall()
needElse = true;
}
+ if (!cdef->propertyList.empty()) {
+ bool needGet = false;
+ bool needTempVarForGet = false;
+ bool needSet = false;
+ bool needReset = false;
+ for (int i = 0; i < cdef->propertyList.size(); ++i) {
+ const PropertyDef &p = cdef->propertyList.at(i);
+ needGet |= !p.read.isEmpty() || !p.member.isEmpty();
+ if (!p.read.isEmpty() || !p.member.isEmpty())
+ needTempVarForGet |= (p.gspec != PropertyDef::PointerSpec
+ && p.gspec != PropertyDef::ReferenceSpec);
+
+ needSet |= !p.write.isEmpty() || (!p.member.isEmpty() && !p.constant);
+ needReset |= !p.reset.isEmpty();
+ }
+ fprintf(out, "\n#ifndef QT_NO_PROPERTIES\n ");
+
+ if (needElse)
+ fprintf(out, "else ");
+ fprintf(out, "if (_c == QMetaObject::ReadProperty) {\n");
+ if (needGet) {
+ if (cdef->hasQObject) {
+#ifndef QT_NO_DEBUG
+ fprintf(out, " Q_ASSERT(staticMetaObject.cast(_o));\n");
+#endif
+ fprintf(out, " %s *_t = static_cast<%s *>(_o);\n", cdef->classname.constData(), cdef->classname.constData());
+ } else {
+ fprintf(out, " %s *_t = reinterpret_cast<%s *>(_o);\n", cdef->classname.constData(), cdef->classname.constData());
+ }
+ if (needTempVarForGet)
+ fprintf(out, " void *_v = _a[0];\n");
+ fprintf(out, " switch (_id) {\n");
+ for (int propindex = 0; propindex < cdef->propertyList.size(); ++propindex) {
+ const PropertyDef &p = cdef->propertyList.at(propindex);
+ if (p.read.isEmpty() && p.member.isEmpty())
+ continue;
+ QByteArray prefix = "_t->";
+ if (p.inPrivateClass.size()) {
+ prefix += p.inPrivateClass + "->";
+ }
+ if (p.gspec == PropertyDef::PointerSpec)
+ fprintf(out, " case %d: _a[0] = const_cast<void*>(reinterpret_cast<const void*>(%s%s())); break;\n",
+ propindex, prefix.constData(), p.read.constData());
+ else if (p.gspec == PropertyDef::ReferenceSpec)
+ fprintf(out, " case %d: _a[0] = const_cast<void*>(reinterpret_cast<const void*>(&%s%s())); break;\n",
+ propindex, prefix.constData(), p.read.constData());
+ else if (cdef->enumDeclarations.value(p.type, false))
+ fprintf(out, " case %d: *reinterpret_cast<int*>(_v) = QFlag(%s%s()); break;\n",
+ propindex, prefix.constData(), p.read.constData());
+ else if (!p.read.isEmpty())
+ fprintf(out, " case %d: *reinterpret_cast< %s*>(_v) = %s%s(); break;\n",
+ propindex, p.type.constData(), prefix.constData(), p.read.constData());
+ else
+ fprintf(out, " case %d: *reinterpret_cast< %s*>(_v) = %s%s; break;\n",
+ propindex, p.type.constData(), prefix.constData(), p.member.constData());
+ }
+ fprintf(out, " default: break;\n");
+ fprintf(out, " }\n");
+ }
+
+ fprintf(out, " }");
+
+ fprintf(out, " else ");
+ fprintf(out, "if (_c == QMetaObject::WriteProperty) {\n");
+
+ if (needSet) {
+ if (cdef->hasQObject) {
+#ifndef QT_NO_DEBUG
+ fprintf(out, " Q_ASSERT(staticMetaObject.cast(_o));\n");
+#endif
+ fprintf(out, " %s *_t = static_cast<%s *>(_o);\n", cdef->classname.constData(), cdef->classname.constData());
+ } else {
+ fprintf(out, " %s *_t = reinterpret_cast<%s *>(_o);\n", cdef->classname.constData(), cdef->classname.constData());
+ }
+ fprintf(out, " void *_v = _a[0];\n");
+ fprintf(out, " switch (_id) {\n");
+ for (int propindex = 0; propindex < cdef->propertyList.size(); ++propindex) {
+ const PropertyDef &p = cdef->propertyList.at(propindex);
+ if (p.constant)
+ continue;
+ if (p.write.isEmpty() && p.member.isEmpty())
+ continue;
+ QByteArray prefix = "_t->";
+ if (p.inPrivateClass.size()) {
+ prefix += p.inPrivateClass + "->";
+ }
+ if (cdef->enumDeclarations.value(p.type, false)) {
+ fprintf(out, " case %d: %s%s(QFlag(*reinterpret_cast<int*>(_v))); break;\n",
+ propindex, prefix.constData(), p.write.constData());
+ } else if (!p.write.isEmpty()) {
+ fprintf(out, " case %d: %s%s(*reinterpret_cast< %s*>(_v)); break;\n",
+ propindex, prefix.constData(), p.write.constData(), p.type.constData());
+ } else {
+ fprintf(out, " case %d:\n", propindex);
+ fprintf(out, " if (%s%s != *reinterpret_cast< %s*>(_v)) {\n",
+ prefix.constData(), p.member.constData(), p.type.constData());
+ fprintf(out, " %s%s = *reinterpret_cast< %s*>(_v);\n",
+ prefix.constData(), p.member.constData(), p.type.constData());
+ if (!p.notify.isEmpty() && p.notifyId != -1) {
+ const FunctionDef &f = cdef->signalList.at(p.notifyId);
+ if (f.arguments.size() == 0)
+ fprintf(out, " Q_EMIT _t->%s();\n", p.notify.constData());
+ else if (f.arguments.size() == 1 && f.arguments.at(0).normalizedType == p.type)
+ fprintf(out, " Q_EMIT _t->%s(%s%s);\n",
+ p.notify.constData(), prefix.constData(), p.member.constData());
+ }
+ fprintf(out, " }\n");
+ fprintf(out, " break;\n");
+ }
+ }
+ fprintf(out, " default: break;\n");
+ fprintf(out, " }\n");
+ }
+
+ fprintf(out, " }");
+
+ fprintf(out, " else ");
+ fprintf(out, "if (_c == QMetaObject::ResetProperty) {\n");
+ if (needReset) {
+ if (cdef->hasQObject) {
+#ifndef QT_NO_DEBUG
+ fprintf(out, " Q_ASSERT(staticMetaObject.cast(_o));\n");
+#endif
+ fprintf(out, " %s *_t = static_cast<%s *>(_o);\n", cdef->classname.constData(), cdef->classname.constData());
+ } else {
+ fprintf(out, " %s *_t = reinterpret_cast<%s *>(_o);\n", cdef->classname.constData(), cdef->classname.constData());
+ }
+ fprintf(out, " switch (_id) {\n");
+ for (int propindex = 0; propindex < cdef->propertyList.size(); ++propindex) {
+ const PropertyDef &p = cdef->propertyList.at(propindex);
+ if (!p.reset.endsWith(')'))
+ continue;
+ QByteArray prefix = "_t->";
+ if (p.inPrivateClass.size()) {
+ prefix += p.inPrivateClass + "->";
+ }
+ fprintf(out, " case %d: %s%s; break;\n",
+ propindex, prefix.constData(), p.reset.constData());
+ }
+ fprintf(out, " default: break;\n");
+ fprintf(out, " }\n");
+ }
+ fprintf(out, " }");
+ fprintf(out, "\n#endif // QT_NO_PROPERTIES");
+ needElse = true;
+ }
+
if (needElse)
fprintf(out, "\n");
diff --git a/src/tools/moc/preprocessor.cpp b/src/tools/moc/preprocessor.cpp
index c5d6b58412..687c4f8474 100644
--- a/src/tools/moc/preprocessor.cpp
+++ b/src/tools/moc/preprocessor.cpp
@@ -52,11 +52,12 @@ static QByteArray cleaned(const QByteArray &input)
QByteArray result;
result.reserve(input.size());
const char *data = input.constData();
+ const char *end = input.constData() + input.size();
char *output = result.data();
int newlines = 0;
- while (*data) {
- while (*data && is_space(*data))
+ while (data != end) {
+ while (data != end && is_space(*data))
++data;
bool takeLine = (*data == '#');
if (*data == '%' && *(data+1) == ':') {
@@ -66,15 +67,15 @@ static QByteArray cleaned(const QByteArray &input)
if (takeLine) {
*output = '#';
++output;
- do ++data; while (*data && is_space(*data));
+ do ++data; while (data != end && is_space(*data));
}
- while (*data) {
+ while (data != end) {
// handle \\\n, \\\r\n and \\\r
if (*data == '\\') {
if (*(data + 1) == '\r') {
++data;
}
- if (*data && (*(data + 1) == '\n' || (*data) == '\r')) {
+ if (data != end && (*(data + 1) == '\n' || (*data) == '\r')) {
++newlines;
data += 1;
if (*data != '\r')
@@ -201,7 +202,7 @@ Symbols Preprocessor::tokenize(const QByteArray& input, int lineNum, Preprocesso
data = skipQuote(data);
token = STRING_LITERAL;
// concatenate multi-line strings for easier
- // STRING_LITERAAL handling in moc
+ // STRING_LITERAL handling in moc
if (!Preprocessor::preprocessOnly
&& !symbols.isEmpty()
&& symbols.last().token == STRING_LITERAL) {
@@ -964,6 +965,43 @@ int Preprocessor::evaluateCondition()
return expression.value();
}
+static QByteArray readOrMapFile(QFile *file)
+{
+ const qint64 size = file->size();
+ char *rawInput = reinterpret_cast<char*>(file->map(0, size));
+ return rawInput ? QByteArray::fromRawData(rawInput, size) : file->readAll();
+}
+
+static void mergeStringLiterals(Symbols *_symbols)
+{
+ Symbols &symbols = *_symbols;
+ for (Symbols::iterator i = symbols.begin(); i != symbols.end(); ++i) {
+ if (i->token == STRING_LITERAL) {
+ Symbols::Iterator mergeSymbol = i;
+ int literalsLength = mergeSymbol->len;
+ while (++i != symbols.end() && i->token == STRING_LITERAL)
+ literalsLength += i->len - 2; // no quotes
+
+ if (literalsLength != mergeSymbol->len) {
+ QByteArray mergeSymbolOriginalLexem = mergeSymbol->unquotedLexem();
+ QByteArray &mergeSymbolLexem = mergeSymbol->lex;
+ mergeSymbolLexem.resize(0);
+ mergeSymbolLexem.reserve(literalsLength);
+ mergeSymbolLexem.append('"');
+ mergeSymbolLexem.append(mergeSymbolOriginalLexem);
+ for (Symbols::const_iterator j = mergeSymbol + 1; j != i; ++j)
+ mergeSymbolLexem.append(j->lex.constData() + j->from + 1, j->len - 2); // append j->unquotedLexem()
+ mergeSymbolLexem.append('"');
+ mergeSymbol->len = mergeSymbol->lex.length();
+ mergeSymbol->from = 0;
+ i = symbols.erase(mergeSymbol + 1, i);
+ }
+ if (i == symbols.end())
+ break;
+ }
+ }
+}
+
void Preprocessor::preprocess(const QByteArray &filename, Symbols &preprocessed)
{
currentFilenames.push(filename);
@@ -1020,7 +1058,8 @@ void Preprocessor::preprocess(const QByteArray &filename, Symbols &preprocessed)
if (!file.open(QFile::ReadOnly))
continue;
- QByteArray input = file.readAll();
+ QByteArray input = readOrMapFile(&file);
+
file.close();
if (input.isEmpty())
continue;
@@ -1153,9 +1192,10 @@ void Preprocessor::preprocess(const QByteArray &filename, Symbols &preprocessed)
currentFilenames.pop();
}
-Symbols Preprocessor::preprocessed(const QByteArray &filename, QIODevice *file)
+Symbols Preprocessor::preprocessed(const QByteArray &filename, QFile *file)
{
- QByteArray input = file->readAll();
+ QByteArray input = readOrMapFile(file);
+
if (input.isEmpty())
return symbols;
@@ -1176,6 +1216,7 @@ Symbols Preprocessor::preprocessed(const QByteArray &filename, QIODevice *file)
// phase 3: preprocess conditions and substitute macros
Symbols result;
preprocess(filename, result);
+ mergeStringLiterals(&result);
#if 0
for (int j = 0; j < result.size(); ++j)
diff --git a/src/tools/moc/preprocessor.h b/src/tools/moc/preprocessor.h
index fc86781be8..77f3a30ac0 100644
--- a/src/tools/moc/preprocessor.h
+++ b/src/tools/moc/preprocessor.h
@@ -57,7 +57,7 @@ typedef SubArray MacroName;
#endif
typedef QHash<MacroName, Macro> Macros;
-class QIODevice;
+class QFile;
class Preprocessor : public Parser
{
@@ -67,7 +67,7 @@ public:
QList<QByteArray> frameworks;
QSet<QByteArray> preprocessedIncludes;
Macros macros;
- Symbols preprocessed(const QByteArray &filename, QIODevice *device);
+ Symbols preprocessed(const QByteArray &filename, QFile *device);
void parseDefineArguments(Macro *m);
diff --git a/src/tools/qdoc/atom.cpp b/src/tools/qdoc/atom.cpp
index 1af31afedd..9aaa1af319 100644
--- a/src/tools/qdoc/atom.cpp
+++ b/src/tools/qdoc/atom.cpp
@@ -97,6 +97,9 @@ QT_BEGIN_NAMESPACE
\value ImageText
\value ImportantNote
\value InlineImage
+ \value JavaScript
+ \value EndJavaScript
+ \value Keyword
\value LineBreak
\value Link
\value LinkNode
@@ -107,6 +110,8 @@ QT_BEGIN_NAMESPACE
\value ListItemLeft
\value ListItemRight
\value ListRight
+ \value NavAutoLink
+ \value NavLink
\value Nop
\value Note
\value ParaLeft
@@ -181,6 +186,7 @@ static const struct {
{ "InlineImage", Atom::InlineImage },
{ "JavaScript", Atom::JavaScript },
{ "EndJavaScript", Atom::EndJavaScript },
+ { "Keyword", Atom::Keyword },
{ "LegaleseLeft", Atom::LegaleseLeft },
{ "LegaleseRight", Atom::LegaleseRight },
{ "LineBreak", Atom::LineBreak },
@@ -193,6 +199,8 @@ static const struct {
{ "ListItemLeft", Atom::ListItemLeft },
{ "ListItemRight", Atom::ListItemRight },
{ "ListRight", Atom::ListRight },
+ { "NavAutoLink", Atom::NavAutoLink },
+ { "NavLink", Atom::NavLink },
{ "Nop", Atom::Nop },
{ "NoteLeft", Atom::NoteLeft },
{ "NoteRight", Atom::NoteRight },
diff --git a/src/tools/qdoc/atom.h b/src/tools/qdoc/atom.h
index 3a7e992f7b..859ea3e740 100644
--- a/src/tools/qdoc/atom.h
+++ b/src/tools/qdoc/atom.h
@@ -57,7 +57,7 @@ public:
BriefRight,
C,
CaptionLeft,
- CaptionRight, // 10
+ CaptionRight,
Code,
CodeBad,
CodeNew,
@@ -67,7 +67,7 @@ public:
DivLeft,
DivRight,
EndQmlText,
- FootnoteLeft, // 20
+ FootnoteLeft,
FootnoteRight,
FormatElse,
FormatEndif,
@@ -77,17 +77,18 @@ public:
GeneratedList,
GuidLink,
HR,
- Image, // 30
+ Image,
ImageText,
ImportantLeft,
ImportantRight,
InlineImage,
JavaScript,
EndJavaScript,
+ Keyword,
LegaleseLeft,
LegaleseRight,
LineBreak,
- Link, // 40
+ Link,
LinkNode,
ListLeft,
ListItemNumber,
@@ -96,8 +97,10 @@ public:
ListItemLeft,
ListItemRight,
ListRight,
+ NavAutoLink,
+ NavLink,
Nop,
- NoteLeft, // 50
+ NoteLeft,
NoteRight,
ParaLeft,
ParaRight,
@@ -107,7 +110,7 @@ public:
QuotationRight,
RawString,
SectionLeft,
- SectionRight, // 60
+ SectionRight,
SectionHeadingLeft,
SectionHeadingRight,
SidebarLeft,
@@ -117,7 +120,7 @@ public:
SnippetIdentifier,
SnippetLocation,
String,
- TableLeft, // 70
+ TableLeft,
TableRight,
TableHeaderLeft,
TableHeaderRight,
@@ -127,7 +130,7 @@ public:
TableItemRight,
TableOfContents,
Target,
- UnhandledFormat, // 80
+ UnhandledFormat,
UnknownCommand,
Last = UnknownCommand
};
@@ -212,12 +215,12 @@ class LinkAtom : public Atom
LinkAtom(Atom* previous, const LinkAtom& t);
virtual ~LinkAtom() { }
- virtual bool isLinkAtom() const { return true; }
- virtual Node::Genus genus() const { return genus_; }
- virtual bool specifiesDomain() const { return (domain_ != 0); }
- virtual Tree* domain() const { return domain_; }
- virtual Node::Type goal() const { return goal_; }
- virtual const QString& error() { return error_; }
+ virtual bool isLinkAtom() const Q_DECL_OVERRIDE { return true; }
+ virtual Node::Genus genus() const Q_DECL_OVERRIDE { return genus_; }
+ virtual bool specifiesDomain() const Q_DECL_OVERRIDE { return (domain_ != 0); }
+ virtual Tree* domain() const Q_DECL_OVERRIDE { return domain_; }
+ virtual Node::Type goal() const Q_DECL_OVERRIDE { return goal_; }
+ virtual const QString& error() Q_DECL_OVERRIDE { return error_; }
protected:
Node::Genus genus_;
diff --git a/src/tools/qdoc/codeparser.cpp b/src/tools/qdoc/codeparser.cpp
index 00341940da..acb297d5f9 100644
--- a/src/tools/qdoc/codeparser.cpp
+++ b/src/tools/qdoc/codeparser.cpp
@@ -65,9 +65,9 @@ QT_BEGIN_NAMESPACE
#define COMMAND_TITLE Doc::alias(QLatin1String("title"))
#define COMMAND_WRAPPER Doc::alias(QLatin1String("wrapper"))
-QString CodeParser::currentSubDir_;
QList<CodeParser *> CodeParser::parsers;
-bool CodeParser::showInternal = false;
+bool CodeParser::showInternal_ = false;
+bool CodeParser::singleExec_ = false;
/*!
The constructor adds this code parser to the static
@@ -93,7 +93,8 @@ CodeParser::~CodeParser()
*/
void CodeParser::initializeParser(const Config& config)
{
- showInternal = config.getBool(CONFIG_SHOWINTERNAL);
+ showInternal_ = config.getBool(CONFIG_SHOWINTERNAL);
+ singleExec_ = config.getBool(CONFIG_SINGLEEXEC);
}
/*!
@@ -262,7 +263,7 @@ void CodeParser::processCommonMetaCommand(const Location& location,
node->setStatus(Node::Preliminary);
}
else if (command == COMMAND_INTERNAL) {
- if (!showInternal) {
+ if (!showInternal_) {
node->setAccess(Node::Private);
node->setStatus(Node::Internal);
if (node->type() == Node::QmlPropertyGroup) {
diff --git a/src/tools/qdoc/codeparser.h b/src/tools/qdoc/codeparser.h
index 5b3b1192f3..c9a9b746b1 100644
--- a/src/tools/qdoc/codeparser.h
+++ b/src/tools/qdoc/codeparser.h
@@ -74,7 +74,6 @@ public:
static CodeParser *parserForHeaderFile(const QString &filePath);
static CodeParser *parserForSourceFile(const QString &filePath);
static void setLink(Node* node, Node::LinkType linkType, const QString& arg);
- static const QString& currentOutputSubdirectory() { return currentSubDir_; }
protected:
const QSet<QString>& commonMetaCommands();
@@ -89,9 +88,9 @@ protected:
QDocDatabase* qdb_;
private:
- static QString currentSubDir_;
static QList<CodeParser *> parsers;
- static bool showInternal;
+ static bool showInternal_;
+ static bool singleExec_;
};
QT_END_NAMESPACE
diff --git a/src/tools/qdoc/config.cpp b/src/tools/qdoc/config.cpp
index 51ab341869..f73ac147b8 100644
--- a/src/tools/qdoc/config.cpp
+++ b/src/tools/qdoc/config.cpp
@@ -98,6 +98,7 @@ QString ConfigStrings::QUOTINGINFORMATION = QStringLiteral("quotinginformation")
QString ConfigStrings::SCRIPTDIRS = QStringLiteral("scriptdirs");
QString ConfigStrings::SCRIPTS = QStringLiteral("scripts");
QString ConfigStrings::SHOWINTERNAL = QStringLiteral("showinternal");
+QString ConfigStrings::SINGLEEXEC = QStringLiteral("singleexec");
QString ConfigStrings::SOURCEDIRS = QStringLiteral("sourcedirs");
QString ConfigStrings::SOURCEENCODING = QStringLiteral("sourceencoding");
QString ConfigStrings::SOURCES = QStringLiteral("sources");
@@ -118,6 +119,7 @@ QString ConfigStrings::FILEEXTENSIONS = QStringLiteral("fileextensions");
QString ConfigStrings::IMAGEEXTENSIONS = QStringLiteral("imageextensions");
QString ConfigStrings::QMLONLY = QStringLiteral("qmlonly");
QString ConfigStrings::QMLTYPESPAGE = QStringLiteral("qmltypespage");
+QString ConfigStrings::WRITEQAPAGES = QStringLiteral("writeqapages");
/*!
An entry in a stack, where each entry is a list
@@ -350,6 +352,10 @@ QString Config::getOutputDir() const
t = getString(CONFIG_OUTPUTDIR);
else
t = overrideOutputDir;
+ if (Generator::singleExec()) {
+ QString project = getString(CONFIG_PROJECT);
+ t += QLatin1Char('/') + project.toLower();
+ }
if (!Generator::useOutputSubdirs()) {
t = t.left(t.lastIndexOf('/'));
QString singleOutputSubdir = getString("HTML.outputsubdir");
@@ -869,6 +875,36 @@ bool Config::isMetaKeyChar(QChar ch)
}
/*!
+ \a fileName is a master qdocconf file. It contains a list of
+ qdocconf files and nothing else. Read the list and return it.
+ */
+QStringList Config::loadMaster(const QString& fileName)
+{
+ Location location = Location::null;
+ QFile fin(fileName);
+ if (!fin.open(QFile::ReadOnly | QFile::Text)) {
+ if (!Config::installDir.isEmpty()) {
+ int prefix = location.filePath().length() - location.fileName().length();
+ fin.setFileName(Config::installDir + "/" + fileName.right(fileName.length() - prefix));
+ }
+ if (!fin.open(QFile::ReadOnly | QFile::Text))
+ location.fatal(tr("Cannot open master qdocconf file '%1': %2").arg(fileName).arg(fin.errorString()));
+ }
+ QTextStream stream(&fin);
+#ifndef QT_NO_TEXTCODEC
+ stream.setCodec("UTF-8");
+#endif
+ QStringList qdocFiles;
+ QString line = stream.readLine();
+ while (!line.isNull()) {
+ qdocFiles.append(line);
+ line = stream.readLine();
+ }
+ fin.close();
+ return qdocFiles;
+}
+
+/*!
Load, parse, and process a qdoc configuration file. This
function is only called by the other load() function, but
this one is recursive, i.e., it calls itself when it sees
diff --git a/src/tools/qdoc/config.h b/src/tools/qdoc/config.h
index 70b5adfd68..a836448719 100644
--- a/src/tools/qdoc/config.h
+++ b/src/tools/qdoc/config.h
@@ -108,6 +108,7 @@ public:
QStringList getExampleQdocFiles(const QSet<QString> &excludedDirs, const QSet<QString> &excludedFiles);
QStringList getExampleImageFiles(const QSet<QString> &excludedDirs, const QSet<QString> &excludedFiles);
+ static QStringList loadMaster(const QString& fileName);
static QStringList getFilesHere(const QString& dir,
const QString& nameFilter,
const Location &location = Location(),
@@ -209,6 +210,7 @@ struct ConfigStrings
static QString SCRIPTDIRS;
static QString SCRIPTS;
static QString SHOWINTERNAL;
+ static QString SINGLEEXEC;
static QString SOURCEDIRS;
static QString SOURCEENCODING;
static QString SOURCES;
@@ -229,6 +231,7 @@ struct ConfigStrings
static QString IMAGEEXTENSIONS;
static QString QMLONLY;
static QString QMLTYPESPAGE;
+ static QString WRITEQAPAGES;
};
#define CONFIG_ALIAS ConfigStrings::ALIAS
@@ -282,6 +285,7 @@ struct ConfigStrings
#define CONFIG_SCRIPTDIRS ConfigStrings::SCRIPTDIRS
#define CONFIG_SCRIPTS ConfigStrings::SCRIPTS
#define CONFIG_SHOWINTERNAL ConfigStrings::SHOWINTERNAL
+#define CONFIG_SINGLEEXEC ConfigStrings::SINGLEEXEC
#define CONFIG_SOURCEDIRS ConfigStrings::SOURCEDIRS
#define CONFIG_SOURCEENCODING ConfigStrings::SOURCEENCODING
#define CONFIG_SOURCES ConfigStrings::SOURCES
@@ -302,6 +306,7 @@ struct ConfigStrings
#define CONFIG_IMAGEEXTENSIONS ConfigStrings::IMAGEEXTENSIONS
#define CONFIG_QMLONLY ConfigStrings::QMLONLY
#define CONFIG_QMLTYPESPAGE ConfigStrings::QMLTYPESPAGE
+#define CONFIG_WRITEQAPAGES ConfigStrings::WRITEQAPAGES
QT_END_NAMESPACE
diff --git a/src/tools/qdoc/cppcodemarker.h b/src/tools/qdoc/cppcodemarker.h
index ec2ee124d4..899c2018fe 100644
--- a/src/tools/qdoc/cppcodemarker.h
+++ b/src/tools/qdoc/cppcodemarker.h
@@ -50,29 +50,29 @@ public:
CppCodeMarker();
~CppCodeMarker();
- virtual bool recognizeCode(const QString& code);
- virtual bool recognizeExtension(const QString& ext);
- virtual bool recognizeLanguage(const QString& lang);
- virtual Atom::Type atomType() const;
+ virtual bool recognizeCode(const QString& code) Q_DECL_OVERRIDE;
+ virtual bool recognizeExtension(const QString& ext) Q_DECL_OVERRIDE;
+ virtual bool recognizeLanguage(const QString& lang) Q_DECL_OVERRIDE;
+ virtual Atom::Type atomType() const Q_DECL_OVERRIDE;
virtual QString markedUpCode(const QString& code,
const Node *relative,
- const Location &location);
+ const Location &location) Q_DECL_OVERRIDE;
virtual QString markedUpSynopsis(const Node *node,
const Node *relative,
- SynopsisStyle style);
- virtual QString markedUpQmlItem(const Node *node, bool summary);
- virtual QString markedUpName(const Node *node);
- virtual QString markedUpFullName(const Node *node, const Node *relative);
- virtual QString markedUpEnumValue(const QString &enumValue, const Node *relative);
- virtual QString markedUpIncludes(const QStringList& includes);
- virtual QString functionBeginRegExp(const QString& funcName);
- virtual QString functionEndRegExp(const QString& funcName);
+ SynopsisStyle style) Q_DECL_OVERRIDE;
+ virtual QString markedUpQmlItem(const Node *node, bool summary) Q_DECL_OVERRIDE;
+ virtual QString markedUpName(const Node *node) Q_DECL_OVERRIDE;
+ virtual QString markedUpFullName(const Node *node, const Node *relative) Q_DECL_OVERRIDE;
+ virtual QString markedUpEnumValue(const QString &enumValue, const Node *relative) Q_DECL_OVERRIDE;
+ virtual QString markedUpIncludes(const QStringList& includes) Q_DECL_OVERRIDE;
+ virtual QString functionBeginRegExp(const QString& funcName) Q_DECL_OVERRIDE;
+ virtual QString functionEndRegExp(const QString& funcName) Q_DECL_OVERRIDE;
virtual QList<Section> sections(const InnerNode *innerNode,
SynopsisStyle style,
- Status status);
+ Status status) Q_DECL_OVERRIDE;
virtual QList<Section> qmlSections(QmlClassNode* qmlClassNode,
SynopsisStyle style,
- Status status = Okay);
+ Status status = Okay) Q_DECL_OVERRIDE;
private:
QString addMarkUp(const QString& protectedCode,
diff --git a/src/tools/qdoc/cppcodeparser.h b/src/tools/qdoc/cppcodeparser.h
index 7499575d13..03b55c7775 100644
--- a/src/tools/qdoc/cppcodeparser.h
+++ b/src/tools/qdoc/cppcodeparser.h
@@ -65,15 +65,15 @@ public:
CppCodeParser();
~CppCodeParser();
- virtual void initializeParser(const Config& config);
- virtual void terminateParser();
- virtual QString language();
- virtual QStringList headerFileNameFilter();
- virtual QStringList sourceFileNameFilter();
- virtual void parseHeaderFile(const Location& location, const QString& filePath);
- virtual void parseSourceFile(const Location& location, const QString& filePath);
- virtual void doneParsingHeaderFiles();
- virtual void doneParsingSourceFiles();
+ virtual void initializeParser(const Config& config) Q_DECL_OVERRIDE;
+ virtual void terminateParser() Q_DECL_OVERRIDE;
+ virtual QString language() Q_DECL_OVERRIDE;
+ virtual QStringList headerFileNameFilter() Q_DECL_OVERRIDE;
+ virtual QStringList sourceFileNameFilter() Q_DECL_OVERRIDE;
+ virtual void parseHeaderFile(const Location& location, const QString& filePath) Q_DECL_OVERRIDE;
+ virtual void parseSourceFile(const Location& location, const QString& filePath) Q_DECL_OVERRIDE;
+ virtual void doneParsingHeaderFiles() Q_DECL_OVERRIDE;
+ virtual void doneParsingSourceFiles() Q_DECL_OVERRIDE;
protected:
const QSet<QString>& topicCommands();
diff --git a/src/tools/qdoc/ditaxmlgenerator.cpp b/src/tools/qdoc/ditaxmlgenerator.cpp
index d9cf56769b..54b358e170 100644
--- a/src/tools/qdoc/ditaxmlgenerator.cpp
+++ b/src/tools/qdoc/ditaxmlgenerator.cpp
@@ -663,10 +663,10 @@ GuidMap* DitaXmlGenerator::lookupGuidMap(const QString& fileName)
*/
void DitaXmlGenerator::generateDocs()
{
- if (!runPrepareOnly())
+ if (!preparing())
Generator::generateDocs();
- if (!runGenerateOnly()) {
+ if (!generating()) {
QString fileBase = project.toLower().simplified().replace(QLatin1Char(' '), QLatin1Char('-'));
qdb_->generateIndex(outputDir() + QLatin1Char('/') + fileBase + ".index",
projectUrl,
@@ -675,7 +675,7 @@ void DitaXmlGenerator::generateDocs()
true);
}
- if (!runPrepareOnly()) {
+ if (!preparing()) {
writeDitaMap();
/*
Generate the XML tag file, if it was requested.
diff --git a/src/tools/qdoc/ditaxmlgenerator.h b/src/tools/qdoc/ditaxmlgenerator.h
index 4514f19bc8..d2f445dd5b 100644
--- a/src/tools/qdoc/ditaxmlgenerator.h
+++ b/src/tools/qdoc/ditaxmlgenerator.h
@@ -290,11 +290,11 @@ public:
DitaXmlGenerator();
~DitaXmlGenerator();
- virtual void initializeGenerator(const Config& config);
- virtual void terminateGenerator();
- virtual QString format();
- virtual bool canHandleFormat(const QString& format);
- virtual void generateDocs();
+ virtual void initializeGenerator(const Config& config) Q_DECL_OVERRIDE;
+ virtual void terminateGenerator() Q_DECL_OVERRIDE;
+ virtual QString format() Q_DECL_OVERRIDE;
+ virtual bool canHandleFormat(const QString& format) Q_DECL_OVERRIDE;
+ virtual void generateDocs() Q_DECL_OVERRIDE;
QString protectEnc(const QString& string);
static QString protect(const QString& string, const QString& encoding = "ISO-8859-1");
@@ -304,12 +304,12 @@ public:
protected:
virtual int generateAtom(const Atom* atom,
const Node* relative,
- CodeMarker* marker);
- virtual void generateClassLikeNode(InnerNode* inner, CodeMarker* marker);
- virtual void generateQmlBasicTypePage(QmlBasicTypeNode* qbtn, CodeMarker* marker);
- virtual void generateDocNode(DocNode* dn, CodeMarker* marker);
- virtual void generateCollectionNode(CollectionNode* cn, CodeMarker* marker);
- virtual QString fileExtension() const;
+ CodeMarker* marker) Q_DECL_OVERRIDE;
+ virtual void generateClassLikeNode(InnerNode* inner, CodeMarker* marker) Q_DECL_OVERRIDE;
+ virtual void generateQmlBasicTypePage(QmlBasicTypeNode* qbtn, CodeMarker* marker) Q_DECL_OVERRIDE;
+ virtual void generateDocNode(DocNode* dn, CodeMarker* marker) Q_DECL_OVERRIDE;
+ virtual void generateCollectionNode(CollectionNode* cn, CodeMarker* marker) Q_DECL_OVERRIDE;
+ virtual QString fileExtension() const Q_DECL_OVERRIDE;
virtual QString guidForNode(const Node* node);
virtual QString linkForNode(const Node* node, const Node* relative);
@@ -394,8 +394,8 @@ private:
void generateDetailedQmlMember(Node* node,
const InnerNode* relative,
CodeMarker* marker);
- void generateQmlInherits(QmlClassNode* qcn, CodeMarker* marker);
- void generateQmlInheritedBy(const QmlClassNode* qcn, CodeMarker* marker);
+ void generateQmlInherits(QmlClassNode* qcn, CodeMarker* marker) Q_DECL_OVERRIDE;
+ void generateQmlInheritedBy(const QmlClassNode* qcn, CodeMarker* marker) Q_DECL_OVERRIDE;
void generateQmlInstantiates(QmlClassNode* qcn, CodeMarker* marker);
void generateInstantiatedBy(ClassNode* cn, CodeMarker* marker);
void generateQmlModuleDef(QmlClassNode* qcn);
@@ -420,7 +420,7 @@ private:
QString getAutoLink(const Atom *atom, const Node *relative, const Node** node);
QString registerRef(const QString& ref);
- virtual QString fileBase(const Node *node) const;
+ virtual QString fileBase(const Node *node) const Q_DECL_OVERRIDE;
QString fileName(const Node *node);
static int hOffset(const Node *node);
static bool isThreeColumnEnumValueTable(const Atom *atom);
@@ -434,9 +434,9 @@ private:
QString lookupGuid(QString text);
QString lookupGuid(const QString& fileName, const QString& text);
GuidMap* lookupGuidMap(const QString& fileName);
- virtual void beginSubPage(const InnerNode* node, const QString& fileName);
- virtual void endSubPage();
- virtual void generateInnerNode(InnerNode* node);
+ virtual void beginSubPage(const InnerNode* node, const QString& fileName) Q_DECL_OVERRIDE;
+ virtual void endSubPage() Q_DECL_OVERRIDE;
+ virtual void generateInnerNode(InnerNode* node) Q_DECL_OVERRIDE;
QXmlStreamWriter& xmlWriter();
void writeApiDesc(const Node* node, CodeMarker* marker, const QString& title);
void addLink(const QString& href, const QStringRef& text, DitaTag t = DT_xref);
diff --git a/src/tools/qdoc/doc.cpp b/src/tools/qdoc/doc.cpp
index 5a3ad959d2..c10e3b4669 100644
--- a/src/tools/qdoc/doc.cpp
+++ b/src/tools/qdoc/doc.cpp
@@ -1611,12 +1611,14 @@ void DocParser::parse(const QString& source,
QString word = in.mid(startPos, pos - startPos);
// is word a C++ symbol or an English word?
if ((numInternalUppercase >= 1 && numLowercase >= 2)
- || numStrangeSymbols >= 1) {
- append(Atom::AutoLink, word);
+ || numStrangeSymbols > 0) {
+ if (word.startsWith(QString("__")))
+ appendWord(word);
+ else
+ append(Atom::AutoLink, word);
}
- else {
+ else
appendWord(word);
- }
}
}
}
@@ -1690,12 +1692,15 @@ void DocParser::insertTarget(const QString &target, bool keyword)
}
else {
targetMap_.insert(target, location());
- append(Atom::Target, target);
priv->constructExtra();
- if (keyword)
+ if (keyword) {
+ append(Atom::Keyword, target);
priv->extra->keywords_.append(priv->text.lastAtom());
- else
+ }
+ else {
+ append(Atom::Target, target);
priv->extra->targets_.append(priv->text.lastAtom());
+ }
}
}
@@ -1991,7 +1996,7 @@ void DocParser::append(const QString &string)
Atom::Type lastType = priv->text.lastAtom()->type();
if ((lastType == Atom::Code) && priv->text.lastAtom()->string().endsWith(QLatin1String("\n\n")))
priv->text.lastAtom()->chopString();
- priv->text << Atom(string);
+ priv->text << Atom(string); // The Atom type is Link.
}
void DocParser::append(Atom::Type type, const QString& p1, const QString& p2)
@@ -2008,7 +2013,7 @@ void DocParser::append(const QString& p1, const QString& p2)
if ((lastType == Atom::Code) && priv->text.lastAtom()->string().endsWith(QLatin1String("\n\n")))
priv->text.lastAtom()->chopString();
if (p2.isEmpty())
- priv->text << Atom(p1);
+ priv->text << Atom(p1); // The Atom type is Link.
else
priv->text << LinkAtom(p1, p2);
}
@@ -2319,7 +2324,10 @@ QString DocParser::getBracedArgument(bool verbatim)
}
break;
default:
- arg += in[pos];
+ if (in[pos].isSpace() && !verbatim)
+ arg += QChar(' ');
+ else
+ arg += in[pos];
pos++;
}
}
@@ -2816,18 +2824,6 @@ QString DocParser::slashed(const QString& str)
#define COMMAND_BRIEF Doc::alias("brief")
#define COMMAND_QMLBRIEF Doc::alias("qmlbrief")
-#if 0
-Doc::Doc(const Location& start_loc,
- const Location& end_loc,
- const QString& source,
- const QSet<QString>& metaCommandSet)
-{
- priv = new DocPrivate(start_loc,end_loc,source);
- DocParser parser;
- parser.parse(source,priv,metaCommandSet,QSet<QString>());
-}
-#endif
-
/*!
Parse the qdoc comment \a source. Build up a list of all the topic
commands found including their arguments. This constructor is used
@@ -3234,6 +3230,9 @@ void Doc::initialize(const Config& config)
}
}
+/*!
+ All the heap allocated variables are deleted.
+ */
void Doc::terminate()
{
DocParser::exampleFiles.clear();
diff --git a/src/tools/qdoc/doc.h b/src/tools/qdoc/doc.h
index 1c13c0f026..72db2c882c 100644
--- a/src/tools/qdoc/doc.h
+++ b/src/tools/qdoc/doc.h
@@ -97,9 +97,9 @@ public:
TopicRef() { }
~TopicRef();
- virtual bool isMapRef() const { return false; }
- virtual const DitaRefList* subrefs() const { return &subrefs_; }
- virtual void appendSubref(DitaRef* t) { subrefs_.append(t); }
+ virtual bool isMapRef() const Q_DECL_OVERRIDE { return false; }
+ virtual const DitaRefList* subrefs() const Q_DECL_OVERRIDE { return &subrefs_; }
+ virtual void appendSubref(DitaRef* t) Q_DECL_OVERRIDE { subrefs_.append(t); }
private:
DitaRefList subrefs_;
@@ -111,7 +111,7 @@ public:
MapRef() { }
~MapRef() { }
- virtual bool isMapRef() const { return true; }
+ virtual bool isMapRef() const Q_DECL_OVERRIDE { return true; }
};
class Doc
diff --git a/src/tools/qdoc/generator.cpp b/src/tools/qdoc/generator.cpp
index 5aff19e121..db531e3936 100644
--- a/src/tools/qdoc/generator.cpp
+++ b/src/tools/qdoc/generator.cpp
@@ -64,7 +64,7 @@ QString Generator::outSubdir_;
QStringList Generator::outFileNames_;
QSet<QString> Generator::outputFormats;
QHash<QString, QString> Generator::outputPrefixes;
-QString Generator::project;
+QString Generator::project_;
QStringList Generator::scriptDirs;
QStringList Generator::scriptFiles;
QString Generator::sinceTitles[] =
@@ -92,7 +92,9 @@ bool Generator::debugging_ = false;
bool Generator::noLinkErrors_ = false;
bool Generator::autolinkErrors_ = false;
bool Generator::redirectDocumentationToDevNull_ = false;
-Generator::Passes Generator::qdocPass_ = Both;
+Generator::QDocPass Generator::qdocPass_ = Generator::Neither;
+bool Generator::qdocSingleExec_ = false;
+bool Generator::qdocWriteQaPages_ = false;
bool Generator::useOutputSubdirs_ = true;
void Generator::startDebugging(const QString& message)
@@ -134,6 +136,7 @@ Generator::Generator()
inTableHeader_(false),
threeColumnEnumValueTable_(true),
showInternal_(false),
+ singleExec_(false),
numTableRows_(0)
{
qdb_ = QDocDatabase::qdocDB();
@@ -259,7 +262,8 @@ void Generator::writeOutFileNames()
void Generator::beginSubPage(const InnerNode* node, const QString& fileName)
{
QString path = outputDir() + QLatin1Char('/');
- if (Generator::useOutputSubdirs() && !node->outputSubdirectory().isEmpty())
+ if (Generator::useOutputSubdirs() && !node->outputSubdirectory().isEmpty() &&
+ !outputDir().endsWith(node->outputSubdirectory()))
path += node->outputSubdirectory() + QLatin1Char('/');
path += fileName;
@@ -314,7 +318,7 @@ QString Generator::fileBase(const Node *node) const
if (node->isExample() || node->isExampleFile()) {
QString modPrefix(node->moduleName());
if (modPrefix.isEmpty()) {
- modPrefix = project;
+ modPrefix = project_;
}
base.prepend(modPrefix.toLower() + QLatin1Char('-'));
}
@@ -1529,7 +1533,7 @@ void Generator::initialize(const Config &config)
QDir dirInfo;
if (dirInfo.exists(outDir_)) {
- if (!runGenerateOnly() && Generator::useOutputSubdirs()) {
+ if (!generating() && Generator::useOutputSubdirs()) {
if (!Config::removeDirContents(outDir_))
config.lastLocation().error(tr("Cannot empty output directory '%1'").arg(outDir_));
}
@@ -1643,7 +1647,7 @@ void Generator::initialize(const Config &config)
++n;
}
- project = config.getString(CONFIG_PROJECT);
+ project_ = config.getString(CONFIG_PROJECT);
QStringList prefixes = config.getStringList(CONFIG_OUTPUTPREFIXES);
if (!prefixes.isEmpty()) {
@@ -1678,6 +1682,7 @@ void Generator::initializeGenerator(const Config& config)
{
config_ = &config;
showInternal_ = config.getBool(CONFIG_SHOWINTERNAL);
+ singleExec_ = config.getBool(CONFIG_SINGLEEXEC);
}
bool Generator::matchAhead(const Atom *atom, Atom::Type expectedAtomType)
diff --git a/src/tools/qdoc/generator.h b/src/tools/qdoc/generator.h
index 110a8d9e73..b1faf02ae9 100644
--- a/src/tools/qdoc/generator.h
+++ b/src/tools/qdoc/generator.h
@@ -61,7 +61,7 @@ class Generator
Q_DECLARE_TR_FUNCTIONS(QDoc::Generator)
public:
- enum Passes { Both, Prepare, Generate };
+ enum QDocPass { Neither, Prepare, Generate };
enum ListType { Generic, Obsolete };
Generator();
@@ -91,10 +91,14 @@ public:
static bool debugging() { return debugging_; }
static bool noLinkErrors() { return noLinkErrors_; }
static bool autolinkErrors() { return autolinkErrors_; }
- static void setQDocPass(Passes pass) { qdocPass_ = pass; }
- static bool runPrepareOnly() { return (qdocPass_ == Prepare); }
- static bool runGenerateOnly() { return (qdocPass_ == Generate); }
- static QString defaultModuleName() { return project; }
+ static void setQDocPass(QDocPass t) { qdocPass_ = t; }
+ static bool preparing() { return (qdocPass_ == Prepare); }
+ static bool generating() { return (qdocPass_ == Generate); }
+ static bool singleExec() { return qdocSingleExec_; }
+ static bool writeQaPages() { return qdocWriteQaPages_; }
+ static void setSingleExec() { qdocSingleExec_ = true; }
+ static void setWriteQaPages() { qdocWriteQaPages_ = true; }
+ static QString defaultModuleName() { return project_; }
static void resetUseOutputSubdirs() { useOutputSubdirs_ = false; }
static bool useOutputSubdirs() { return useOutputSubdirs_; }
@@ -103,6 +107,7 @@ protected:
virtual void endSubPage();
virtual QString fileBase(const Node* node) const;
virtual QString fileExtension() const = 0;
+ virtual void generateQAPage() { }
virtual void generateAlsoList(const Node *node, CodeMarker *marker);
virtual int generateAtom(const Atom *atom, const Node *relative, CodeMarker *marker);
virtual void generateBody(const Node *node, CodeMarker *marker);
@@ -198,7 +203,7 @@ private:
static QStringList imageDirs;
static QStringList imageFiles;
static QMap<QString, QStringList> imgFileExts;
- static QString project;
+ static QString project_;
static QString outDir_;
static QString outSubdir_;
static QStringList outFileNames_;
@@ -212,7 +217,9 @@ private:
static bool noLinkErrors_;
static bool autolinkErrors_;
static bool redirectDocumentationToDevNull_;
- static Passes qdocPass_;
+ static QDocPass qdocPass_;
+ static bool qdocSingleExec_;
+ static bool qdocWriteQaPages_;
static bool useOutputSubdirs_;
void generateReimplementedFrom(const FunctionNode *func, CodeMarker *marker);
@@ -232,6 +239,7 @@ private:
bool inTableHeader_;
bool threeColumnEnumValueTable_;
bool showInternal_;
+ bool singleExec_;
int numTableRows_;
QString link_;
QString sectionNumber_;
diff --git a/src/tools/qdoc/htmlgenerator.cpp b/src/tools/qdoc/htmlgenerator.cpp
index ced7e637b3..bb1f9cd651 100644
--- a/src/tools/qdoc/htmlgenerator.cpp
+++ b/src/tools/qdoc/htmlgenerator.cpp
@@ -100,8 +100,10 @@ HtmlGenerator::HtmlGenerator()
*/
HtmlGenerator::~HtmlGenerator()
{
- if (helpProjectWriter)
+ if (helpProjectWriter) {
delete helpProjectWriter;
+ helpProjectWriter = 0;
+ }
}
/*!
@@ -130,6 +132,11 @@ void HtmlGenerator::initializeGenerator(const Config &config)
Generator::initializeGenerator(config);
obsoleteLinks = config.getBool(CONFIG_OBSOLETELINKS);
setImageFileExtensions(QStringList() << "png" << "jpg" << "jpeg" << "gif");
+
+ /*
+ The formatting maps are owned by Generator. They are cleared in
+ Generator::terminate().
+ */
int i = 0;
while (defaults[i].key) {
formattingLeftMap().insert(defaults[i].key, defaults[i].left);
@@ -215,7 +222,12 @@ void HtmlGenerator::initializeGenerator(const Config &config)
// The following line was changed to fix QTBUG-27798
//codeIndent = config.getInt(CONFIG_CODEINDENT);
- helpProjectWriter = new HelpProjectWriter(config, project.toLower() + ".qhp", this);
+ /*
+ The help file write should be allocated once and only once
+ per qdoc execution.
+ */
+ if (helpProjectWriter == 0)
+ helpProjectWriter = new HelpProjectWriter(config, project.toLower() + ".qhp", this);
// Documentation template handling
headerScripts = config.getString(HtmlGenerator::format() + Config::dot + CONFIG_HEADERSCRIPTS);
@@ -263,6 +275,20 @@ QString HtmlGenerator::format()
}
/*!
+ Generate targets for any \keyword commands that were seen
+ in the qdoc comment for the \a node.
+ */
+void HtmlGenerator::generateKeywordAnchors(const Node* node)
+{
+ if (!node->doc().isEmpty()) {
+ const QList<Atom*>& keywords = node->doc().keywords();
+ foreach (Atom* a, keywords) {
+ out() << "<a name=\"" << Doc::canonicalTitle(a->string()) << "\"></a>";
+ }
+ }
+}
+
+/*!
Traverses the current tree generating all the HTML documentation.
*/
void HtmlGenerator::generateDocs()
@@ -270,10 +296,12 @@ void HtmlGenerator::generateDocs()
Node* qflags = qdb_->findClassNode(QStringList("QFlags"));
if (qflags)
qflagsHref_ = linkForNode(qflags,0);
- if (!runPrepareOnly())
+ if (!preparing())
Generator::generateDocs();
+ if (Generator::generating() && Generator::writeQaPages())
+ generateQAPage();
- if (!runGenerateOnly()) {
+ if (!generating()) {
QString fileBase = project.toLower().simplified().replace(QLatin1Char(' '), QLatin1Char('-'));
qdb_->generateIndex(outputDir() + QLatin1Char('/') + fileBase + ".index",
projectUrl,
@@ -282,7 +310,7 @@ void HtmlGenerator::generateDocs()
true);
}
- if (!runPrepareOnly()) {
+ if (!preparing()) {
helpProjectWriter->generate();
generateManifestFiles();
/*
@@ -293,6 +321,144 @@ void HtmlGenerator::generateDocs()
}
/*!
+ Output the module's Quality Assurance page.
+ */
+void HtmlGenerator::generateQAPage()
+{
+ NamespaceNode* node = qdb_->primaryTreeRoot();
+ beginSubPage(node, "aaa-" + defaultModuleName().toLower() + "-qa-page.html");
+ CodeMarker* marker = CodeMarker::markerForFileName(node->location().filePath());
+ QString title = "Quality Assurance Page for " + defaultModuleName();
+ QString t = "Quality assurance information for checking the " + defaultModuleName() + " documentation.";
+ generateHeader(title, node, marker);
+ generateTitle(title, Text() << t, LargeSubTitle, node, marker);
+
+ QStringList strings;
+ QVector<int> counts;
+ QString depends = qdb_->getLinkCounts(strings, counts);
+ if (!strings.isEmpty()) {
+ t = "Intermodule Link Counts";
+ QString ref = registerRef(t);
+ out() << "<a name=\"" << ref << "\"></a>" << divNavTop << '\n';
+ out() << "<h2 id=\"" << ref << "\">" << protectEnc(t) << "</h2>\n";
+ out() << "<table class=\"valuelist\"><tr valign=\"top\" "
+ << "class=\"even\"><th class=\"tblConst\">Destination Module</th>"
+ << "<th class=\"tblval\">Link Count</th></tr>\n";
+ QString fileName;
+ for (int i = 0; i< strings.size(); ++i) {
+ fileName = generateLinksToLinksPage(strings.at(i), marker);
+ out() << "<tr><td class=\"topAlign\"><tt>"
+ << "<a href=\"" << fileName << "\">"
+ << strings.at(i) << "</a>"
+ << "</tt></td><td class=\"topAlign\"><tt>" << counts.at(i)
+ << "</tt></td></tr>\n";
+ }
+ int count = 0;
+ fileName = generateLinksToBrokenLinksPage(marker, count);
+ if (count != 0) {
+ out() << "<tr><td class=\"topAlign\"><tt>"
+ << "<a href=\"" << fileName << "\">"
+ << "Broken Links" << "</a>"
+ << "</tt></td><td class=\"topAlign\"><tt>" << count
+ << "</tt></td></tr>\n";
+
+ }
+
+ out() << "</table>\n";
+ t = "The Optimal \"depends\" Variable";
+ out() << "<h2>" << protectEnc(t) << "</h2>\n";
+ t = "Consider replacing the depends variable in " + defaultModuleName().toLower() +
+ ".qdocconf with this one, if the two are not identical:";
+ out() << "<p>" << protectEnc(t) << "</p>\n";
+ out() << "<p>" << protectEnc(depends) << "</p>\n";
+ }
+ generateFooter();
+ endSubPage();
+}
+
+/*!
+ This function writes an html file containing a list of
+ links to links that originate in the current module and
+ go to targets in the specified \a module. The \a marker
+ is used for the same thing the marker is always used for.
+ */
+QString HtmlGenerator::generateLinksToLinksPage(const QString& module, CodeMarker* marker)
+{
+ NamespaceNode* node = qdb_->primaryTreeRoot();
+ QString fileName = "aaa-links-to-" + module + ".html";
+ beginSubPage(node, fileName);
+ QString title = "Links from " + defaultModuleName() + " to " + module;
+ generateHeader(title, node, marker);
+ generateTitle(title, Text(), SmallSubTitle, node, marker);
+ out() << "<p>This is a list of links from " << defaultModuleName()
+ << " to " << module << ". ";
+ out() << "Click on a link to go to the location of the link. The link is marked ";
+ out() << "with red asterisks. ";
+ out() << "Click on the marked link to see if it goes to the right place.</p>\n";
+ TargetList* tlist = qdb_->getTargetList(module);
+ if (tlist) {
+ out() << "<table class=\"valuelist\"><tr valign=\"top\" class=\"odd\"><th class=\"tblConst\">Link to link...</th><th class=\"tblval\">In file...</th><th class=\"tbldscr\">Somewhere after line number...</th></tr>\n";
+ foreach (TargetLoc* t, *tlist) {
+ // e.g.: <a name="link-8421"></a><a href="layout.html">Layout Management</a>
+ out() << "<tr><td class=\"topAlign\">";
+ out() << "<a href=\"" << t->fileName_ << "#" << t->target_ << "\">";
+ out() << t->text_ << "</a></td>";
+ out() << "<td class=\"topAlign\">";
+ QString f = t->loc_->doc().location().filePath();
+ out() << f << "</td>";
+ out() << "<td class=\"topAlign\">";
+ out() << t->loc_->doc().location().lineNo() << "</td></tr>\n";
+ }
+ out() << "</table>\n";
+ }
+ generateFooter();
+ endSubPage();
+ return fileName;
+}
+
+/*!
+ This function writes an html file containing a list of
+ links to broken links that originate in the current
+ module and go nowwhere. It returns the name of the file
+ it generates, and it sets \a count to the number of
+ broken links that were found. The \a marker is used for
+ the same thing the marker is always used for.
+ */
+QString HtmlGenerator::generateLinksToBrokenLinksPage(CodeMarker* marker, int& count)
+{
+ QString fileName;
+ NamespaceNode* node = qdb_->primaryTreeRoot();
+ TargetList* tlist = qdb_->getTargetList("broken");
+ if (tlist && !tlist->isEmpty()) {
+ count = tlist->size();
+ fileName = "aaa-links-to-broken-links.html";
+ beginSubPage(node, fileName);
+ QString title = "Broken links in " + defaultModuleName();
+ generateHeader(title, node, marker);
+ generateTitle(title, Text(), SmallSubTitle, node, marker);
+ out() << "<p>This is a list of broken links in " << defaultModuleName() << ". ";
+ out() << "Click on a link to go to the broken link. ";
+ out() << "The link's target could not be found.</p>\n";
+ out() << "<table class=\"valuelist\"><tr valign=\"top\" class=\"odd\"><th class=\"tblConst\">Link to broken link...</th><th class=\"tblval\">In file...</th><th class=\"tbldscr\">Somewhere after line number...</th></tr>\n";
+ foreach (TargetLoc* t, *tlist) {
+ // e.g.: <a name="link-8421"></a><a href="layout.html">Layout Management</a>
+ out() << "<tr><td class=\"topAlign\">";
+ out() << "<a href=\"" << t->fileName_ << "#" << t->target_ << "\">";
+ out() << t->text_ << "</a></td>";
+ out() << "<td class=\"topAlign\">";
+ QString f = t->loc_->doc().location().filePath();
+ out() << f << "</td>";
+ out() << "<td class=\"topAlign\">";
+ out() << t->loc_->doc().location().lineNo() << "</td></tr>\n";
+ }
+ out() << "</table>\n";
+ generateFooter();
+ endSubPage();
+ }
+ return fileName;
+}
+
+/*!
Generate html from an instance of Atom.
*/
int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMarker *marker)
@@ -310,6 +476,7 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark
case Atom::AbstractRight:
break;
case Atom::AutoLink:
+ case Atom::NavAutoLink:
if (!inLink_ && !inContents_ && !inSectionHeading_) {
const Node *node = 0;
QString link = getAutoLink(atom, relative, &node);
@@ -321,9 +488,15 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark
if ((relative->parent() != node) && !relative->isObsolete())
link.clear();
}
- if (link.isEmpty())
+ if (link.isEmpty()) {
out() << protectEnc(atom->string());
+ }
else {
+ if (Generator::writeQaPages() && node && (atom->type() != Atom::NavAutoLink)) {
+ QString text = atom->string();
+ QString target = qdb_->getNewLinkTarget(relative, node, outFileName(), text);
+ out() << "<a id=\"" << Doc::canonicalTitle(target) << "\" class=\"qa-mark\"></a>";
+ }
beginLink(link, node, relative);
generateLink(atom, marker);
endLink();
@@ -806,14 +979,31 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark
out() << "<br/>";
break;
case Atom::Link:
+ case Atom::NavLink:
{
inObsoleteLink = false;
const Node *node = 0;
QString link = getLink(atom, relative, &node);
if (link.isEmpty() && (node != relative) && !noLinkErrors()) {
relative->doc().location().warning(tr("Can't link to '%1'").arg(atom->string()));
+ if (Generator::writeQaPages() && (atom->type() != Atom::NavAutoLink)) {
+ QString text = atom->next()->next()->string();
+ QString target = qdb_->getNewLinkTarget(relative, node, outFileName(), text, true);
+ out() << "<a id=\"" << Doc::canonicalTitle(target) << "\" class=\"qa-mark\"></a>";
+ }
}
else {
+ if (Generator::writeQaPages() && node && (atom->type() != Atom::NavLink)) {
+ QString text = atom->next()->next()->string();
+ QString target = qdb_->getNewLinkTarget(relative, node, outFileName(), text);
+ out() << "<a id=\"" << Doc::canonicalTitle(target) << "\" class=\"qa-mark\"></a>";
+ }
+ /*
+ mws saw this on 17/10/2014.
+ Is this correct? Setting node to 0 means the
+ following test always fails. Did we decide to
+ no longer warn about linking to obsolete things?
+ */
node = 0;
if (node && node->status() == Node::Obsolete) {
if ((relative->parent() != node) && !relative->isObsolete()) {
@@ -1126,6 +1316,8 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark
break;
case Atom::TableOfContents:
break;
+ case Atom::Keyword:
+ break;
case Atom::Target:
out() << "<a name=\"" << Doc::canonicalTitle(atom->string()) << "\"></a>";
break;
@@ -1173,8 +1365,10 @@ void HtmlGenerator::generateClassLikeNode(InnerNode* inner, CodeMarker* marker)
subtitleText << "(" << Atom(Atom::AutoLink, fullTitle) << ")" << Atom(Atom::LineBreak);
generateHeader(title, inner, marker);
+
sections = marker->sections(inner, CodeMarker::Summary, CodeMarker::Okay);
generateTableOfContents(inner,marker,&sections);
+ generateKeywordAnchors(inner);
generateTitle(title, subtitleText, SmallSubTitle, inner, marker);
generateBrief(inner, marker);
generateRequisites(inner, marker);
@@ -1346,6 +1540,7 @@ void HtmlGenerator::generateQmlTypePage(QmlClassNode* qcn, CodeMarker* marker)
QList<Section> sections = marker->qmlSections(qcn, CodeMarker::Summary);
generateTableOfContents(qcn, marker, &sections);
marker = CodeMarker::markerForLanguage(QLatin1String("QML"));
+ generateKeywordAnchors(qcn);
generateTitle(htmlTitle, Text() << qcn->subTitle(), subTitleSize, qcn, marker);
generateBrief(qcn, marker);
generateQmlRequisites(qcn, marker);
@@ -1417,6 +1612,7 @@ void HtmlGenerator::generateQmlBasicTypePage(QmlBasicTypeNode* qbtn, CodeMarker*
generateHeader(htmlTitle, qbtn, marker);
QList<Section> sections = marker->sections(qbtn, CodeMarker::Summary, CodeMarker::Okay);
generateTableOfContents(qbtn,marker,&sections);
+ generateKeywordAnchors(qbtn);
generateTitle(htmlTitle,
Text() << qbtn->subTitle(),
subTitleSize,
@@ -1462,6 +1658,7 @@ void HtmlGenerator::generateDocNode(DocNode* dn, CodeMarker* marker)
if ((dn->name() != QStringLiteral("index.html")))
generateTableOfContents(dn,marker,0);
+ generateKeywordAnchors(dn);
generateTitle(fullTitle,
Text() << dn->subTitle(),
subTitleSize,
@@ -1546,6 +1743,7 @@ void HtmlGenerator::generateCollectionNode(CollectionNode* cn, CodeMarker* marke
generateHeader(fullTitle, cn, marker);
generateTableOfContents(cn,marker,0);
+ generateKeywordAnchors(cn);
generateTitle(fullTitle, Text() << cn->subTitle(), subTitleSize, cn, marker);
if (cn->isModule()) {
@@ -1646,11 +1844,11 @@ void HtmlGenerator::generateNavigationBar(const QString &title,
return;
if (!homepage.isEmpty())
navigationbar << Atom(Atom::ListItemLeft)
- << Atom(Atom::AutoLink, homepage)
+ << Atom(Atom::NavAutoLink, homepage)
<< Atom(Atom::ListItemRight);
if (!landingpage.isEmpty() && landingpage != title)
navigationbar << Atom(Atom::ListItemLeft)
- << Atom(Atom::AutoLink, landingpage)
+ << Atom(Atom::NavAutoLink, landingpage)
<< Atom(Atom::ListItemRight);
if (node->isClass()) {
@@ -1659,7 +1857,7 @@ void HtmlGenerator::generateNavigationBar(const QString &title,
if (!cppclassespage.isEmpty())
navigationbar << Atom(Atom::ListItemLeft)
- << Atom(Atom::Link, cppclassespage)
+ << Atom(Atom::NavLink, cppclassespage)
<< Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
<< Atom(Atom::String, QLatin1String("C++ Classes"))
<< Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK)
@@ -1673,7 +1871,7 @@ void HtmlGenerator::generateNavigationBar(const QString &title,
else if (node->isQmlType() || node->isQmlBasicType()) {
if (!qmltypespage.isEmpty())
navigationbar << Atom(Atom::ListItemLeft)
- << Atom(Atom::Link, qmltypespage)
+ << Atom(Atom::NavLink, qmltypespage)
<< Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
<< Atom(Atom::String, QLatin1String("QML Types"))
<< Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK)
@@ -1685,7 +1883,7 @@ void HtmlGenerator::generateNavigationBar(const QString &title,
else {
if (node->isExampleFile()) {
navigationbar << Atom(Atom::ListItemLeft)
- << Atom(Atom::Link, node->parent()->name())
+ << Atom(Atom::NavLink, node->parent()->name())
<< Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
<< Atom(Atom::String, node->parent()->title())
<< Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK)
@@ -2329,7 +2527,7 @@ QString HtmlGenerator::generateListOfAllMemberFile(const InnerNode *inner,
out() << ", including inherited members.</p>\n";
Section section = sections.first();
- generateSectionList(section, 0, marker, CodeMarker::Subpage);
+ generateSectionList(section, inner, marker, CodeMarker::Subpage);
generateFooter();
endSubPage();
@@ -2386,7 +2584,7 @@ QString HtmlGenerator::generateAllQmlMembersFile(QmlClassNode* qml_cn, CodeMarke
prefix = keys.at(j).mid(1);
prefix = prefix.left(keys.at(j).indexOf("::")+1);
}
- generateQmlItem(nodes[j], qcn, marker, true);
+ generateQmlItem(nodes[j], qml_cn, marker, true);
if (nodes[j]->isAttached())
out() << " [attached]";
//generateSynopsis(nodes[j], qcn, marker, CodeMarker::Subpage, false, &prefix);
@@ -2815,8 +3013,9 @@ void HtmlGenerator::generateCompactList(ListType listType,
else if (listType == Obsolete) {
QString fileName = fileBase(it.value()) + "-obsolete." + fileExtension();
QString link;
- if (useOutputSubdirs())
+ if (useOutputSubdirs()) {
link = QString("../" + it.value()->outputSubdirectory() + QLatin1Char('/'));
+ }
link += fileName;
out() << "<a href=\"" << link << "\">";
}
@@ -2856,7 +3055,7 @@ void HtmlGenerator::generateFunctionIndex(const Node *relative)
char currentLetter;
out() << "<ul>\n";
- NodeMapMap funcIndex = qdb_->getFunctionIndex();
+ NodeMapMap& funcIndex = qdb_->getFunctionIndex();
QMap<QString, NodeMap >::ConstIterator f = funcIndex.constBegin();
while (f != funcIndex.constEnd()) {
out() << "<li>";
@@ -3675,34 +3874,7 @@ QString HtmlGenerator::getLink(const Atom *atom, const Node *relative, const Nod
if (t.startsWith("mailto:"))
return t;
}
-
- QString ref;
-
- *node = qdb_->findNodeForAtom(atom, relative, ref);
- if (!(*node))
- return QString();
-
- QString url = (*node)->url();
- if (!url.isEmpty()) {
- if (ref.isEmpty())
- return url;
- int hashtag = url.lastIndexOf(QChar('#'));
- if (hashtag != -1)
- url.truncate(hashtag);
- return url + "#" + ref;
- }
- /*
- Given that *node is not null, we now cconstruct a link
- to the page that *node represents, and then if we found
- a target on that page, we connect the target to the link
- with '#'.
- */
- QString link = linkForNode(*node, relative);
- if (*node && (*node)->subType() == Node::Image)
- link = "images/used-in-examples/" + link;
- if (!ref.isEmpty())
- link += QLatin1Char('#') + ref;
- return link;
+ return getAutoLink(atom, relative, node);
}
/*!
@@ -3720,29 +3892,28 @@ QString HtmlGenerator::getLink(const Atom *atom, const Node *relative, const Nod
QString HtmlGenerator::getAutoLink(const Atom *atom, const Node *relative, const Node** node)
{
QString ref;
- QString link;
*node = qdb_->findNodeForAtom(atom, relative, ref);
if (!(*node))
return QString();
- QString url = (*node)->url();
- if (!url.isEmpty()) {
- if (ref.isEmpty())
- return url;
- int hashtag = url.lastIndexOf(QChar('#'));
+ QString link = (*node)->url();
+ if (link.isEmpty()) {
+ link = linkForNode(*node, relative);
+ if ((*node)->subType() == Node::Image)
+ link = "images/used-in-examples/" + link;
+ if (!ref.isEmpty())
+ link += QLatin1Char('#') + ref;
+ }
+ else if (!ref.isEmpty()) {
+ int hashtag = link.lastIndexOf(QChar('#'));
if (hashtag != -1)
- url.truncate(hashtag);
- return url + "#" + ref;
+ link.truncate(hashtag);
+ link += "#" + ref;
}
-
- link = linkForNode(*node, relative);
- if (!ref.isEmpty())
- link += QLatin1Char('#') + ref;
return link;
}
-
/*!
Construct the link string for the \a node and return it.
The \a relative node is use to decide the link we are
@@ -3797,7 +3968,12 @@ QString HtmlGenerator::linkForNode(const Node *node, const Node *relative)
if (node && relative && (node != relative)) {
if (useOutputSubdirs() && !node->isExternalPage() &&
node->outputSubdirectory() != relative->outputSubdirectory()) {
- link.prepend(QString("../" + node->outputSubdirectory() + QLatin1Char('/')));
+ if (link.startsWith(QString(node->outputSubdirectory() + QLatin1Char('/')))) {
+ link.prepend(QString("../"));
+ }
+ else {
+ link.prepend(QString("../" + node->outputSubdirectory() + QLatin1Char('/')));
+ }
}
}
return link;
@@ -3835,6 +4011,7 @@ void HtmlGenerator::generateDetailedMember(const Node *node,
generateMacRef(node, marker);
#endif
generateExtractionMark(node, MemberMark);
+ generateKeywordAnchors(node);
QString nodeRef = refForNode(node);
if (node->type() == Node::Enum
&& (enume = static_cast<const EnumNode *>(node))->flagsType()) {
@@ -4071,6 +4248,7 @@ void HtmlGenerator::generateDetailedQmlMember(Node *node,
generateMacRef(node, marker);
#endif
generateExtractionMark(node, MemberMark);
+ generateKeywordAnchors(node);
out() << "<div class=\"qmlitem\">";
QString nodeRef = refForNode(node);
if (node->type() == Node::QmlPropertyGroup) {
@@ -4524,6 +4702,9 @@ void HtmlGenerator::generateManifestFile(QString manifest, QString element)
Reads metacontent - additional attributes and tags to apply
when generating manifest files, read from config. Takes the
configuration class \a config as a parameter.
+
+ The manifest metacontent map is cleared immediately after
+ the manifest files have been generated.
*/
void HtmlGenerator::readManifestMetaContent(const Config &config)
{
diff --git a/src/tools/qdoc/htmlgenerator.h b/src/tools/qdoc/htmlgenerator.h
index 40360da02e..4d93822db1 100644
--- a/src/tools/qdoc/htmlgenerator.h
+++ b/src/tools/qdoc/htmlgenerator.h
@@ -77,10 +77,10 @@ public:
HtmlGenerator();
~HtmlGenerator();
- virtual void initializeGenerator(const Config& config);
- virtual void terminateGenerator();
- virtual QString format();
- virtual void generateDocs();
+ virtual void initializeGenerator(const Config& config) Q_DECL_OVERRIDE;
+ virtual void terminateGenerator() Q_DECL_OVERRIDE;
+ virtual QString format() Q_DECL_OVERRIDE;
+ virtual void generateDocs() Q_DECL_OVERRIDE;
void generateManifestFiles();
QString protectEnc(const QString &string);
@@ -89,20 +89,24 @@ public:
static QString sinceTitle(int i) { return sinceTitles[i]; }
protected:
+ virtual void generateQAPage() Q_DECL_OVERRIDE;
+ QString generateLinksToLinksPage(const QString& module, CodeMarker* marker);
+ QString generateLinksToBrokenLinksPage(CodeMarker* marker, int& count);
virtual int generateAtom(const Atom *atom,
const Node *relative,
- CodeMarker *marker);
- virtual void generateClassLikeNode(InnerNode* inner, CodeMarker* marker);
- virtual void generateQmlTypePage(QmlClassNode* qcn, CodeMarker* marker);
- virtual void generateQmlBasicTypePage(QmlBasicTypeNode* qbtn, CodeMarker* marker);
- virtual void generateDocNode(DocNode* dn, CodeMarker* marker);
- virtual void generateCollectionNode(CollectionNode* cn, CodeMarker* marker);
- virtual QString fileExtension() const;
+ CodeMarker *marker) Q_DECL_OVERRIDE;
+ virtual void generateClassLikeNode(InnerNode* inner, CodeMarker* marker) Q_DECL_OVERRIDE;
+ virtual void generateQmlTypePage(QmlClassNode* qcn, CodeMarker* marker) Q_DECL_OVERRIDE;
+ virtual void generateQmlBasicTypePage(QmlBasicTypeNode* qbtn, CodeMarker* marker) Q_DECL_OVERRIDE;
+ virtual void generateDocNode(DocNode* dn, CodeMarker* marker) Q_DECL_OVERRIDE;
+ virtual void generateCollectionNode(CollectionNode* cn, CodeMarker* marker) Q_DECL_OVERRIDE;
+ virtual QString fileExtension() const Q_DECL_OVERRIDE;
virtual QString refForNode(const Node *node);
virtual QString linkForNode(const Node *node, const Node *relative);
void generateManifestFile(QString manifest, QString element);
void readManifestMetaContent(const Config &config);
+ void generateKeywordAnchors(const Node* node);
private:
enum SubTitleSize { SmallSubTitle, LargeSubTitle };
@@ -179,7 +183,7 @@ private:
void generateDetailedQmlMember(Node *node,
const InnerNode *relative,
CodeMarker *marker);
- void generateQmlInherits(QmlClassNode* qcn, CodeMarker* marker);
+ void generateQmlInherits(QmlClassNode* qcn, CodeMarker* marker) Q_DECL_OVERRIDE;
void generateQmlInstantiates(QmlClassNode* qcn, CodeMarker* marker);
void generateInstantiatedBy(ClassNode* cn, CodeMarker* marker);
@@ -210,7 +214,7 @@ private:
QString getAutoLink(const Atom *atom, const Node *relative, const Node** node);
QString registerRef(const QString& ref);
- virtual QString fileBase(const Node *node) const;
+ virtual QString fileBase(const Node *node) const Q_DECL_OVERRIDE;
QString fileName(const Node *node);
static int hOffset(const Node *node);
static bool isThreeColumnEnumValueTable(const Atom *atom);
diff --git a/src/tools/qdoc/jscodemarker.h b/src/tools/qdoc/jscodemarker.h
index 52fe8855af..70bf38d67d 100644
--- a/src/tools/qdoc/jscodemarker.h
+++ b/src/tools/qdoc/jscodemarker.h
@@ -50,14 +50,14 @@ public:
JsCodeMarker();
~JsCodeMarker();
- virtual bool recognizeCode(const QString &code);
- virtual bool recognizeExtension(const QString &ext);
- virtual bool recognizeLanguage(const QString &language);
- virtual Atom::Type atomType() const;
+ virtual bool recognizeCode(const QString &code) Q_DECL_OVERRIDE;
+ virtual bool recognizeExtension(const QString &ext) Q_DECL_OVERRIDE;
+ virtual bool recognizeLanguage(const QString &language) Q_DECL_OVERRIDE;
+ virtual Atom::Type atomType() const Q_DECL_OVERRIDE;
virtual QString markedUpCode(const QString &code,
const Node *relative,
- const Location &location);
+ const Location &location) Q_DECL_OVERRIDE;
private:
QString addMarkUp(const QString &code, const Node *relative,
diff --git a/src/tools/qdoc/location.cpp b/src/tools/qdoc/location.cpp
index 040dd0cd88..923901fc34 100644
--- a/src/tools/qdoc/location.cpp
+++ b/src/tools/qdoc/location.cpp
@@ -256,7 +256,7 @@ QString Location::canonicalRelativePath(const QString &path)
*/
void Location::warning(const QString& message, const QString& details) const
{
- if (!Generator::runPrepareOnly())
+ if (!Generator::preparing())
emitMessage(Warning, message, details);
}
@@ -267,7 +267,7 @@ void Location::warning(const QString& message, const QString& details) const
*/
void Location::error(const QString& message, const QString& details) const
{
- if (!Generator::runPrepareOnly())
+ if (!Generator::preparing())
emitMessage(Error, message, details);
}
@@ -286,6 +286,15 @@ void Location::fatal(const QString& message, const QString& details) const
}
/*!
+ Writes \a message and \a detals to stderr as a formatted
+ report message.
+ */
+void Location::report(const QString& message, const QString& details) const
+{
+ emitMessage(Report, message, details);
+}
+
+/*!
Gets several parameters from the \a config, including
tab size, program name, and a regular expression that
appears to be used for matching certain error messages
@@ -371,7 +380,8 @@ void Location::emitMessage(MessageType type,
result.prepend(tr(": error: "));
else if (type == Warning)
result.prepend(tr(": warning: "));
- result.prepend(toString());
+ if (type != Report)
+ result.prepend(toString());
fprintf(stderr, "%s\n", result.toLatin1().data());
fflush(stderr);
}
diff --git a/src/tools/qdoc/location.h b/src/tools/qdoc/location.h
index eb4dbbae98..b6589fd6ab 100644
--- a/src/tools/qdoc/location.h
+++ b/src/tools/qdoc/location.h
@@ -81,6 +81,8 @@ public:
const QString& details = QString()) const;
void fatal(const QString& message,
const QString& details = QString()) const;
+ void report(const QString& message,
+ const QString& details = QString()) const;
static const Location null;
@@ -94,7 +96,7 @@ public:
static QString canonicalRelativePath(const QString &path);
private:
- enum MessageType { Warning, Error };
+ enum MessageType { Warning, Error, Report };
struct StackEntry
{
diff --git a/src/tools/qdoc/main.cpp b/src/tools/qdoc/main.cpp
index 118c206f16..186fd3195b 100644
--- a/src/tools/qdoc/main.cpp
+++ b/src/tools/qdoc/main.cpp
@@ -63,7 +63,6 @@
QT_BEGIN_NAMESPACE
-
bool creationTimeBefore(const QFileInfo &fi1, const QFileInfo &fi2)
{
return fi1.lastModified() < fi2.lastModified();
@@ -71,6 +70,8 @@ bool creationTimeBefore(const QFileInfo &fi1, const QFileInfo &fi2)
static bool highlighting = false;
static bool showInternal = false;
+static bool singleExec = false;
+static bool writeQaPages = false;
static bool redirectDocumentationToDevNull = false;
static bool noLinkErrors = false;
static bool autolinkErrors = false;
@@ -80,14 +81,22 @@ static QStringList dependModules;
static QStringList indexDirs;
static QString currentDir;
static QString prevCurrentDir;
+static QHash<QString,QString> defaults;
+#ifndef QT_NO_TRANSLATION
+typedef QPair<QString, QTranslator*> Translator;
+static QList<Translator> translators;
+#endif
-
+/*!
+ Read some XML indexes containing definitions from other
+ documentation sets. \a config contains a variable that
+ lists directories where index files can bge found. It also
+ contains the \c depends variable, which lists the modules
+ that the current module depends on.
+*/
static void loadIndexFiles(Config& config)
{
QDocDatabase* qdb = QDocDatabase::qdocDB();
- /*
- Read some XML indexes containing definitions from other documentation sets.
- */
QStringList indexFiles;
QStringList configIndexes = config.getStringList(CONFIG_INDEXES);
foreach (const QString &index, configIndexes) {
@@ -194,35 +203,17 @@ static void loadIndexFiles(Config& config)
*/
static void processQdocconfFile(const QString &fileName)
{
-#ifndef QT_NO_TRANSLATION
- QList<QTranslator *> translators;
-#endif
-
/*
The Config instance represents the configuration data for qdoc.
- All the other classes are initialized with the config. Here we
+ All the other classes are initialized with the config. Below, we
initialize the configuration with some default values.
- */
- Config config(QCoreApplication::translate("QDoc", "qdoc"));
- /*
- The default indent for code is 4.
- The default value for false is 0.
- The default supported file extensions are cpp, h, qdoc and qml.
- The default language is c++.
- The default output format is html.
- The default tab size is 8.
- And those are all the default values for configuration variables.
+ I don't think the call to translate() does anything here. For one
+ thing, the translators haven't been installed at this point. And
+ I doubt any translator would translate QDoc anyway. But I left it
+ here because it does no harm.
*/
- static QHash<QString,QString> defaults;
- if (defaults.isEmpty()) {
- defaults.insert(CONFIG_CODEINDENT, QLatin1String("4"));
- defaults.insert(CONFIG_FALSEHOODS, QLatin1String("0"));
- defaults.insert(CONFIG_FILEEXTENSIONS, QLatin1String("*.cpp *.h *.qdoc *.qml"));
- defaults.insert(CONFIG_LANGUAGE, QLatin1String("Cpp"));
- defaults.insert(CONFIG_OUTPUTFORMATS, QLatin1String("HTML"));
- defaults.insert(CONFIG_TABSIZE, QLatin1String("8"));
- }
+ Config config(QCoreApplication::translate("QDoc", "qdoc"));
QHash<QString,QString>::iterator iter;
for (iter = defaults.begin(); iter != defaults.end(); ++iter)
@@ -230,6 +221,8 @@ static void processQdocconfFile(const QString &fileName)
config.setStringList(CONFIG_SYNTAXHIGHLIGHTING, QStringList(highlighting ? "true" : "false"));
config.setStringList(CONFIG_SHOWINTERNAL, QStringList(showInternal ? "true" : "false"));
+ config.setStringList(CONFIG_SINGLEEXEC, QStringList(singleExec ? "true" : "false"));
+ config.setStringList(CONFIG_WRITEQAPAGES, QStringList(writeQaPages ? "true" : "false"));
config.setStringList(CONFIG_REDIRECTDOCUMENTATIONTODEVNULL, QStringList(redirectDocumentationToDevNull ? "true" : "false"));
config.setStringList(CONFIG_NOLINKERRORS, QStringList(noLinkErrors ? "true" : "false"));
config.setStringList(CONFIG_AUTOLINKERRORS, QStringList(autolinkErrors ? "true" : "false"));
@@ -247,8 +240,8 @@ static void processQdocconfFile(const QString &fileName)
currentDir = QFileInfo(fileName).path();
Location::initialize(config);
config.load(fileName);
- QString project = config.getString(CONFIG_PROJECT).toLower();
- //qDebug() << "\nStart project:" << project;
+ QString project = config.getString(CONFIG_PROJECT);
+ //qDebug() << "Start project:" << project;
/*
Add the defines to the configuration variables.
*/
@@ -261,17 +254,24 @@ static void processQdocconfFile(const QString &fileName)
if (!currentDir.isEmpty())
QDir::setCurrent(currentDir);
- QString phase;
- if (Generator::runPrepareOnly())
- phase = " in -prepare mode ";
- else if (Generator::runGenerateOnly())
- phase = " in -generate mode ";
+ QString phase = " in -";
+ if (Generator::singleExec())
+ phase += "single exec mode, ";
+ else
+ phase += "separate exec mode, ";
+ if (Generator::preparing())
+ phase += "prepare phase ";
+ else if (Generator::generating())
+ phase += "generate phase ";
QString msg = "Running qdoc for " + config.getString(CONFIG_PROJECT) + phase;
Location::logToStdErr(msg);
/*
Initialize all the classes and data structures with the
- qdoc configuration.
+ qdoc configuration. This is safe to do for each qdocconf
+ file processed, because all the data structures created
+ are either cleared after they have been used, or they
+ are cleared in the terminate() functions below.
*/
Location::initialize(config);
Tokenizer::initialize(config);
@@ -282,16 +282,32 @@ static void processQdocconfFile(const QString &fileName)
#ifndef QT_NO_TRANSLATION
/*
- Load the language translators, if the configuration specifies any.
+ Load the language translators, if the configuration specifies any,
+ but only if they haven't already been loaded. This works in both
+ -prepare/-generate mode and -singleexec mode.
*/
QStringList fileNames = config.getStringList(CONFIG_TRANSLATORS);
QStringList::ConstIterator fn = fileNames.constBegin();
while (fn != fileNames.constEnd()) {
- QTranslator *translator = new QTranslator(0);
- if (!translator->load(*fn))
- config.lastLocation().error(QCoreApplication::translate("QDoc", "Cannot load translator '%1'").arg(*fn));
- QCoreApplication::instance()->installTranslator(translator);
- translators.append(translator);
+ bool found = false;
+ if (!translators.isEmpty()) {
+ for (int i=0; i<translators.size(); ++i) {
+ if (translators.at(i).first == *fn) {
+ found = true;
+ break;
+ }
+ }
+ }
+ if (!found) {
+ QTranslator *translator = new QTranslator(0);
+ if (!translator->load(*fn)) {
+ config.lastLocation().error(QCoreApplication::translate("QDoc", "Cannot load translator '%1'").arg(*fn));
+ }
+ else {
+ QCoreApplication::instance()->installTranslator(translator);
+ translators.append(Translator(*fn, translator));
+ }
+ }
++fn;
}
#endif
@@ -311,175 +327,228 @@ static void processQdocconfFile(const QString &fileName)
will be stored. The database includes a tree of nodes, which gets
built as the source files are parsed. The documentation output is
generated by traversing that tree.
+
+ Note: qdocDB() allocates a new instance only if no instance exists.
+ So it is safe to call qdocDB() any time.
*/
QDocDatabase* qdb = QDocDatabase::qdocDB();
qdb->setVersion(config.getString(CONFIG_VERSION));
qdb->setShowInternal(config.getBool(CONFIG_SHOWINTERNAL));
+ qdb->setSingleExec(config.getBool(CONFIG_SINGLEEXEC));
/*
By default, the only output format is HTML.
*/
QSet<QString> outputFormats = config.getOutputFormats();
Location outputFormatsLocation = config.lastLocation();
- //if (!Generator::runPrepareOnly())
- Generator::debug(" loading index files");
- loadIndexFiles(config);
- qdb->newPrimaryTree(config.getString(CONFIG_PROJECT));
- qdb->setSearchOrder();
- Generator::debug(" done loading index files");
+ qdb->clearSearchOrder();
+ QString p = config.getString(CONFIG_PROJECT).toLower();
+ if (!Generator::singleExec()) {
+ Generator::debug(" loading index files");
+ loadIndexFiles(config);
+ Generator::debug(" done loading index files");
+ qdb->newPrimaryTree(p);
+ }
+ else if (Generator::preparing())
+ qdb->newPrimaryTree(p);
+ else
+ qdb->setPrimaryTree(p);
+
+ dependModules = config.getStringList(CONFIG_DEPENDS);
+ dependModules.removeDuplicates();
+ qdb->setSearchOrder(dependModules);
QSet<QString> excludedDirs;
QSet<QString> excludedFiles;
- QStringList headerList;
- QStringList sourceList;
QStringList excludedDirsList;
QStringList excludedFilesList;
- Generator::debug("Reading excludedirs");
- excludedDirsList = config.getCanonicalPathList(CONFIG_EXCLUDEDIRS);
- foreach (const QString &excludeDir, excludedDirsList) {
- QString p = QDir::fromNativeSeparators(excludeDir);
- QDir tmp(p);
- if (tmp.exists())
- excludedDirs.insert(p);
- }
+ if (!Generator::singleExec() || !Generator::generating()) {
+ QStringList headerList;
+ QStringList sourceList;
+
+ Generator::debug("Reading excludedirs");
+ excludedDirsList = config.getCanonicalPathList(CONFIG_EXCLUDEDIRS);
+ foreach (const QString &excludeDir, excludedDirsList) {
+ QString p = QDir::fromNativeSeparators(excludeDir);
+ QDir tmp(p);
+ if (tmp.exists())
+ excludedDirs.insert(p);
+ }
- Generator::debug("Reading excludefiles");
- excludedFilesList = config.getCanonicalPathList(CONFIG_EXCLUDEFILES);
- foreach (const QString& excludeFile, excludedFilesList) {
- QString p = QDir::fromNativeSeparators(excludeFile);
- excludedFiles.insert(p);
- }
+ Generator::debug("Reading excludefiles");
+ excludedFilesList = config.getCanonicalPathList(CONFIG_EXCLUDEFILES);
+ foreach (const QString& excludeFile, excludedFilesList) {
+ QString p = QDir::fromNativeSeparators(excludeFile);
+ excludedFiles.insert(p);
+ }
- Generator::debug("Reading headerdirs");
- headerList = config.getAllFiles(CONFIG_HEADERS,CONFIG_HEADERDIRS,excludedDirs,excludedFiles);
- QMap<QString,QString> headers;
- QMultiMap<QString,QString> headerFileNames;
- for (int i=0; i<headerList.size(); ++i) {
- if (headerList[i].contains(QString("doc/snippets")))
- continue;
- if (headers.contains(headerList[i]))
- continue;
- headers.insert(headerList[i],headerList[i]);
- QString t = headerList[i].mid(headerList[i].lastIndexOf('/')+1);
- headerFileNames.insert(t,t);
- }
+ Generator::debug("Reading headerdirs");
+ headerList = config.getAllFiles(CONFIG_HEADERS,CONFIG_HEADERDIRS,excludedDirs,excludedFiles);
+ QMap<QString,QString> headers;
+ QMultiMap<QString,QString> headerFileNames;
+ for (int i=0; i<headerList.size(); ++i) {
+ if (headerList[i].contains(QString("doc/snippets")))
+ continue;
+ if (headers.contains(headerList[i]))
+ continue;
+ headers.insert(headerList[i],headerList[i]);
+ QString t = headerList[i].mid(headerList[i].lastIndexOf('/')+1);
+ headerFileNames.insert(t,t);
+ }
- Generator::debug("Reading sourcedirs");
- sourceList = config.getAllFiles(CONFIG_SOURCES,CONFIG_SOURCEDIRS,excludedDirs,excludedFiles);
- QMap<QString,QString> sources;
- QMultiMap<QString,QString> sourceFileNames;
- for (int i=0; i<sourceList.size(); ++i) {
- if (sourceList[i].contains(QString("doc/snippets")))
- continue;
- if (sources.contains(sourceList[i]))
- continue;
- sources.insert(sourceList[i],sourceList[i]);
- QString t = sourceList[i].mid(sourceList[i].lastIndexOf('/')+1);
- sourceFileNames.insert(t,t);
- }
- /*
- Find all the qdoc files in the example dirs, and add
- them to the source files to be parsed.
- */
- Generator::debug("Reading exampledirs");
- QStringList exampleQdocList = config.getExampleQdocFiles(excludedDirs, excludedFiles);
- for (int i=0; i<exampleQdocList.size(); ++i) {
- if (!sources.contains(exampleQdocList[i])) {
- sources.insert(exampleQdocList[i],exampleQdocList[i]);
- QString t = exampleQdocList[i].mid(exampleQdocList[i].lastIndexOf('/')+1);
+ Generator::debug("Reading sourcedirs");
+ sourceList = config.getAllFiles(CONFIG_SOURCES,CONFIG_SOURCEDIRS,excludedDirs,excludedFiles);
+ QMap<QString,QString> sources;
+ QMultiMap<QString,QString> sourceFileNames;
+ for (int i=0; i<sourceList.size(); ++i) {
+ if (sourceList[i].contains(QString("doc/snippets")))
+ continue;
+ if (sources.contains(sourceList[i]))
+ continue;
+ sources.insert(sourceList[i],sourceList[i]);
+ QString t = sourceList[i].mid(sourceList[i].lastIndexOf('/')+1);
sourceFileNames.insert(t,t);
}
- }
+ /*
+ Find all the qdoc files in the example dirs, and add
+ them to the source files to be parsed.
+ */
+ Generator::debug("Reading exampledirs");
+ QStringList exampleQdocList = config.getExampleQdocFiles(excludedDirs, excludedFiles);
+ for (int i=0; i<exampleQdocList.size(); ++i) {
+ if (!sources.contains(exampleQdocList[i])) {
+ sources.insert(exampleQdocList[i],exampleQdocList[i]);
+ QString t = exampleQdocList[i].mid(exampleQdocList[i].lastIndexOf('/')+1);
+ sourceFileNames.insert(t,t);
+ }
+ }
- Generator::debug("Adding doc/image dirs found in exampledirs to imagedirs");
- QSet<QString> exampleImageDirs;
- QStringList exampleImageList = config.getExampleImageFiles(excludedDirs, excludedFiles);
- for (int i=0; i<exampleImageList.size(); ++i) {
- if (exampleImageList[i].contains("doc/images")) {
- QString t = exampleImageList[i].left(exampleImageList[i].lastIndexOf("doc/images")+10);
- if (!exampleImageDirs.contains(t)) {
- exampleImageDirs.insert(t);
+ Generator::debug("Adding doc/image dirs found in exampledirs to imagedirs");
+ QSet<QString> exampleImageDirs;
+ QStringList exampleImageList = config.getExampleImageFiles(excludedDirs, excludedFiles);
+ for (int i=0; i<exampleImageList.size(); ++i) {
+ if (exampleImageList[i].contains("doc/images")) {
+ QString t = exampleImageList[i].left(exampleImageList[i].lastIndexOf("doc/images")+10);
+ if (!exampleImageDirs.contains(t)) {
+ exampleImageDirs.insert(t);
+ }
}
}
- }
- Generator::augmentImageDirs(exampleImageDirs);
+ Generator::augmentImageDirs(exampleImageDirs);
+
+ /*
+ Parse each header file in the set using the appropriate parser and add it
+ to the big tree.
+ */
+ QSet<CodeParser *> usedParsers;
+
+ Generator::debug("Parsing header files");
+ int parsed = 0;
+ QMap<QString,QString>::ConstIterator h = headers.constBegin();
+ while (h != headers.constEnd()) {
+ CodeParser *codeParser = CodeParser::parserForHeaderFile(h.key());
+ if (codeParser) {
+ ++parsed;
+ Generator::debug(QString("Parsing " + h.key()));
+ codeParser->parseHeaderFile(config.location(), h.key());
+ usedParsers.insert(codeParser);
+ }
+ ++h;
+ }
- /*
- Parse each header file in the set using the appropriate parser and add it
- to the big tree.
- */
- QSet<CodeParser *> usedParsers;
-
- Generator::debug("Parsing header files");
- int parsed = 0;
- QMap<QString,QString>::ConstIterator h = headers.constBegin();
- while (h != headers.constEnd()) {
- CodeParser *codeParser = CodeParser::parserForHeaderFile(h.key());
- if (codeParser) {
- ++parsed;
- Generator::debug(QString("Parsing " + h.key()));
- codeParser->parseHeaderFile(config.location(), h.key());
- usedParsers.insert(codeParser);
+ foreach (CodeParser *codeParser, usedParsers)
+ codeParser->doneParsingHeaderFiles();
+
+ usedParsers.clear();
+ qdb->resolveInheritance();
+
+ /*
+ Parse each source text file in the set using the appropriate parser and
+ add it to the big tree.
+ */
+ parsed = 0;
+ Generator::debug("Parsing source files");
+ QMap<QString,QString>::ConstIterator s = sources.constBegin();
+ while (s != sources.constEnd()) {
+ CodeParser *codeParser = CodeParser::parserForSourceFile(s.key());
+ if (codeParser) {
+ ++parsed;
+ Generator::debug(QString("Parsing " + s.key()));
+ codeParser->parseSourceFile(config.location(), s.key());
+ usedParsers.insert(codeParser);
+ }
+ ++s;
}
- ++h;
+ Generator::debug(QString("Parsing done."));
+
+ foreach (CodeParser *codeParser, usedParsers)
+ codeParser->doneParsingSourceFiles();
+
+ /*
+ Now the primary tree has been built from all the header and
+ source files. Resolve all the class names, function names,
+ targets, URLs, links, and other stuff that needs resolving.
+ */
+ Generator::debug("Resolving stuff prior to generating docs");
+ qdb->resolveIssues();
}
+ else {
+ Generator::debug("Reading excludedirs");
+ excludedDirsList = config.getCanonicalPathList(CONFIG_EXCLUDEDIRS);
+ foreach (const QString &excludeDir, excludedDirsList) {
+ QString p = QDir::fromNativeSeparators(excludeDir);
+ QDir tmp(p);
+ if (tmp.exists())
+ excludedDirs.insert(p);
+ }
- foreach (CodeParser *codeParser, usedParsers)
- codeParser->doneParsingHeaderFiles();
-
- usedParsers.clear();
- qdb->resolveInheritance();
+ Generator::debug("Reading excludefiles");
+ excludedFilesList = config.getCanonicalPathList(CONFIG_EXCLUDEFILES);
+ foreach (const QString& excludeFile, excludedFilesList) {
+ QString p = QDir::fromNativeSeparators(excludeFile);
+ excludedFiles.insert(p);
+ }
- /*
- Parse each source text file in the set using the appropriate parser and
- add it to the big tree.
- */
- parsed = 0;
- Generator::debug("Parsing source files");
- QMap<QString,QString>::ConstIterator s = sources.constBegin();
- while (s != sources.constEnd()) {
- CodeParser *codeParser = CodeParser::parserForSourceFile(s.key());
- if (codeParser) {
- ++parsed;
- Generator::debug(QString("Parsing " + s.key()));
- codeParser->parseSourceFile(config.location(), s.key());
- usedParsers.insert(codeParser);
+ Generator::debug("Adding doc/image dirs found in exampledirs to imagedirs");
+ QSet<QString> exampleImageDirs;
+ QStringList exampleImageList = config.getExampleImageFiles(excludedDirs, excludedFiles);
+ for (int i=0; i<exampleImageList.size(); ++i) {
+ if (exampleImageList[i].contains("doc/images")) {
+ QString t = exampleImageList[i].left(exampleImageList[i].lastIndexOf("doc/images")+10);
+ if (!exampleImageDirs.contains(t)) {
+ exampleImageDirs.insert(t);
+ }
+ }
}
- ++s;
+ Generator::augmentImageDirs(exampleImageDirs);
+ qdb->resolveStuff();
}
- Generator::debug(QString("Parsing done."));
-
- foreach (CodeParser *codeParser, usedParsers)
- codeParser->doneParsingSourceFiles();
/*
- Now the big tree has been built from all the header and
- source files. Resolve all the class names, function names,
- targets, URLs, links, and other stuff that needs resolving.
- */
- Generator::debug("Resolving stuff prior to generating docs");
- qdb->resolveIssues();
-
- /*
- The tree is built and all the stuff that needed resolving
- has been resolved. Now traverse the tree and generate the
- documentation output. More than one output format can be
- requested. The tree is traversed for each one.
+ The primary tree is built and all the stuff that needed
+ resolving has been resolved. Now traverse the tree and
+ generate the documentation output. More than one output
+ format can be requested. The tree is traversed for each
+ one.
*/
Generator::debug("Generating docs");
QSet<QString>::ConstIterator of = outputFormats.constBegin();
while (of != outputFormats.constEnd()) {
Generator* generator = Generator::generatorForFormat(*of);
if (generator == 0)
- outputFormatsLocation.fatal(QCoreApplication::translate("QDoc", "Unknown output format '%1'").arg(*of));
+ outputFormatsLocation.fatal(QCoreApplication::translate("QDoc",
+ "Unknown output format '%1'").arg(*of));
generator->generateDocs();
++of;
}
+#if 0
+ if (Generator::generating() && Generator::writeQaPages())
+ qdb->printLinkCounts(project);
+#endif
+ qdb->clearLinkCounts();
-
- //Generator::writeOutFileNames();
- Generator::debug("Shutting down qdoc");
+ Generator::debug("Terminating qdoc classes");
if (Generator::debugging())
Generator::stopDebugging(project);
@@ -492,17 +561,7 @@ static void processQdocconfFile(const QString &fileName)
Location::terminate();
QDir::setCurrent(prevCurrentDir);
-#ifndef QT_NO_TRANSLATION
- qDeleteAll(translators);
-#endif
-#ifdef DEBUG_SHUTDOWN_CRASH
- qDebug() << "main(): Delete qdoc database";
-#endif
- QDocDatabase::destroyQdocDB();
-#ifdef DEBUG_SHUTDOWN_CRASH
- qDebug() << "main(): qdoc database deleted";
-#endif
- Generator::debug("qdoc finished!");
+ Generator::debug("qdoc classes terminated");
}
extern Q_CORE_EXPORT QBasicAtomicInt qt_qhash_seed;
@@ -621,12 +680,22 @@ int main(int argc, char **argv)
logProgressOption.setDescription(QCoreApplication::translate("qdoc", "Log progress on stderr."));
parser.addOption(logProgressOption);
+ QCommandLineOption singleExecOption(QStringList() << QStringLiteral("single-exec"));
+ singleExecOption.setDescription(QCoreApplication::translate("qdoc", "Run qdoc once over all the qdoc conf files."));
+ parser.addOption(singleExecOption);
+
+ QCommandLineOption writeQaPagesOption(QStringList() << QStringLiteral("write-qa-pages"));
+ writeQaPagesOption.setDescription(QCoreApplication::translate("qdoc", "Write QA pages."));
+ parser.addOption(writeQaPagesOption);
+
parser.process(app);
defines += parser.values(defineOption);
dependModules += parser.values(dependsOption);
highlighting = parser.isSet(highlightingOption);
showInternal = parser.isSet(showInternalOption);
+ singleExec = parser.isSet(singleExecOption);
+ writeQaPages = parser.isSet(writeQaPagesOption);
redirectDocumentationToDevNull = parser.isSet(redirectDocumentationToDevNullOption);
Config::generateExamples = !parser.isSet(noExamplesOption);
foreach (const QString &indexDir, parser.values(indexDirOption)) {
@@ -650,21 +719,73 @@ int main(int argc, char **argv)
Generator::setQDocPass(Generator::Prepare);
if (parser.isSet(generateOption))
Generator::setQDocPass(Generator::Generate);
+ if (parser.isSet(singleExecOption))
+ Generator::setSingleExec();
+ if (parser.isSet(writeQaPagesOption))
+ Generator::setWriteQaPages();
if (parser.isSet(logProgressOption))
Location::startLoggingProgress();
- const QStringList qdocFiles = parser.positionalArguments();
+ /*
+ The default indent for code is 4.
+ The default value for false is 0.
+ The default supported file extensions are cpp, h, qdoc and qml.
+ The default language is c++.
+ The default output format is html.
+ The default tab size is 8.
+ And those are all the default values for configuration variables.
+ */
+ if (defaults.isEmpty()) {
+ defaults.insert(CONFIG_CODEINDENT, QLatin1String("4"));
+ defaults.insert(CONFIG_FALSEHOODS, QLatin1String("0"));
+ defaults.insert(CONFIG_FILEEXTENSIONS, QLatin1String("*.cpp *.h *.qdoc *.qml"));
+ defaults.insert(CONFIG_LANGUAGE, QLatin1String("Cpp"));
+ defaults.insert(CONFIG_OUTPUTFORMATS, QLatin1String("HTML"));
+ defaults.insert(CONFIG_TABSIZE, QLatin1String("8"));
+ }
+
+ QStringList qdocFiles = parser.positionalArguments();
if (qdocFiles.isEmpty())
parser.showHelp();
+ if (singleExec)
+ qdocFiles = Config::loadMaster(qdocFiles.at(0));
+
/*
- Main loop.
+ Main loop is now modified to handle single exec mode.
*/
+ if (Generator::singleExec())
+ Generator::setQDocPass(Generator::Prepare);
foreach (const QString &qf, qdocFiles) {
- //qDebug() << "PROCESSING:" << qf;
+ dependModules.clear();
processQdocconfFile(qf);
}
+ if (Generator::singleExec()) {
+ Generator::setQDocPass(Generator::Generate);
+ QDocDatabase* qdb = QDocDatabase::qdocDB();
+ qdb->processForest();
+ foreach (const QString &qf, qdocFiles) {
+ dependModules.clear();
+ processQdocconfFile(qf);
+ }
+ }
+
+#ifndef QT_NO_TRANSLATION
+ if (!translators.isEmpty()) {
+ for (int i=0; i<translators.size(); ++i) {
+ delete translators.at(i).second;
+ }
+ }
+ translators.clear();
+#endif
+
+#ifdef DEBUG_SHUTDOWN_CRASH
+ qDebug() << "main(): Delete qdoc database";
+#endif
+ QDocDatabase::destroyQdocDB();
+#ifdef DEBUG_SHUTDOWN_CRASH
+ qDebug() << "main(): qdoc database deleted";
+#endif
return EXIT_SUCCESS;
}
-
diff --git a/src/tools/qdoc/node.cpp b/src/tools/qdoc/node.cpp
index ce655efef6..f012aae87a 100644
--- a/src/tools/qdoc/node.cpp
+++ b/src/tools/qdoc/node.cpp
@@ -218,7 +218,7 @@ Node::Node(Type type, InnerNode *parent, const QString& name)
{
if (parent_)
parent_->addChild(this);
- outSubDir_ = CodeParser::currentOutputSubdirectory();
+ outSubDir_ = Generator::outputSubdir();
if (operators_.isEmpty()) {
operators_.insert("++","inc");
operators_.insert("--","dec");
diff --git a/src/tools/qdoc/node.h b/src/tools/qdoc/node.h
index e25bbd7a4a..811c9400de 100644
--- a/src/tools/qdoc/node.h
+++ b/src/tools/qdoc/node.h
@@ -359,7 +359,7 @@ public:
//Node* findChildNode(const QString& name, bool qml) const;
Node* findChildNode(const QString& name, Type type);
//void findNodes(const QString& name, NodeList& n);
- virtual void findChildren(const QString& name, NodeList& nodes) const;
+ virtual void findChildren(const QString& name, NodeList& nodes) const Q_DECL_OVERRIDE;
FunctionNode* findFunctionNode(const QString& name) const;
FunctionNode* findFunctionNode(const FunctionNode* clone);
void addInclude(const QString &include);
@@ -370,8 +370,8 @@ public:
void deleteChildren();
void removeFromRelated();
- virtual bool isInnerNode() const { return true; }
- virtual bool isLeaf() const { return false; }
+ virtual bool isInnerNode() const Q_DECL_OVERRIDE { return true; }
+ virtual bool isLeaf() const Q_DECL_OVERRIDE { return false; }
const EnumNode* findEnumNodeForValue(const QString &enumValue) const;
const NodeList & childNodes() const { return children_; }
const NodeList & relatedNodes() const { return related_; }
@@ -384,14 +384,14 @@ public:
QStringList primaryKeys();
QStringList secondaryKeys();
const QStringList& pageKeywords() const { return pageKeywds; }
- virtual void addPageKeywords(const QString& t) { pageKeywds << t; }
- virtual void setOutputFileName(const QString& f) { outputFileName_ = f; }
- virtual QString outputFileName() const { return outputFileName_; }
- virtual QmlPropertyNode* hasQmlProperty(const QString& ) const;
- virtual QmlPropertyNode* hasQmlProperty(const QString&, bool attached) const;
+ virtual void addPageKeywords(const QString& t) Q_DECL_OVERRIDE { pageKeywds << t; }
+ virtual void setOutputFileName(const QString& f) Q_DECL_OVERRIDE { outputFileName_ = f; }
+ virtual QString outputFileName() const Q_DECL_OVERRIDE { return outputFileName_; }
+ virtual QmlPropertyNode* hasQmlProperty(const QString& ) const Q_DECL_OVERRIDE;
+ virtual QmlPropertyNode* hasQmlProperty(const QString&, bool attached) const Q_DECL_OVERRIDE;
void addChild(Node* child, const QString& title);
const QStringList& groupNames() const { return groupNames_; }
- virtual void appendGroupName(const QString& t) { groupNames_.append(t); }
+ virtual void appendGroupName(const QString& t) Q_DECL_OVERRIDE { groupNames_.append(t); }
void printChildren(const QString& title);
protected:
@@ -423,8 +423,8 @@ public:
LeafNode();
virtual ~LeafNode() { }
- virtual bool isInnerNode() const { return false; }
- virtual bool isLeaf() const { return true; }
+ virtual bool isInnerNode() const Q_DECL_OVERRIDE { return false; }
+ virtual bool isLeaf() const Q_DECL_OVERRIDE { return true; }
protected:
LeafNode(Type type, InnerNode* parent, const QString& name);
@@ -436,10 +436,10 @@ class NamespaceNode : public InnerNode
public:
NamespaceNode(InnerNode* parent, const QString& name);
virtual ~NamespaceNode() { }
- virtual bool isNamespace() const { return true; }
- virtual Tree* tree() const { return (parent() ? parent()->tree() : tree_); }
- virtual bool isCppNode() const { return true; }
- virtual Node::Genus genus() const { return Node::CPP; }
+ virtual bool isNamespace() const Q_DECL_OVERRIDE { return true; }
+ virtual Tree* tree() const Q_DECL_OVERRIDE { return (parent() ? parent()->tree() : tree_); }
+ virtual bool isCppNode() const Q_DECL_OVERRIDE { return true; }
+ virtual Node::Genus genus() const Q_DECL_OVERRIDE { return Node::CPP; }
void setTree(Tree* t) { tree_ = t; }
private:
@@ -469,13 +469,13 @@ class ClassNode : public InnerNode
public:
ClassNode(InnerNode* parent, const QString& name);
virtual ~ClassNode() { }
- virtual bool isClass() const { return true; }
- virtual bool isCppNode() const { return true; }
- virtual bool isWrapper() const { return wrapper_; }
- virtual Node::Genus genus() const { return Node::CPP; }
- virtual QString obsoleteLink() const { return obsoleteLink_; }
- virtual void setObsoleteLink(const QString& t) { obsoleteLink_ = t; }
- virtual void setWrapper() { wrapper_ = true; }
+ virtual bool isClass() const Q_DECL_OVERRIDE { return true; }
+ virtual bool isCppNode() const Q_DECL_OVERRIDE { return true; }
+ virtual bool isWrapper() const Q_DECL_OVERRIDE { return wrapper_; }
+ virtual Node::Genus genus() const Q_DECL_OVERRIDE { return Node::CPP; }
+ virtual QString obsoleteLink() const Q_DECL_OVERRIDE { return obsoleteLink_; }
+ virtual void setObsoleteLink(const QString& t) Q_DECL_OVERRIDE { obsoleteLink_ = t; }
+ virtual void setWrapper() Q_DECL_OVERRIDE { wrapper_ = true; }
void addResolvedBaseClass(Access access, ClassNode* node);
void addDerivedClass(Access access, ClassNode* node);
@@ -495,8 +495,8 @@ public:
void setServiceName(const QString& value) { sname = value; }
QmlClassNode* qmlElement() { return qmlelement; }
void setQmlElement(QmlClassNode* qcn) { qmlelement = qcn; }
- virtual bool isAbstract() const { return abstract_; }
- virtual void setAbstract(bool b) { abstract_ = b; }
+ virtual bool isAbstract() const Q_DECL_OVERRIDE { return abstract_; }
+ virtual void setAbstract(bool b) Q_DECL_OVERRIDE { abstract_ = b; }
PropertyNode* findPropertyNode(const QString& name);
QmlClassNode* findQmlBaseNode();
@@ -521,21 +521,21 @@ public:
PageType ptype);
virtual ~DocNode() { }
- virtual void setTitle(const QString &title);
- virtual void setSubTitle(const QString &subTitle) { subtitle_ = subTitle; }
+ virtual void setTitle(const QString &title) Q_DECL_OVERRIDE;
+ virtual void setSubTitle(const QString &subTitle) Q_DECL_OVERRIDE { subtitle_ = subTitle; }
- SubType subType() const { return nodeSubtype_; }
- virtual QString title() const { return title_; }
- virtual QString fullTitle() const;
- virtual QString subTitle() const;
+ SubType subType() const Q_DECL_OVERRIDE { return nodeSubtype_; }
+ virtual QString title() const Q_DECL_OVERRIDE { return title_; }
+ virtual QString fullTitle() const Q_DECL_OVERRIDE;
+ virtual QString subTitle() const Q_DECL_OVERRIDE;
virtual QString imageFileName() const { return QString(); }
- virtual QString nameForLists() const { return title(); }
+ virtual QString nameForLists() const Q_DECL_OVERRIDE { return title(); }
virtual void setImageFileName(const QString& ) { }
- virtual bool isHeaderFile() const { return (subType() == Node::HeaderFile); }
- virtual bool isExample() const { return (subType() == Node::Example); }
- virtual bool isExampleFile() const { return (parent() && parent()->isExample()); }
- virtual bool isExternalPage() const { return nodeSubtype_ == ExternalPage; }
- virtual bool isDocNode() const { return true; }
+ virtual bool isHeaderFile() const Q_DECL_OVERRIDE { return (subType() == Node::HeaderFile); }
+ virtual bool isExample() const Q_DECL_OVERRIDE { return (subType() == Node::Example); }
+ virtual bool isExampleFile() const Q_DECL_OVERRIDE { return (parent() && parent()->isExample()); }
+ virtual bool isExternalPage() const Q_DECL_OVERRIDE { return nodeSubtype_ == ExternalPage; }
+ virtual bool isDocNode() const Q_DECL_OVERRIDE { return true; }
protected:
SubType nodeSubtype_;
@@ -549,8 +549,8 @@ public:
ExampleNode(InnerNode* parent, const QString& name)
: DocNode(parent, name, Node::Example, Node::ExamplePage) { }
virtual ~ExampleNode() { }
- virtual QString imageFileName() const { return imageFileName_; }
- virtual void setImageFileName(const QString& ifn) { imageFileName_ = ifn; }
+ virtual QString imageFileName() const Q_DECL_OVERRIDE { return imageFileName_; }
+ virtual void setImageFileName(const QString& ifn) Q_DECL_OVERRIDE { imageFileName_ = ifn; }
private:
QString imageFileName_;
@@ -581,25 +581,25 @@ class QmlClassNode : public InnerNode
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; }
- virtual bool isAbstract() const { return abstract_; }
- virtual bool isWrapper() const { return wrapper_; }
- virtual void setAbstract(bool b) { abstract_ = b; }
- virtual void setWrapper() { wrapper_ = true; }
- 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; };
- virtual QString qmlModuleName() const;
- virtual QString qmlModuleVersion() const;
- virtual QString qmlModuleIdentifier() const;
- virtual QmlModuleNode* qmlModule() const { return qmlModule_; }
- virtual void setQmlModule(QmlModuleNode* t) { qmlModule_ = t; }
- virtual Node::Genus genus() const { return Node::QML; }
+ virtual bool isQmlNode() const Q_DECL_OVERRIDE { return true; }
+ virtual bool isQmlType() const Q_DECL_OVERRIDE { return true; }
+ virtual bool isQtQuickNode() const Q_DECL_OVERRIDE { return (qmlModuleName() == QLatin1String("QtQuick")); }
+ virtual ClassNode* classNode() Q_DECL_OVERRIDE { return cnode_; }
+ virtual void setClassNode(ClassNode* cn) Q_DECL_OVERRIDE { cnode_ = cn; }
+ virtual bool isAbstract() const Q_DECL_OVERRIDE { return abstract_; }
+ virtual bool isWrapper() const Q_DECL_OVERRIDE { return wrapper_; }
+ virtual void setAbstract(bool b) Q_DECL_OVERRIDE { abstract_ = b; }
+ virtual void setWrapper() Q_DECL_OVERRIDE { wrapper_ = true; }
+ virtual bool isInternal() const Q_DECL_OVERRIDE { return (status() == Internal); }
+ virtual QString qmlFullBaseName() const Q_DECL_OVERRIDE;
+ virtual QString obsoleteLink() const Q_DECL_OVERRIDE { return obsoleteLink_; }
+ virtual void setObsoleteLink(const QString& t) Q_DECL_OVERRIDE { obsoleteLink_ = t; };
+ virtual QString qmlModuleName() const Q_DECL_OVERRIDE;
+ virtual QString qmlModuleVersion() const Q_DECL_OVERRIDE;
+ virtual QString qmlModuleIdentifier() const Q_DECL_OVERRIDE;
+ virtual QmlModuleNode* qmlModule() const Q_DECL_OVERRIDE { return qmlModule_; }
+ virtual void setQmlModule(QmlModuleNode* t) Q_DECL_OVERRIDE { qmlModule_ = t; }
+ virtual Node::Genus genus() const Q_DECL_OVERRIDE { return Node::QML; }
const ImportList& importList() const { return importList_; }
void setImportList(const ImportList& il) { importList_ = il; }
const QString& qmlBaseName() const { return qmlBaseName_; }
@@ -635,9 +635,9 @@ public:
QmlBasicTypeNode(InnerNode* parent,
const QString& name);
virtual ~QmlBasicTypeNode() { }
- virtual bool isQmlNode() const { return true; }
- virtual bool isQmlBasicType() const { return true; }
- virtual Node::Genus genus() const { return Node::QML; }
+ virtual bool isQmlNode() const Q_DECL_OVERRIDE { return true; }
+ virtual bool isQmlBasicType() const Q_DECL_OVERRIDE { return true; }
+ virtual Node::Genus genus() const Q_DECL_OVERRIDE { return Node::QML; }
};
class QmlPropertyGroupNode : public InnerNode
@@ -645,17 +645,17 @@ class QmlPropertyGroupNode : public InnerNode
public:
QmlPropertyGroupNode(QmlClassNode* parent, const QString& name);
virtual ~QmlPropertyGroupNode() { }
- virtual bool isQmlNode() const { return true; }
- virtual bool isQtQuickNode() const { return parent()->isQtQuickNode(); }
- virtual QString qmlTypeName() const { return parent()->qmlTypeName(); }
- virtual QString qmlModuleName() const { return parent()->qmlModuleName(); }
- virtual QString qmlModuleVersion() const { return parent()->qmlModuleVersion(); }
- virtual QString qmlModuleIdentifier() const { return parent()->qmlModuleIdentifier(); }
- virtual QString idNumber();
- virtual bool isQmlPropertyGroup() const { return true; }
- virtual Node::Genus genus() const { return Node::QML; }
-
- virtual QString element() const { return parent()->name(); }
+ virtual bool isQmlNode() const Q_DECL_OVERRIDE { return true; }
+ virtual bool isQtQuickNode() const Q_DECL_OVERRIDE { return parent()->isQtQuickNode(); }
+ virtual QString qmlTypeName() const Q_DECL_OVERRIDE { return parent()->qmlTypeName(); }
+ virtual QString qmlModuleName() const Q_DECL_OVERRIDE { return parent()->qmlModuleName(); }
+ virtual QString qmlModuleVersion() const Q_DECL_OVERRIDE { return parent()->qmlModuleVersion(); }
+ virtual QString qmlModuleIdentifier() const Q_DECL_OVERRIDE { return parent()->qmlModuleIdentifier(); }
+ virtual QString idNumber() Q_DECL_OVERRIDE;
+ virtual bool isQmlPropertyGroup() const Q_DECL_OVERRIDE { return true; }
+ virtual Node::Genus genus() const Q_DECL_OVERRIDE { return Node::QML; }
+
+ virtual QString element() const Q_DECL_OVERRIDE { return parent()->name(); }
private:
int idNumber_;
@@ -672,11 +672,11 @@ public:
bool attached);
virtual ~QmlPropertyNode() { }
- virtual Node::Genus genus() const { return Node::QML; }
- virtual void setDataType(const QString& dataType) { type_ = dataType; }
+ virtual Node::Genus genus() const Q_DECL_OVERRIDE { return Node::QML; }
+ virtual void setDataType(const QString& dataType) Q_DECL_OVERRIDE { type_ = dataType; }
void setStored(bool stored) { stored_ = toFlagValue(stored); }
void setDesignable(bool designable) { designable_ = toFlagValue(designable); }
- virtual void setReadOnly(bool ro) { readOnly_ = toFlagValue(ro); }
+ virtual void setReadOnly(bool ro) Q_DECL_OVERRIDE { readOnly_ = toFlagValue(ro); }
void setDefault() { isdefault_ = true; }
const QString &dataType() const { return type_; }
@@ -685,17 +685,17 @@ public:
bool isStored() const { return fromFlagValue(stored_,true); }
bool isDesignable() const { return fromFlagValue(designable_,false); }
bool isWritable();
- virtual bool isDefault() const { return isdefault_; }
- virtual bool isReadOnly() const { return fromFlagValue(readOnly_,false); }
- virtual bool isAlias() const { return isAlias_; }
- virtual bool isAttached() const { return attached_; }
- virtual bool isQmlNode() const { return true; }
- virtual bool isQtQuickNode() const { return parent()->isQtQuickNode(); }
- virtual QString qmlTypeName() const { return parent()->qmlTypeName(); }
- virtual QString qmlModuleName() const { return parent()->qmlModuleName(); }
- virtual QString qmlModuleVersion() const { return parent()->qmlModuleVersion(); }
- virtual QString qmlModuleIdentifier() const { return parent()->qmlModuleIdentifier(); }
- virtual QString element() const;
+ virtual bool isDefault() const Q_DECL_OVERRIDE { return isdefault_; }
+ virtual bool isReadOnly() const Q_DECL_OVERRIDE { return fromFlagValue(readOnly_,false); }
+ virtual bool isAlias() const Q_DECL_OVERRIDE { return isAlias_; }
+ virtual bool isAttached() const Q_DECL_OVERRIDE { return attached_; }
+ virtual bool isQmlNode() const Q_DECL_OVERRIDE { return true; }
+ virtual bool isQtQuickNode() const Q_DECL_OVERRIDE { return parent()->isQtQuickNode(); }
+ virtual QString qmlTypeName() const Q_DECL_OVERRIDE { return parent()->qmlTypeName(); }
+ virtual QString qmlModuleName() const Q_DECL_OVERRIDE { return parent()->qmlModuleName(); }
+ virtual QString qmlModuleVersion() const Q_DECL_OVERRIDE { return parent()->qmlModuleVersion(); }
+ virtual QString qmlModuleIdentifier() const Q_DECL_OVERRIDE { return parent()->qmlModuleIdentifier(); }
+ virtual QString element() const Q_DECL_OVERRIDE;
private:
PropertyNode* findCorrespondingCppProperty();
@@ -731,8 +731,8 @@ public:
EnumNode(InnerNode* parent, const QString& name);
virtual ~EnumNode() { }
- virtual Node::Genus genus() const { return Node::CPP; }
- virtual bool isCppNode() const { return true; }
+ virtual Node::Genus genus() const Q_DECL_OVERRIDE { return Node::CPP; }
+ virtual bool isCppNode() const Q_DECL_OVERRIDE { return true; }
void addItem(const EnumItem& item);
void setFlagsType(TypedefNode* typedeff);
bool hasItem(const QString &name) const { return names.contains(name); }
@@ -754,8 +754,8 @@ public:
TypedefNode(InnerNode* parent, const QString& name);
virtual ~TypedefNode() { }
- virtual Node::Genus genus() const { return Node::CPP; }
- virtual bool isCppNode() const { return true; }
+ virtual Node::Genus genus() const Q_DECL_OVERRIDE { return Node::CPP; }
+ virtual bool isCppNode() const Q_DECL_OVERRIDE { return true; }
const EnumNode* associatedEnum() const { return ae; }
private:
@@ -842,8 +842,8 @@ public:
bool isConst() const { return con; }
bool isStatic() const { return sta; }
bool isOverload() const { return ove; }
- bool isReimp() const { return reimp; }
- bool isFunction() const { return true; }
+ bool isReimp() const Q_DECL_OVERRIDE { return reimp; }
+ bool isFunction() const Q_DECL_OVERRIDE { return true; }
int overloadNumber() const;
const QList<Parameter>& parameters() const { return params; }
QStringList parameterNames() const;
@@ -855,20 +855,20 @@ public:
QStringList reconstructParams(bool values = false) const;
QString signature(bool values = false) const;
- virtual QString element() const { return parent()->name(); }
- virtual bool isAttached() const { return attached_; }
- virtual bool isQmlNode() const {
+ virtual QString element() const Q_DECL_OVERRIDE { return parent()->name(); }
+ virtual bool isAttached() const Q_DECL_OVERRIDE { return attached_; }
+ virtual bool isQmlNode() const Q_DECL_OVERRIDE {
return ((type() == QmlSignal) ||
(type() == QmlMethod) ||
(type() == QmlSignalHandler));
}
- virtual bool isCppNode() const { return !isQmlNode(); }
- virtual Node::Genus genus() const { return (isQmlNode() ? Node::QML : Node::CPP); }
- virtual bool isQtQuickNode() const { return parent()->isQtQuickNode(); }
- virtual QString qmlTypeName() const { return parent()->qmlTypeName(); }
- virtual QString qmlModuleName() const { return parent()->qmlModuleName(); }
- virtual QString qmlModuleVersion() const { return parent()->qmlModuleVersion(); }
- virtual QString qmlModuleIdentifier() const { return parent()->qmlModuleIdentifier(); }
+ virtual bool isCppNode() const Q_DECL_OVERRIDE { return !isQmlNode(); }
+ virtual Node::Genus genus() const Q_DECL_OVERRIDE { return (isQmlNode() ? Node::QML : Node::CPP); }
+ virtual bool isQtQuickNode() const Q_DECL_OVERRIDE { return parent()->isQtQuickNode(); }
+ virtual QString qmlTypeName() const Q_DECL_OVERRIDE { return parent()->qmlTypeName(); }
+ virtual QString qmlModuleName() const Q_DECL_OVERRIDE { return parent()->qmlModuleName(); }
+ virtual QString qmlModuleVersion() const Q_DECL_OVERRIDE { return parent()->qmlModuleVersion(); }
+ virtual QString qmlModuleIdentifier() const Q_DECL_OVERRIDE { return parent()->qmlModuleIdentifier(); }
void debug() const;
@@ -902,9 +902,9 @@ public:
PropertyNode(InnerNode* parent, const QString& name);
virtual ~PropertyNode() { }
- virtual Node::Genus genus() const { return Node::CPP; }
- virtual bool isCppNode() const { return true; }
- virtual void setDataType(const QString& dataType) { type_ = dataType; }
+ virtual Node::Genus genus() const Q_DECL_OVERRIDE { return Node::CPP; }
+ virtual bool isCppNode() const Q_DECL_OVERRIDE { return true; }
+ virtual void setDataType(const QString& dataType) Q_DECL_OVERRIDE { type_ = dataType; }
void addFunction(FunctionNode* function, FunctionRole role);
void addSignal(FunctionNode* function, FunctionRole role);
void setStored(bool stored) { stored_ = toFlagValue(stored); }
@@ -991,8 +991,8 @@ public:
VariableNode(InnerNode* parent, const QString &name);
virtual ~VariableNode() { }
- virtual Node::Genus genus() const { return Node::CPP; }
- virtual bool isCppNode() const { return true; }
+ virtual Node::Genus genus() const Q_DECL_OVERRIDE { return Node::CPP; }
+ virtual bool isCppNode() const Q_DECL_OVERRIDE { return true; }
void setLeftType(const QString &leftType) { lt = leftType; }
void setRightType(const QString &rightType) { rt = rightType; }
void setStatic(bool statique) { sta = statique; }
@@ -1033,20 +1033,20 @@ class CollectionNode : public InnerNode
}
virtual ~CollectionNode() { }
- virtual bool isCollectionNode() const { return true; }
- virtual void addMember(Node* node);
- virtual bool hasMembers() const;
- virtual bool hasNamespaces() const;
- virtual bool hasClasses() const;
- virtual void getMemberNamespaces(NodeMap& out);
- virtual void getMemberClasses(NodeMap& out);
- virtual bool wasSeen() const { return seen_; }
- virtual QString title() const { return title_; }
- virtual QString subTitle() const { return subtitle_; }
- virtual QString fullTitle() const { return title_; }
- virtual QString nameForLists() const { return title_; }
- virtual void setTitle(const QString &title);
- virtual void setSubTitle(const QString &subTitle) { subtitle_ = subTitle; }
+ virtual bool isCollectionNode() const Q_DECL_OVERRIDE { return true; }
+ virtual void addMember(Node* node) Q_DECL_OVERRIDE;
+ virtual bool hasMembers() const Q_DECL_OVERRIDE;
+ virtual bool hasNamespaces() const Q_DECL_OVERRIDE;
+ virtual bool hasClasses() const Q_DECL_OVERRIDE;
+ virtual void getMemberNamespaces(NodeMap& out) Q_DECL_OVERRIDE;
+ virtual void getMemberClasses(NodeMap& out) Q_DECL_OVERRIDE;
+ virtual bool wasSeen() const Q_DECL_OVERRIDE { return seen_; }
+ virtual QString title() const Q_DECL_OVERRIDE { return title_; }
+ virtual QString subTitle() const Q_DECL_OVERRIDE { return subtitle_; }
+ virtual QString fullTitle() const Q_DECL_OVERRIDE { return title_; }
+ virtual QString nameForLists() const Q_DECL_OVERRIDE { return title_; }
+ virtual void setTitle(const QString &title) Q_DECL_OVERRIDE;
+ virtual void setSubTitle(const QString &subTitle) Q_DECL_OVERRIDE { subtitle_ = subTitle; }
const NodeList& members() const { return members_; }
void printMembers(const QString& title);
@@ -1068,7 +1068,7 @@ class GroupNode : public CollectionNode
: CollectionNode(Node::Group, parent, name) { }
virtual ~GroupNode() { }
- virtual bool isGroup() const { return true; }
+ virtual bool isGroup() const Q_DECL_OVERRIDE { return true; }
};
class ModuleNode : public CollectionNode
@@ -1078,10 +1078,10 @@ class ModuleNode : public CollectionNode
: CollectionNode(Node::Module, parent, name) { }
virtual ~ModuleNode() { }
- virtual bool isModule() const { return true; }
- virtual bool isCppNode() const { return true; }
- virtual void setQtVariable(const QString& v) { qtVariable_ = v; }
- virtual QString qtVariable() const { return qtVariable_; }
+ virtual bool isModule() const Q_DECL_OVERRIDE { return true; }
+ virtual bool isCppNode() const Q_DECL_OVERRIDE { return true; }
+ virtual void setQtVariable(const QString& v) Q_DECL_OVERRIDE { qtVariable_ = v; }
+ virtual QString qtVariable() const Q_DECL_OVERRIDE { return qtVariable_; }
private:
QString qtVariable_;
@@ -1094,18 +1094,18 @@ class QmlModuleNode : public CollectionNode
: CollectionNode(Node::QmlModule, parent, name) { }
virtual ~QmlModuleNode() { }
- virtual bool isQmlNode() const { return true; }
- virtual bool isQmlModule() const { return true; }
- virtual QString qmlModuleName() const { return qmlModuleName_; }
- virtual QString qmlModuleVersion() const {
+ virtual bool isQmlNode() const Q_DECL_OVERRIDE { return true; }
+ virtual bool isQmlModule() const Q_DECL_OVERRIDE { return true; }
+ virtual QString qmlModuleName() const Q_DECL_OVERRIDE { return qmlModuleName_; }
+ virtual QString qmlModuleVersion() const Q_DECL_OVERRIDE {
return qmlModuleVersionMajor_ + "." + qmlModuleVersionMinor_;
}
- virtual QString qmlModuleIdentifier() const {
+ virtual QString qmlModuleIdentifier() const Q_DECL_OVERRIDE {
return qmlModuleName_ + qmlModuleVersionMajor_;
}
- virtual void setQmlModuleInfo(const QString& );
- virtual void setQtVariable(const QString& v) { qtVariable_ = v; }
- virtual QString qtVariable() const { return qtVariable_; }
+ virtual void setQmlModuleInfo(const QString& ) Q_DECL_OVERRIDE;
+ virtual void setQtVariable(const QString& v) Q_DECL_OVERRIDE { qtVariable_ = v; }
+ virtual QString qtVariable() const Q_DECL_OVERRIDE { return qtVariable_; }
private:
QString qmlModuleName_;
diff --git a/src/tools/qdoc/plaincodemarker.h b/src/tools/qdoc/plaincodemarker.h
index df6beebd03..2fb97c443d 100644
--- a/src/tools/qdoc/plaincodemarker.h
+++ b/src/tools/qdoc/plaincodemarker.h
@@ -48,20 +48,20 @@ public:
PlainCodeMarker();
~PlainCodeMarker();
- bool recognizeCode( const QString& code );
- bool recognizeExtension( const QString& ext );
- bool recognizeLanguage( const QString& lang );
- Atom::Type atomType() const;
- QString markedUpCode( const QString& code, const Node *relative, const Location &location );
+ bool recognizeCode( const QString& code ) Q_DECL_OVERRIDE;
+ bool recognizeExtension( const QString& ext ) Q_DECL_OVERRIDE;
+ bool recognizeLanguage( const QString& lang ) Q_DECL_OVERRIDE;
+ Atom::Type atomType() const Q_DECL_OVERRIDE;
+ QString markedUpCode( const QString& code, const Node *relative, const Location &location ) Q_DECL_OVERRIDE;
QString markedUpSynopsis( const Node *node, const Node *relative,
- SynopsisStyle style );
- QString markedUpName( const Node *node );
- QString markedUpFullName( const Node *node, const Node *relative );
- QString markedUpEnumValue(const QString &enumValue, const Node *relative);
- QString markedUpIncludes( const QStringList& includes );
- QString functionBeginRegExp( const QString& funcName );
- QString functionEndRegExp( const QString& funcName );
- QList<Section> sections(const InnerNode *innerNode, SynopsisStyle style, Status status);
+ SynopsisStyle style ) Q_DECL_OVERRIDE;
+ QString markedUpName( const Node *node ) Q_DECL_OVERRIDE;
+ QString markedUpFullName( const Node *node, const Node *relative ) Q_DECL_OVERRIDE;
+ QString markedUpEnumValue(const QString &enumValue, const Node *relative) Q_DECL_OVERRIDE;
+ QString markedUpIncludes( const QStringList& includes ) Q_DECL_OVERRIDE;
+ QString functionBeginRegExp( const QString& funcName ) Q_DECL_OVERRIDE;
+ QString functionEndRegExp( const QString& funcName ) Q_DECL_OVERRIDE;
+ QList<Section> sections(const InnerNode *innerNode, SynopsisStyle style, Status status) Q_DECL_OVERRIDE;
};
QT_END_NAMESPACE
diff --git a/src/tools/qdoc/puredocparser.h b/src/tools/qdoc/puredocparser.h
index e6a4eca9d8..4100b50e2d 100644
--- a/src/tools/qdoc/puredocparser.h
+++ b/src/tools/qdoc/puredocparser.h
@@ -57,8 +57,8 @@ public:
PureDocParser();
virtual ~PureDocParser();
- virtual QStringList sourceFileNameFilter();
- virtual void parseSourceFile(const Location& location, const QString& filePath);
+ virtual QStringList sourceFileNameFilter() Q_DECL_OVERRIDE;
+ virtual void parseSourceFile(const Location& location, const QString& filePath) Q_DECL_OVERRIDE;
private:
bool processQdocComments();
diff --git a/src/tools/qdoc/qdocdatabase.cpp b/src/tools/qdoc/qdocdatabase.cpp
index 36dd05bb92..51908bc9e3 100644
--- a/src/tools/qdoc/qdocdatabase.cpp
+++ b/src/tools/qdoc/qdocdatabase.cpp
@@ -128,142 +128,54 @@ Tree* QDocForest::nextTree()
*/
/*!
+ Finds the tree for module \a t in the forest and
+ sets the primary tree to be that tree. After the
+ primary tree is set, that tree is removed from the
+ forest.
+
+ \node It gets re-inserted into the forest after the
+ search order is built.
+ */
+void QDocForest::setPrimaryTree(const QString& t)
+{
+ primaryTree_ = findTree(t);
+ forest_.remove(t);
+ if (!primaryTree_)
+ qDebug() << "ERROR: Could not set primary tree to:" << t;
+}
+
+/*!
If the search order array is empty, create the search order.
If the search order array is not empty, do nothing.
*/
-void QDocForest::setSearchOrder()
+void QDocForest::setSearchOrder(QStringList& t)
{
if (!searchOrder_.isEmpty())
return;
- QString primaryName = primaryTree()->moduleName();
- searchOrder_.clear();
+
+ /* Allocate space for the search order. */
searchOrder_.reserve(forest_.size()+1);
+ searchOrder_.clear();
moduleNames_.reserve(forest_.size()+1);
+ moduleNames_.clear();
+
+ /* The primary tree is always first in the search order. */
+ QString primaryName = primaryTree()->moduleName();
searchOrder_.append(primaryTree_);
moduleNames_.append(primaryName);
+ forest_.remove(primaryName);
+
QMap<QString, Tree*>::iterator i;
- if (primaryName != "QtCore") {
- i = forest_.find("QtCore");
- if (i != forest_.end()) {
- searchOrder_.append(i.value());
- moduleNames_.append("QtCore");
- forest_.erase(i);
- }
- }
- if (primaryName != "QtGui") {
- i = forest_.find("QtGui");
- if (i != forest_.end()) {
- searchOrder_.append(i.value());
- moduleNames_.append("QtGui");
- forest_.erase(i);
- }
- }
- if (primaryName != "QtNetwork") {
- i = forest_.find("QtNetwork");
- if (i != forest_.end()) {
- searchOrder_.append(i.value());
- moduleNames_.append("QtNetwork");
- forest_.erase(i);
- }
- }
- if (primaryName != "QtOpenGL") {
- i = forest_.find("QtOpenGL");
- if (i != forest_.end()) {
- searchOrder_.append(i.value());
- moduleNames_.append("QtOpenGL");
- forest_.erase(i);
- }
- }
- if (primaryName != "QtWidgets") {
- i = forest_.find("QtWidgets");
- if (i != forest_.end()) {
- searchOrder_.append(i.value());
- moduleNames_.append("QtWidgets");
- forest_.erase(i);
- }
- }
- if (primaryName != "QtSql") {
- i = forest_.find("QtSql");
- if (i != forest_.end()) {
- searchOrder_.append(i.value());
- moduleNames_.append("QtSql");
- forest_.erase(i);
- }
- }
- if (primaryName != "QtXml") {
- i = forest_.find("QtXml");
- if (i != forest_.end()) {
- searchOrder_.append(i.value());
- moduleNames_.append("QtXml");
- forest_.erase(i);
- }
- }
- if (primaryName != "QtSvg") {
- i = forest_.find("QtSvg");
- if (i != forest_.end()) {
- searchOrder_.append(i.value());
- moduleNames_.append("QtSvg");
- forest_.erase(i);
- }
- }
- if (primaryName != "QtDoc") {
- i = forest_.find("QtDoc");
- if (i != forest_.end()) {
- searchOrder_.append(i.value());
- moduleNames_.append("QtDoc");
- forest_.erase(i);
- }
- }
- if (primaryName != "QtQuick") {
- i = forest_.find("QtQuick");
- if (i != forest_.end()) {
- searchOrder_.append(i.value());
- moduleNames_.append("QtQuick");
- forest_.erase(i);
- }
- }
- if (primaryName != "QtQml") {
- i = forest_.find("QtQml");
- if (i != forest_.end()) {
- searchOrder_.append(i.value());
- moduleNames_.append("QtQml");
- forest_.erase(i);
- }
- }
- if (primaryName != "QtPrintSupport") {
- i = forest_.find("QtPrintSupport");
- if (i != forest_.end()) {
- searchOrder_.append(i.value());
- moduleNames_.append("QtPrintSupport");
- forest_.erase(i);
- }
- }
- if (primaryName != "QtGraphicalEffects") {
- i = forest_.find("QtGraphicalEffects");
- if (i != forest_.end()) {
- searchOrder_.append(i.value());
- moduleNames_.append("QtGraphicalEffects");
- forest_.erase(i);
- }
- }
- if (primaryName != "QtConcurrent") {
- i = forest_.find("QtConcurrent");
- if (i != forest_.end()) {
- searchOrder_.append(i.value());
- moduleNames_.append("QtConcurrent");
- forest_.erase(i);
- }
- }
-#if 0
- if (primaryName != "zzz") {
- i = forest_.find("zzz");
- if (i != forest_.end()) {
- searchOrder_.append(i.value());
- moduleNames_.append("zzz");
- forest_.erase(i);
+ foreach (QString m, t) {
+ if (primaryName != m) {
+ i = forest_.find(m);
+ if (i != forest_.end()) {
+ searchOrder_.append(i.value());
+ moduleNames_.append(m);
+ forest_.remove(m);
+ }
}
}
-#endif
/*
If any trees remain in the forest, just add them
to the search order sequentially, because we don't
@@ -283,15 +195,21 @@ void QDocForest::setSearchOrder()
Rebuild the forest after constructing the search order.
It was destroyed during construction of the search order,
but it is needed for module-specific searches.
+
+ Note that this loop also inserts the primary tree into the
+ forrest. That is a requirement.
*/
for (int i=0; i<searchOrder_.size(); ++i) {
- forest_.insert(moduleNames_.at(i).toLower(), searchOrder_.at(i));
+ if (!forest_.contains(moduleNames_.at(i))) {
+ forest_.insert(moduleNames_.at(i), searchOrder_.at(i));
+ }
}
-
#if 0
- qDebug() << " SEARCH ORDER:";
+ qDebug() << " SEARCH ORDER:";
for (int i=0; i<moduleNames_.size(); ++i)
- qDebug() << " " << i+1 << "." << moduleNames_.at(i);
+ qDebug() << " " << i+1 << "." << moduleNames_.at(i);
+ qDebug() << " FOREST:" << forest_.keys();
+ qDebug() << "SEARCH ORDER:" << moduleNames_;
#endif
}
@@ -363,7 +281,7 @@ NamespaceNode* QDocForest::newIndexTree(const QString& module)
/*!
Create a new Tree for use as the primary tree. This tree
- will represent the primary module.
+ will represent the primary module. \a module is camel case.
*/
void QDocForest::newPrimaryTree(const QString& module)
{
@@ -431,6 +349,61 @@ void QDocForest::mergeCollectionMaps(Node::Type nt, CNMultiMap& cnmm)
}
}
+/*!
+ Print the list of module names ordered according
+ to how many successful searches each tree had.
+ */
+void QDocForest::printLinkCounts(const QString& project)
+{
+ Location::null.report(QString("%1: Link Counts").arg(project));
+ QMultiMap<int, QString> m;
+ foreach (Tree* t, searchOrder()) {
+ if (t->linkCount() < 0)
+ m.insert(t->linkCount(), t->moduleName());
+ }
+ QString depends = "depends +=";
+ QString module = project.toLower();
+ QMultiMap<int, QString>::iterator i = m.begin();
+ while (i != m.end()) {
+ QString line = " " + i.value();
+ if (i.value() != module)
+ depends += " " + i.value();
+ int pad = 30 - line.length();
+ for (int k=0; k<pad; ++k)
+ line += " ";
+ line += "%1";
+ Location::null.report(line.arg(-(i.key())));
+ ++i;
+ }
+ Location::null.report("Optimal depends variable:");
+ Location::null.report(depends);
+}
+
+/*!
+ Print the list of module names ordered according
+ to how many successful searches each tree had.
+ */
+QString QDocForest::getLinkCounts(QStringList& strings, QVector<int>& counts)
+{
+ QMultiMap<int, QString> m;
+ foreach (Tree* t, searchOrder()) {
+ if (t->linkCount() < 0)
+ m.insert(t->linkCount(), t->moduleName());
+ }
+ QString depends = "depends +=";
+ QString module = Generator::defaultModuleName().toLower();
+ QMultiMap<int, QString>::iterator i = m.begin();
+ while (i != m.end()) {
+ if (i.value() != module) {
+ counts.append(-(i.key()));
+ strings.append(i.value());
+ depends += " " + i.value();
+ }
+ ++i;
+ }
+ return depends;
+}
+
/*! \class QDocDatabase
This class provides exclusive access to the qdoc database,
which consists of a forrest of trees and a lot of maps and
@@ -445,8 +418,19 @@ NodeMap QDocDatabase::typeNodeMap_;
constructs the \a forest_ object, which is also a singleton.
\a showInternal_ is normally false. If it is true, qdoc will
write documentation for nodes marked \c internal.
+
+ \a singleExec_ is false when qdoc is being used in the standard
+ way of running qdoc twices for each module, first with -prepare
+ and then with -generate. First the -prepare phase is run for
+ each module, then the -generate phase is run for each module.
+
+ When \a singleExec_ is true, qdoc is run only once. During the
+ single execution, qdoc processes the qdocconf files for all the
+ modules sequentially in a loop. Each source file for each module
+ is read exactly once.
*/
-QDocDatabase::QDocDatabase() : showInternal_(false), forest_(this)
+QDocDatabase::QDocDatabase()
+ : showInternal_(false), singleExec_(false), forest_(this)
{
// nothing
}
@@ -809,13 +793,41 @@ QmlClassNode* QDocDatabase::findQmlType(const ImportRec& import, const QString&
}
/*!
- This function calls \a func for each tree in the forest.
+ This function calls a set of functions for each tree in the
+ forest that has not already been analyzed. In this way, when
+ running qdoc in \e singleExec mode, each tree is analyzed in
+ turn, and its classes and types are added to the appropriate
+ node maps.
+ */
+void QDocDatabase::processForest()
+{
+ Tree* t = forest_.firstTree();
+ while (t) {
+ findAllNamespaces(t->root());
+ findAllClasses(t->root());
+ findAllFunctions(t->root());
+ findAllObsoleteThings(t->root());
+ findAllLegaleseTexts(t->root());
+ findAllSince(t->root());
+ t->setTreeHasBeenAnalyzed();
+ t = forest_.nextTree();
+ }
+}
+
+/*!
+ This function calls \a func for each tree in the forest,
+ but only if Tree::treeHasBeenAnalyzed() returns false for
+ the tree. In this way, when running qdoc in \e singleExec
+ mode, each tree is analyzed in turn, and its classes and
+ types are added to the appropriate node maps.
*/
void QDocDatabase::processForest(void (QDocDatabase::*func) (InnerNode*))
{
Tree* t = forest_.firstTree();
while (t) {
- (this->*(func))(t->root());
+ if (!t->treeHasBeenAnalyzed()) {
+ (this->*(func))(t->root());
+ }
t = forest_.nextTree();
}
}
@@ -887,7 +899,7 @@ NodeMap& QDocDatabase::getNamespaces()
*/
NodeMap& QDocDatabase::getServiceClasses()
{
- if (nonCompatClasses_.isEmpty() && qmlClasses_.isEmpty())
+ if (cppClasses_.isEmpty() && qmlTypes_.isEmpty())
processForest(&QDocDatabase::findAllClasses);
return serviceClasses_;
}
@@ -899,7 +911,7 @@ NodeMap& QDocDatabase::getServiceClasses()
*/
NodeMap& QDocDatabase::getQmlBasicTypes()
{
- if (nonCompatClasses_.isEmpty() && qmlBasicTypes_.isEmpty())
+ if (cppClasses_.isEmpty() && qmlBasicTypes_.isEmpty())
processForest(&QDocDatabase::findAllClasses);
return qmlBasicTypes_;
}
@@ -911,9 +923,9 @@ NodeMap& QDocDatabase::getQmlBasicTypes()
*/
NodeMap& QDocDatabase::getQmlTypes()
{
- if (nonCompatClasses_.isEmpty() && qmlClasses_.isEmpty())
+ if (cppClasses_.isEmpty() && qmlTypes_.isEmpty())
processForest(&QDocDatabase::findAllClasses);
- return qmlClasses_;
+ return qmlTypes_;
}
/*!
@@ -935,7 +947,7 @@ NodeMap& QDocDatabase::getObsoleteClasses()
*/
NodeMap& QDocDatabase::getCompatibilityClasses()
{
- if (nonCompatClasses_.isEmpty() && qmlClasses_.isEmpty())
+ if (cppClasses_.isEmpty() && qmlTypes_.isEmpty())
processForest(&QDocDatabase::findAllClasses);
return compatClasses_;
}
@@ -950,7 +962,7 @@ NodeMap& QDocDatabase::getCompatibilityClasses()
*/
NodeMap& QDocDatabase::getMainClasses()
{
- if (nonCompatClasses_.isEmpty() && qmlClasses_.isEmpty())
+ if (cppClasses_.isEmpty() && qmlTypes_.isEmpty())
processForest(&QDocDatabase::findAllClasses);
return mainClasses_;
}
@@ -962,9 +974,9 @@ NodeMap& QDocDatabase::getMainClasses()
*/
NodeMap& QDocDatabase::getCppClasses()
{
- if (nonCompatClasses_.isEmpty() && qmlClasses_.isEmpty())
+ if (cppClasses_.isEmpty() && qmlTypes_.isEmpty())
processForest(&QDocDatabase::findAllClasses);
- return nonCompatClasses_;
+ return cppClasses_;
}
/*!
@@ -987,7 +999,7 @@ void QDocDatabase::findAllClasses(InnerNode* node)
compatClasses_.insert(className, *c);
}
else {
- nonCompatClasses_.insert(className, *c);
+ cppClasses_.insert(className, *c);
if ((*c)->status() == Node::Main)
mainClasses_.insert(className, *c);
}
@@ -1000,9 +1012,9 @@ void QDocDatabase::findAllClasses(InnerNode* node)
else if (((*c)->isQmlType() || (*c)->isQmlBasicType())&& !(*c)->doc().isEmpty()) {
QString qmlTypeName = (*c)->name();
if (qmlTypeName.startsWith(QLatin1String("QML:")))
- qmlClasses_.insert(qmlTypeName.mid(4),*c);
+ qmlTypes_.insert(qmlTypeName.mid(4),*c);
else
- qmlClasses_.insert(qmlTypeName,*c);
+ qmlTypes_.insert(qmlTypeName,*c);
//also add to the QML basic type map
if ((*c)->isQmlBasicType())
@@ -1022,7 +1034,6 @@ void QDocDatabase::findAllClasses(InnerNode* node)
*/
NodeMapMap& QDocDatabase::getFunctionIndex()
{
- funcIndex_.clear();
processForest(&QDocDatabase::findAllFunctions);
return funcIndex_;
}
@@ -1314,7 +1325,15 @@ const NodeMultiMap& QDocDatabase::getSinceMap(const QString& key)
*/
void QDocDatabase::resolveIssues() {
resolveQmlInheritance(primaryTreeRoot());
- resolveTargets();
+ primaryTree()->resolveTargets(primaryTreeRoot());
+ primaryTree()->resolveCppToQmlLinks();
+}
+
+void QDocDatabase::resolveStuff()
+{
+ primaryTree()->resolveInheritance();
+ resolveQmlInheritance(primaryTreeRoot());
+ //primaryTree()->resolveTargets(primaryTreeRoot());
primaryTree()->resolveCppToQmlLinks();
}
@@ -1424,10 +1443,18 @@ void QDocDatabase::generateTagFile(const QString& name, Generator* g)
}
/*!
- Reads and parses the qdoc index files listed in \a indexFiles.
+ Reads and parses the qdoc index files listed in \a t.
*/
-void QDocDatabase::readIndexes(const QStringList& indexFiles)
+void QDocDatabase::readIndexes(const QStringList& t)
{
+ QStringList indexFiles;
+ foreach (const QString& f, t) {
+ QString fn = f.mid(f.lastIndexOf(QChar('/'))+1);
+ if (!isLoaded(fn))
+ indexFiles << f;
+ else
+ qDebug() << "This index file is already in memory:" << f;
+ }
QDocIndexFiles::qdocIndexFiles()->readIndexes(indexFiles);
QDocIndexFiles::destroyQDocIndexFiles();
}
@@ -1443,6 +1470,8 @@ void QDocDatabase::generateIndex(const QString& fileName,
Generator* g,
bool generateInternalNodes)
{
+ QString t = fileName.mid(fileName.lastIndexOf(QChar('/'))+1);
+ primaryTree()->setIndexFileName(t);
QDocIndexFiles::qdocIndexFiles()->generateIndex(fileName, url, title, g, generateInternalNodes);
QDocIndexFiles::destroyQDocIndexFiles();
}
diff --git a/src/tools/qdoc/qdocdatabase.h b/src/tools/qdoc/qdocdatabase.h
index 8b67aca971..9b4d7019ad 100644
--- a/src/tools/qdoc/qdocdatabase.h
+++ b/src/tools/qdoc/qdocdatabase.h
@@ -78,7 +78,14 @@ class QDocForest
bool done() { return (currentIndex_ >= searchOrder().size()); }
const QVector<Tree*>& searchOrder();
const QVector<Tree*>& indexSearchOrder();
- void setSearchOrder();
+ void setSearchOrder(QStringList& t);
+ bool isLoaded(const QString& fn) {
+ foreach (Tree* t, searchOrder()) {
+ if (fn == t->indexFileName())
+ return true;
+ }
+ return false;
+ }
const Node* findNode(const QStringList& path,
const Node* relative,
@@ -186,8 +193,18 @@ class QDocForest
}
}
+ void clearSearchOrder() { searchOrder_.clear(); }
+ void clearLinkCounts()
+ {
+ foreach (Tree* t, searchOrder())
+ t->clearLinkCount();
+ }
+ void printLinkCounts(const QString& project);
+ QString getLinkCounts(QStringList& strings, QVector<int>& counts);
+
private:
void newPrimaryTree(const QString& module);
+ void setPrimaryTree(const QString& t);
NamespaceNode* newIndexTree(const QString& module);
private:
@@ -274,12 +291,10 @@ class QDocDatabase
void resolveInheritance() { primaryTree()->resolveInheritance(); }
void resolveQmlInheritance(InnerNode* root);
void resolveIssues();
+ void resolveStuff();
void fixInheritance() { primaryTree()->fixInheritance(); }
void resolveProperties() { primaryTree()->resolveProperties(); }
- void resolveTargets() {
- primaryTree()->resolveTargets(primaryTreeRoot());
- }
void insertTarget(const QString& name,
const QString& title,
TargetRec::Type type,
@@ -355,18 +370,37 @@ class QDocDatabase
void clearOpenNamespaces() { openNamespaces_.clear(); }
void insertOpenNamespace(const QString& path) { openNamespaces_.insert(path); }
void setShowInternal(bool value) { showInternal_ = value; }
+ void setSingleExec(bool value) { singleExec_ = value; }
+ void processForest();
// Try to make this function private.
QDocForest& forest() { return forest_; }
NamespaceNode* primaryTreeRoot() { return forest_.primaryTreeRoot(); }
void newPrimaryTree(const QString& module) { forest_.newPrimaryTree(module); }
+ void setPrimaryTree(const QString& t) { forest_.setPrimaryTree(t); }
NamespaceNode* newIndexTree(const QString& module) { return forest_.newIndexTree(module); }
const QVector<Tree*>& searchOrder() { return forest_.searchOrder(); }
void setLocalSearch() { forest_.searchOrder_ = QVector<Tree*>(1, primaryTree()); }
void setSearchOrder(const QVector<Tree*>& searchOrder) { forest_.searchOrder_ = searchOrder; }
- void setSearchOrder() { forest_.setSearchOrder(); }
+ void setSearchOrder(QStringList& t) { forest_.setSearchOrder(t); }
void mergeCollections(Node::Type nt, CNMap& cnm, const Node* relative);
void mergeCollections(CollectionNode* cn);
+ void clearSearchOrder() { forest_.clearSearchOrder(); }
+ void incrementLinkCount(const Node* t) { t->tree()->incrementLinkCount(); }
+ void clearLinkCounts() { forest_.clearLinkCounts(); }
+ void printLinkCounts(const QString& t) { forest_.printLinkCounts(t); }
+ QString getLinkCounts(QStringList& strings, QVector<int>& counts) {
+ return forest_.getLinkCounts(strings, counts);
+ }
+ QString getNewLinkTarget(const Node* locNode,
+ const Node* t,
+ const QString& fileName,
+ QString& text,
+ bool broken = false) {
+ return primaryTree()->getNewLinkTarget(locNode, t, fileName, text, broken);
+ }
+ TargetList* getTargetList(const QString& t) { return primaryTree()->getTargetList(t); }
+ QStringList getTargetListKeys() { return primaryTree()->getTargetListKeys(); }
private:
friend class QDocIndexFiles;
@@ -379,6 +413,7 @@ class QDocDatabase
return forest_.findNode(path, relative, findFlags, genus);
}
void processForest(void (QDocDatabase::*) (InnerNode*));
+ bool isLoaded(const QString& t) { return forest_.isLoaded(t); }
static void initializeDB();
private:
@@ -394,20 +429,21 @@ class QDocDatabase
static QDocDatabase* qdocDB_;
static NodeMap typeNodeMap_;
bool showInternal_;
+ bool singleExec_;
QString version_;
QDocForest forest_;
- NodeMap nonCompatClasses_;
- NodeMap mainClasses_;
+ NodeMap cppClasses_;
+ NodeMap mainClasses_; // MWS: not needed, should be delete
NodeMap compatClasses_;
NodeMap obsoleteClasses_;
NodeMap classesWithObsoleteMembers_;
NodeMap obsoleteQmlTypes_;
NodeMap qmlTypesWithObsoleteMembers_;
NodeMap namespaceIndex_;
- NodeMap serviceClasses_;
+ NodeMap serviceClasses_; // MWS: not needed, should be deleted
NodeMap qmlBasicTypes_;
- NodeMap qmlClasses_;
+ NodeMap qmlTypes_;
NodeMapMap newClassMaps_;
NodeMapMap newQmlTypeMaps_;
NodeMultiMapMap newSinceMaps_;
diff --git a/src/tools/qdoc/qdocindexfiles.cpp b/src/tools/qdoc/qdocindexfiles.cpp
index 00041b2b65..e152b04ead 100644
--- a/src/tools/qdoc/qdocindexfiles.cpp
+++ b/src/tools/qdoc/qdocindexfiles.cpp
@@ -564,7 +564,6 @@ void QDocIndexFiles::readIndexSection(const QDomElement& element,
node->setReconstitutedBrief(briefAttr);
}
- // zzz
bool useParent = (element.nodeName() == "namespace" && name.isEmpty());
if (element.hasChildNodes()) {
QDomElement child = element.firstChildElement();
@@ -806,11 +805,14 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter& writer,
QString fullName = node->fullDocumentName();
if (fullName != objName)
writer.writeAttribute("fullname", fullName);
+#if 0
if (Generator::useOutputSubdirs())
href = node->outputSubdirectory();
if (!href.isEmpty())
href.append(QLatin1Char('/'));
href.append(gen_->fullDocumentLocation(node));
+#endif
+ href = gen_->fullDocumentLocation(node);
}
else
href = node->name();
diff --git a/src/tools/qdoc/qmlcodemarker.h b/src/tools/qdoc/qmlcodemarker.h
index c6e4aa7e19..e9a54710df 100644
--- a/src/tools/qdoc/qmlcodemarker.h
+++ b/src/tools/qdoc/qmlcodemarker.h
@@ -51,19 +51,19 @@ public:
QmlCodeMarker();
~QmlCodeMarker();
- virtual bool recognizeCode(const QString &code);
- virtual bool recognizeExtension(const QString &ext);
- virtual bool recognizeLanguage(const QString &language);
- virtual Atom::Type atomType() const;
+ virtual bool recognizeCode(const QString &code) Q_DECL_OVERRIDE;
+ virtual bool recognizeExtension(const QString &ext) Q_DECL_OVERRIDE;
+ virtual bool recognizeLanguage(const QString &language) Q_DECL_OVERRIDE;
+ virtual Atom::Type atomType() const Q_DECL_OVERRIDE;
virtual QString markedUpCode(const QString &code,
const Node *relative,
- const Location &location);
+ const Location &location) Q_DECL_OVERRIDE;
- virtual QString markedUpName(const Node *node);
- virtual QString markedUpFullName(const Node *node, const Node *relative);
- virtual QString markedUpIncludes(const QStringList &includes);
- virtual QString functionBeginRegExp(const QString &funcName);
- virtual QString functionEndRegExp(const QString &funcName);
+ virtual QString markedUpName(const Node *node) Q_DECL_OVERRIDE;
+ virtual QString markedUpFullName(const Node *node, const Node *relative) Q_DECL_OVERRIDE;
+ virtual QString markedUpIncludes(const QStringList &includes) Q_DECL_OVERRIDE;
+ virtual QString functionBeginRegExp(const QString &funcName) Q_DECL_OVERRIDE;
+ virtual QString functionEndRegExp(const QString &funcName) Q_DECL_OVERRIDE;
/* Copied from src/declarative/qml/qdeclarativescriptparser.cpp */
QList<QQmlJS::AST::SourceLocation> extractPragmas(QString &script);
diff --git a/src/tools/qdoc/qmlcodeparser.h b/src/tools/qdoc/qmlcodeparser.h
index cf60b1d7d7..715b4278b9 100644
--- a/src/tools/qdoc/qmlcodeparser.h
+++ b/src/tools/qdoc/qmlcodeparser.h
@@ -59,12 +59,12 @@ public:
QmlCodeParser();
virtual ~QmlCodeParser();
- virtual void initializeParser(const Config& config);
- virtual void terminateParser();
- virtual QString language();
- virtual QStringList sourceFileNameFilter();
- virtual void parseSourceFile(const Location& location, const QString& filePath);
- virtual void doneParsingSourceFiles();
+ virtual void initializeParser(const Config& config) Q_DECL_OVERRIDE;
+ virtual void terminateParser() Q_DECL_OVERRIDE;
+ virtual QString language() Q_DECL_OVERRIDE;
+ virtual QStringList sourceFileNameFilter() Q_DECL_OVERRIDE;
+ virtual void parseSourceFile(const Location& location, const QString& filePath) Q_DECL_OVERRIDE;
+ virtual void doneParsingSourceFiles() Q_DECL_OVERRIDE;
/* Copied from src/declarative/qml/qdeclarativescriptparser.cpp */
void extractPragmas(QString &script);
diff --git a/src/tools/qdoc/qmlmarkupvisitor.h b/src/tools/qdoc/qmlmarkupvisitor.h
index 09aa1f7400..4debce9129 100644
--- a/src/tools/qdoc/qmlmarkupvisitor.h
+++ b/src/tools/qdoc/qmlmarkupvisitor.h
@@ -56,92 +56,92 @@ public:
QString markedUpCode();
- virtual bool visit(QQmlJS::AST::UiImport *);
- virtual void endVisit(QQmlJS::AST::UiImport *);
-
- virtual bool visit(QQmlJS::AST::UiPublicMember *);
- virtual bool visit(QQmlJS::AST::UiObjectDefinition *);
-
- virtual bool visit(QQmlJS::AST::UiObjectInitializer *);
- virtual void endVisit(QQmlJS::AST::UiObjectInitializer *);
-
- virtual bool visit(QQmlJS::AST::UiObjectBinding *);
- virtual bool visit(QQmlJS::AST::UiScriptBinding *);
- virtual bool visit(QQmlJS::AST::UiArrayBinding *);
- virtual bool visit(QQmlJS::AST::UiArrayMemberList *);
- virtual bool visit(QQmlJS::AST::UiQualifiedId *);
-
- virtual bool visit(QQmlJS::AST::ThisExpression *);
- virtual bool visit(QQmlJS::AST::IdentifierExpression *);
- virtual bool visit(QQmlJS::AST::NullExpression *);
- virtual bool visit(QQmlJS::AST::TrueLiteral *);
- virtual bool visit(QQmlJS::AST::FalseLiteral *);
- virtual bool visit(QQmlJS::AST::NumericLiteral *);
- virtual bool visit(QQmlJS::AST::StringLiteral *);
- virtual bool visit(QQmlJS::AST::RegExpLiteral *);
- virtual bool visit(QQmlJS::AST::ArrayLiteral *);
-
- virtual bool visit(QQmlJS::AST::ObjectLiteral *);
- virtual void endVisit(QQmlJS::AST::ObjectLiteral *);
-
- virtual bool visit(QQmlJS::AST::ElementList *);
- virtual bool visit(QQmlJS::AST::Elision *);
- virtual bool visit(QQmlJS::AST::PropertyNameAndValue *);
- virtual bool visit(QQmlJS::AST::ArrayMemberExpression *);
- virtual bool visit(QQmlJS::AST::FieldMemberExpression *);
- virtual bool visit(QQmlJS::AST::NewMemberExpression *);
- virtual bool visit(QQmlJS::AST::NewExpression *);
- virtual bool visit(QQmlJS::AST::ArgumentList *);
- virtual bool visit(QQmlJS::AST::PostIncrementExpression *);
- virtual bool visit(QQmlJS::AST::PostDecrementExpression *);
- virtual bool visit(QQmlJS::AST::DeleteExpression *);
- virtual bool visit(QQmlJS::AST::VoidExpression *);
- virtual bool visit(QQmlJS::AST::TypeOfExpression *);
- virtual bool visit(QQmlJS::AST::PreIncrementExpression *);
- virtual bool visit(QQmlJS::AST::PreDecrementExpression *);
- virtual bool visit(QQmlJS::AST::UnaryPlusExpression *);
- virtual bool visit(QQmlJS::AST::UnaryMinusExpression *);
- virtual bool visit(QQmlJS::AST::TildeExpression *);
- virtual bool visit(QQmlJS::AST::NotExpression *);
- virtual bool visit(QQmlJS::AST::BinaryExpression *);
- virtual bool visit(QQmlJS::AST::ConditionalExpression *);
- virtual bool visit(QQmlJS::AST::Expression *);
-
- virtual bool visit(QQmlJS::AST::Block *);
- virtual void endVisit(QQmlJS::AST::Block *);
-
- virtual bool visit(QQmlJS::AST::VariableStatement *);
- virtual bool visit(QQmlJS::AST::VariableDeclarationList *);
- virtual bool visit(QQmlJS::AST::VariableDeclaration *);
- virtual bool visit(QQmlJS::AST::EmptyStatement *);
- virtual bool visit(QQmlJS::AST::ExpressionStatement *);
- virtual bool visit(QQmlJS::AST::IfStatement *);
- virtual bool visit(QQmlJS::AST::DoWhileStatement *);
- virtual bool visit(QQmlJS::AST::WhileStatement *);
- virtual bool visit(QQmlJS::AST::ForStatement *);
- virtual bool visit(QQmlJS::AST::LocalForStatement *);
- virtual bool visit(QQmlJS::AST::ForEachStatement *);
- virtual bool visit(QQmlJS::AST::LocalForEachStatement *);
- virtual bool visit(QQmlJS::AST::ContinueStatement *);
- virtual bool visit(QQmlJS::AST::BreakStatement *);
- virtual bool visit(QQmlJS::AST::ReturnStatement *);
- virtual bool visit(QQmlJS::AST::WithStatement *);
-
- virtual bool visit(QQmlJS::AST::CaseBlock *);
- virtual void endVisit(QQmlJS::AST::CaseBlock *);
-
- virtual bool visit(QQmlJS::AST::SwitchStatement *);
- virtual bool visit(QQmlJS::AST::CaseClause *);
- virtual bool visit(QQmlJS::AST::DefaultClause *);
- virtual bool visit(QQmlJS::AST::LabelledStatement *);
- virtual bool visit(QQmlJS::AST::ThrowStatement *);
- virtual bool visit(QQmlJS::AST::TryStatement *);
- virtual bool visit(QQmlJS::AST::Catch *);
- virtual bool visit(QQmlJS::AST::Finally *);
- virtual bool visit(QQmlJS::AST::FunctionDeclaration *);
- virtual bool visit(QQmlJS::AST::FunctionExpression *);
- virtual bool visit(QQmlJS::AST::FormalParameterList *);
- virtual bool visit(QQmlJS::AST::DebuggerStatement *);
+ virtual bool visit(QQmlJS::AST::UiImport *) Q_DECL_OVERRIDE;
+ virtual void endVisit(QQmlJS::AST::UiImport *) Q_DECL_OVERRIDE;
+
+ virtual bool visit(QQmlJS::AST::UiPublicMember *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::UiObjectDefinition *) Q_DECL_OVERRIDE;
+
+ virtual bool visit(QQmlJS::AST::UiObjectInitializer *) Q_DECL_OVERRIDE;
+ virtual void endVisit(QQmlJS::AST::UiObjectInitializer *) Q_DECL_OVERRIDE;
+
+ virtual bool visit(QQmlJS::AST::UiObjectBinding *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::UiScriptBinding *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::UiArrayBinding *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::UiArrayMemberList *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::UiQualifiedId *) Q_DECL_OVERRIDE;
+
+ virtual bool visit(QQmlJS::AST::ThisExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::IdentifierExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::NullExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::TrueLiteral *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::FalseLiteral *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::NumericLiteral *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::StringLiteral *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::RegExpLiteral *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::ArrayLiteral *) Q_DECL_OVERRIDE;
+
+ virtual bool visit(QQmlJS::AST::ObjectLiteral *) Q_DECL_OVERRIDE;
+ virtual void endVisit(QQmlJS::AST::ObjectLiteral *) Q_DECL_OVERRIDE;
+
+ virtual bool visit(QQmlJS::AST::ElementList *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::Elision *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::PropertyNameAndValue *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::ArrayMemberExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::FieldMemberExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::NewMemberExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::NewExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::ArgumentList *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::PostIncrementExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::PostDecrementExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::DeleteExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::VoidExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::TypeOfExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::PreIncrementExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::PreDecrementExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::UnaryPlusExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::UnaryMinusExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::TildeExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::NotExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::BinaryExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::ConditionalExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::Expression *) Q_DECL_OVERRIDE;
+
+ virtual bool visit(QQmlJS::AST::Block *) Q_DECL_OVERRIDE;
+ virtual void endVisit(QQmlJS::AST::Block *) Q_DECL_OVERRIDE;
+
+ virtual bool visit(QQmlJS::AST::VariableStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::VariableDeclarationList *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::VariableDeclaration *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::EmptyStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::ExpressionStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::IfStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::DoWhileStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::WhileStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::ForStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::LocalForStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::ForEachStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::LocalForEachStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::ContinueStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::BreakStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::ReturnStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::WithStatement *) Q_DECL_OVERRIDE;
+
+ virtual bool visit(QQmlJS::AST::CaseBlock *) Q_DECL_OVERRIDE;
+ virtual void endVisit(QQmlJS::AST::CaseBlock *) Q_DECL_OVERRIDE;
+
+ virtual bool visit(QQmlJS::AST::SwitchStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::CaseClause *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::DefaultClause *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::LabelledStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::ThrowStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::TryStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::Catch *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::Finally *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::FunctionDeclaration *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::FunctionExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::FormalParameterList *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::DebuggerStatement *) Q_DECL_OVERRIDE;
protected:
QString protect(const QString &string);
diff --git a/src/tools/qdoc/qmlparser/qqmljsast_p.h b/src/tools/qdoc/qmlparser/qqmljsast_p.h
index fa4b2c3e13..ae79046563 100644
--- a/src/tools/qdoc/qmlparser/qqmljsast_p.h
+++ b/src/tools/qdoc/qmlparser/qqmljsast_p.h
@@ -247,7 +247,7 @@ class QML_PARSER_EXPORT ExpressionNode: public Node
public:
ExpressionNode() {}
- virtual ExpressionNode *expressionCast();
+ virtual ExpressionNode *expressionCast() Q_DECL_OVERRIDE;
};
class QML_PARSER_EXPORT Statement: public Node
@@ -255,7 +255,7 @@ class QML_PARSER_EXPORT Statement: public Node
public:
Statement() {}
- virtual Statement *statementCast();
+ virtual Statement *statementCast() Q_DECL_OVERRIDE;
};
class QML_PARSER_EXPORT NestedExpression: public ExpressionNode
@@ -267,12 +267,12 @@ public:
: expression(expression)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return lparenToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return rparenToken; }
// attributes
@@ -288,12 +288,12 @@ public:
ThisExpression() { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return thisToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return thisToken; }
// attributes
@@ -308,12 +308,12 @@ public:
IdentifierExpression(const QStringRef &n):
name (n) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return identifierToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return identifierToken; }
// attributes
@@ -328,12 +328,12 @@ public:
NullExpression() { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return nullToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return nullToken; }
// attributes
@@ -347,12 +347,12 @@ public:
TrueLiteral() { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return trueToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return trueToken; }
// attributes
@@ -366,12 +366,12 @@ public:
FalseLiteral() { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return falseToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return falseToken; }
// attributes
@@ -386,12 +386,12 @@ public:
NumericLiteral(double v):
value(v) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return literalToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return literalToken; }
// attributes:
@@ -407,12 +407,12 @@ public:
StringLiteral(const QStringRef &v):
value (v) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return literalToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return literalToken; }
// attributes:
@@ -428,12 +428,12 @@ public:
RegExpLiteral(const QStringRef &p, int f):
pattern (p), flags (f) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return literalToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return literalToken; }
// attributes:
@@ -459,12 +459,12 @@ public:
elements (elts), elision (e)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return lbracketToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return rbracketToken; }
// attributes
@@ -486,12 +486,12 @@ public:
ObjectLiteral(PropertyAssignmentList *plist):
properties (plist) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return lbraceToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return rbraceToken; }
// attributes
@@ -515,12 +515,12 @@ public:
previous->next = this;
}
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return commaToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return next ? next->lastSourceLocation() : commaToken; }
inline Elision *finish ()
@@ -559,16 +559,16 @@ public:
return front;
}
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{
if (elision)
return elision->firstSourceLocation();
return expression->firstSourceLocation();
}
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{
if (next)
return next->lastSourceLocation();
@@ -589,10 +589,10 @@ public:
PropertyName() { kind = K; }
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return propertyNameToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return propertyNameToken; }
// attributes
@@ -630,12 +630,12 @@ public:
return front;
}
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return assignment->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return next ? next->lastSourceLocation() : assignment->lastSourceLocation(); }
// attributes
@@ -653,12 +653,12 @@ public:
: name(n), value(v)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return name->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return value->lastSourceLocation(); }
// attributes
@@ -686,12 +686,12 @@ public:
: type(Setter), name(n), formals(f), functionBody (b)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return getSetToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return rbraceToken; }
// attributes
@@ -714,7 +714,7 @@ public:
IdentifierPropertyName(const QStringRef &n):
id (n) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
// attributes
QStringRef id;
@@ -728,7 +728,7 @@ public:
StringLiteralPropertyName(const QStringRef &n):
id (n) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
// attributes
QStringRef id;
@@ -742,7 +742,7 @@ public:
NumericLiteralPropertyName(double n):
id (n) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
// attributes
double id;
@@ -757,12 +757,12 @@ public:
base (b), expression (e)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return base->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return rbracketToken; }
// attributes
@@ -781,12 +781,12 @@ public:
base (b), name (n)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return base->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return identifierToken; }
// attributes
@@ -805,12 +805,12 @@ public:
base (b), arguments (a)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return newToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return rparenToken; }
// attributes
@@ -829,12 +829,12 @@ public:
NewExpression(ExpressionNode *e):
expression (e) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return newToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return expression->lastSourceLocation(); }
// attributes
@@ -851,12 +851,12 @@ public:
base (b), arguments (a)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return base->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return rparenToken; }
// attributes
@@ -883,12 +883,12 @@ public:
previous->next = this;
}
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return expression->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{
if (next)
return next->lastSourceLocation();
@@ -916,12 +916,12 @@ public:
PostIncrementExpression(ExpressionNode *b):
base (b) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return base->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return incrementToken; }
// attributes
@@ -937,12 +937,12 @@ public:
PostDecrementExpression(ExpressionNode *b):
base (b) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return base->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return decrementToken; }
// attributes
@@ -958,12 +958,12 @@ public:
DeleteExpression(ExpressionNode *e):
expression (e) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return deleteToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return expression->lastSourceLocation(); }
// attributes
@@ -979,12 +979,12 @@ public:
VoidExpression(ExpressionNode *e):
expression (e) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return voidToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return expression->lastSourceLocation(); }
// attributes
@@ -1000,12 +1000,12 @@ public:
TypeOfExpression(ExpressionNode *e):
expression (e) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return typeofToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return expression->lastSourceLocation(); }
// attributes
@@ -1021,12 +1021,12 @@ public:
PreIncrementExpression(ExpressionNode *e):
expression (e) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return incrementToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return expression->lastSourceLocation(); }
// attributes
@@ -1042,12 +1042,12 @@ public:
PreDecrementExpression(ExpressionNode *e):
expression (e) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return decrementToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return expression->lastSourceLocation(); }
// attributes
@@ -1063,12 +1063,12 @@ public:
UnaryPlusExpression(ExpressionNode *e):
expression (e) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return plusToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return expression->lastSourceLocation(); }
// attributes
@@ -1084,12 +1084,12 @@ public:
UnaryMinusExpression(ExpressionNode *e):
expression (e) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return minusToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return expression->lastSourceLocation(); }
// attributes
@@ -1105,12 +1105,12 @@ public:
TildeExpression(ExpressionNode *e):
expression (e) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return tildeToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return expression->lastSourceLocation(); }
// attributes
@@ -1126,12 +1126,12 @@ public:
NotExpression(ExpressionNode *e):
expression (e) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return notToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return expression->lastSourceLocation(); }
// attributes
@@ -1148,14 +1148,14 @@ public:
left (l), op (o), right (r)
{ kind = K; }
- virtual BinaryExpression *binaryExpressionCast();
+ virtual BinaryExpression *binaryExpressionCast() Q_DECL_OVERRIDE;
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return left->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return right->lastSourceLocation(); }
// attributes
@@ -1174,12 +1174,12 @@ public:
expression (e), ok (t), ko (f)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return expression->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return ko->lastSourceLocation(); }
// attributes
@@ -1198,12 +1198,12 @@ public:
Expression(ExpressionNode *l, ExpressionNode *r):
left (l), right (r) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return left->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return right->lastSourceLocation(); }
// attributes
@@ -1220,12 +1220,12 @@ public:
Block(StatementList *slist):
statements (slist) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return lbraceToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return rbraceToken; }
// attributes
@@ -1251,12 +1251,12 @@ public:
previous->next = this;
}
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return statement->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return next ? next->lastSourceLocation() : statement->lastSourceLocation(); }
inline StatementList *finish ()
@@ -1280,12 +1280,12 @@ public:
declarations (vlist)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return declarationKindToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return semicolonToken; }
// attributes
@@ -1303,12 +1303,12 @@ public:
name (n), expression (e), readOnly(false)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return identifierToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return expression ? expression->lastSourceLocation() : identifierToken; }
// attributes
@@ -1335,12 +1335,12 @@ public:
previous->next = this;
}
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return declaration->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{
if (next)
return next->lastSourceLocation();
@@ -1372,12 +1372,12 @@ public:
EmptyStatement() { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return semicolonToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return semicolonToken; }
// attributes
@@ -1392,12 +1392,12 @@ public:
ExpressionStatement(ExpressionNode *e):
expression (e) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return expression->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return semicolonToken; }
// attributes
@@ -1414,12 +1414,12 @@ public:
expression (e), ok (t), ko (f)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return ifToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{
if (ko)
return ko->lastSourceLocation();
@@ -1446,12 +1446,12 @@ public:
statement (stmt), expression (e)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return doToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return semicolonToken; }
// attributes
@@ -1473,12 +1473,12 @@ public:
expression (e), statement (stmt)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return whileToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return statement->lastSourceLocation(); }
// attributes
@@ -1498,12 +1498,12 @@ public:
initialiser (i), condition (c), expression (e), statement (stmt)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return forToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return statement->lastSourceLocation(); }
// attributes
@@ -1527,12 +1527,12 @@ public:
declarations (vlist), condition (c), expression (e), statement (stmt)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return forToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return statement->lastSourceLocation(); }
// attributes
@@ -1557,12 +1557,12 @@ public:
initialiser (i), expression (e), statement (stmt)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return forToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return statement->lastSourceLocation(); }
// attributes
@@ -1584,12 +1584,12 @@ public:
declaration (v), expression (e), statement (stmt)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return forToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return statement->lastSourceLocation(); }
// attributes
@@ -1611,12 +1611,12 @@ public:
ContinueStatement(const QStringRef &l = QStringRef()):
label (l) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return continueToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return semicolonToken; }
// attributes
@@ -1634,12 +1634,12 @@ public:
BreakStatement(const QStringRef &l):
label (l) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return breakToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return semicolonToken; }
// attributes
@@ -1657,12 +1657,12 @@ public:
ReturnStatement(ExpressionNode *e):
expression (e) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return returnToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return semicolonToken; }
// attributes
@@ -1680,12 +1680,12 @@ public:
expression (e), statement (stmt)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return withToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return statement->lastSourceLocation(); }
// attributes
@@ -1705,12 +1705,12 @@ public:
clauses (c), defaultClause (d), moreClauses (r)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return lbraceToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return rbraceToken; }
// attributes
@@ -1730,12 +1730,12 @@ public:
expression (e), block (b)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return switchToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return block->rbraceToken; }
// attributes
@@ -1755,12 +1755,12 @@ public:
expression (e), statements (slist)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return caseToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return statements ? statements->lastSourceLocation() : colonToken; }
// attributes
@@ -1787,12 +1787,12 @@ public:
previous->next = this;
}
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return clause->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return next ? next->lastSourceLocation() : clause->lastSourceLocation(); }
inline CaseClauses *finish ()
@@ -1816,12 +1816,12 @@ public:
statements (slist)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return defaultToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return statements ? statements->lastSourceLocation() : colonToken; }
// attributes
@@ -1839,12 +1839,12 @@ public:
label (l), statement (stmt)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return identifierToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return statement->lastSourceLocation(); }
// attributes
@@ -1862,12 +1862,12 @@ public:
ThrowStatement(ExpressionNode *e):
expression (e) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return throwToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return semicolonToken; }
// attributes
@@ -1885,12 +1885,12 @@ public:
name (n), statement (stmt)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return catchToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return statement->lastSourceLocation(); }
// attributes
@@ -1911,12 +1911,12 @@ public:
statement (stmt)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return finallyToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return statement ? statement->lastSourceLocation() : finallyToken; }
// attributes
@@ -1941,12 +1941,12 @@ public:
statement (stmt), catchExpression (c), finallyExpression (0)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return tryToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{
if (finallyExpression)
return finallyExpression->statement->rbraceToken;
@@ -1972,12 +1972,12 @@ public:
name (n), formals (f), body (b)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return functionToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return rbraceToken; }
// attributes
@@ -2001,7 +2001,7 @@ public:
FunctionExpression(n, f, b)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
};
class QML_PARSER_EXPORT FormalParameterList: public Node
@@ -2021,12 +2021,12 @@ public:
previous->next = this;
}
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return identifierToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return next ? next->lastSourceLocation() : identifierToken; }
inline FormalParameterList *finish ()
@@ -2069,12 +2069,12 @@ public:
previous->next = this;
}
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return element->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return next ? next->lastSourceLocation() : element->lastSourceLocation(); }
inline SourceElements *finish ()
@@ -2098,12 +2098,12 @@ public:
elements (elts)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return elements ? elements->firstSourceLocation() : SourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return elements ? elements->lastSourceLocation() : SourceLocation(); }
// attributes
@@ -2119,12 +2119,12 @@ public:
elements (elts)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return elements ? elements->firstSourceLocation() : SourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return elements ? elements->lastSourceLocation() : SourceLocation(); }
// attributes
@@ -2140,12 +2140,12 @@ public:
declaration (f)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return declaration->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return declaration->lastSourceLocation(); }
// attributes
@@ -2161,12 +2161,12 @@ public:
statement (stmt)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return statement->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return statement->lastSourceLocation(); }
// attributes
@@ -2181,12 +2181,12 @@ public:
DebuggerStatement()
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return debuggerToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return semicolonToken; }
// attributes
@@ -2218,12 +2218,12 @@ public:
return head;
}
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return identifierToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return next ? next->lastSourceLocation() : identifierToken; }
// attributes
@@ -2245,12 +2245,12 @@ public:
: importUri(uri)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return importToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return semicolonToken; }
// attributes
@@ -2271,7 +2271,7 @@ public:
virtual SourceLocation firstSourceLocation() const = 0;
virtual SourceLocation lastSourceLocation() const = 0;
- virtual UiObjectMember *uiObjectMemberCast();
+ virtual UiObjectMember *uiObjectMemberCast() Q_DECL_OVERRIDE;
};
class QML_PARSER_EXPORT UiObjectMemberList: public Node
@@ -2291,12 +2291,12 @@ public:
previous->next = this;
}
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return member->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return next ? next->lastSourceLocation() : member->lastSourceLocation(); }
UiObjectMemberList *finish()
@@ -2335,12 +2335,12 @@ public:
return head;
}
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return identifierToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return next ? next->lastSourceLocation() : identifierToken; }
// attributes
@@ -2358,12 +2358,12 @@ public:
: pragmaType(type)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return pragmaToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return semicolonToken; }
// attributes
@@ -2408,12 +2408,12 @@ public:
return head;
}
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return headerItem->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return next ? next->lastSourceLocation() : headerItem->lastSourceLocation(); }
// attributes
@@ -2430,9 +2430,9 @@ public:
: headers(headers), members(members)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{
if (headers)
return headers->firstSourceLocation();
@@ -2441,7 +2441,7 @@ public:
return SourceLocation();
}
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{
if (members)
return members->lastSourceLocation();
@@ -2472,12 +2472,12 @@ public:
previous->next = this;
}
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return member->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return next ? next->lastSourceLocation() : member->lastSourceLocation(); }
UiArrayMemberList *finish()
@@ -2502,12 +2502,12 @@ public:
: members(members)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return lbraceToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return rbraceToken; }
// attributes
@@ -2533,12 +2533,12 @@ public:
previous->next = this;
}
- virtual void accept0(Visitor *);
+ virtual void accept0(Visitor *) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return propertyTypeToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return next ? next->lastSourceLocation() : identifierToken; }
inline UiParameterList *finish ()
@@ -2573,9 +2573,9 @@ public:
: type(Property), memberType(memberType), name(name), statement(statement), binding(0), isDefaultMember(false), isReadonlyMember(false), parameters(0)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{
if (defaultToken.isValid())
return defaultToken;
@@ -2585,7 +2585,7 @@ public:
return propertyToken;
}
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{
if (binding)
return binding->lastSourceLocation();
@@ -2625,12 +2625,12 @@ public:
: qualifiedTypeNameId(qualifiedTypeNameId), initializer(initializer)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return qualifiedTypeNameId->identifierToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return initializer->rbraceToken; }
// attributes
@@ -2647,7 +2647,7 @@ public:
: sourceElement(sourceElement)
{ kind = K; }
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{
if (FunctionDeclaration *funDecl = cast<FunctionDeclaration *>(sourceElement))
return funDecl->firstSourceLocation();
@@ -2657,7 +2657,7 @@ public:
return SourceLocation();
}
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{
if (FunctionDeclaration *funDecl = cast<FunctionDeclaration *>(sourceElement))
return funDecl->lastSourceLocation();
@@ -2667,7 +2667,7 @@ public:
return SourceLocation();
}
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
// attributes
@@ -2688,7 +2688,7 @@ public:
hasOnToken(false)
{ kind = K; }
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{
if (hasOnToken && qualifiedTypeNameId)
return qualifiedTypeNameId->identifierToken;
@@ -2696,10 +2696,10 @@ public:
return qualifiedId->identifierToken;
}
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return initializer->rbraceToken; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
// attributes
@@ -2721,13 +2721,13 @@ public:
statement(statement)
{ kind = K; }
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return qualifiedId->identifierToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return statement->lastSourceLocation(); }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
// attributes
UiQualifiedId *qualifiedId;
@@ -2746,13 +2746,13 @@ public:
members(members)
{ kind = K; }
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return qualifiedId->identifierToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return rbracketToken; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
// attributes
UiQualifiedId *qualifiedId;
diff --git a/src/tools/qdoc/qmlvisitor.h b/src/tools/qdoc/qmlvisitor.h
index ed9ba7c6eb..418772cdff 100644
--- a/src/tools/qdoc/qmlvisitor.h
+++ b/src/tools/qdoc/qmlvisitor.h
@@ -67,30 +67,30 @@ public:
const QSet<QString> &topics);
virtual ~QmlDocVisitor();
- bool visit(QQmlJS::AST::UiImport *import);
- void endVisit(QQmlJS::AST::UiImport *definition);
+ bool visit(QQmlJS::AST::UiImport *import) Q_DECL_OVERRIDE;
+ void endVisit(QQmlJS::AST::UiImport *definition) Q_DECL_OVERRIDE;
- bool visit(QQmlJS::AST::UiObjectDefinition *definition);
- void endVisit(QQmlJS::AST::UiObjectDefinition *definition);
+ bool visit(QQmlJS::AST::UiObjectDefinition *definition) Q_DECL_OVERRIDE;
+ void endVisit(QQmlJS::AST::UiObjectDefinition *definition) Q_DECL_OVERRIDE;
- bool visit(QQmlJS::AST::UiPublicMember *member);
- void endVisit(QQmlJS::AST::UiPublicMember *definition);
+ bool visit(QQmlJS::AST::UiPublicMember *member) Q_DECL_OVERRIDE;
+ void endVisit(QQmlJS::AST::UiPublicMember *definition) Q_DECL_OVERRIDE;
- virtual bool visit(QQmlJS::AST::UiObjectBinding *);
- virtual void endVisit(QQmlJS::AST::UiObjectBinding *);
- virtual void endVisit(QQmlJS::AST::UiArrayBinding *);
- virtual bool visit(QQmlJS::AST::UiArrayBinding *);
+ virtual bool visit(QQmlJS::AST::UiObjectBinding *) Q_DECL_OVERRIDE;
+ virtual void endVisit(QQmlJS::AST::UiObjectBinding *) Q_DECL_OVERRIDE;
+ virtual void endVisit(QQmlJS::AST::UiArrayBinding *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::UiArrayBinding *) Q_DECL_OVERRIDE;
- bool visit(QQmlJS::AST::IdentifierPropertyName *idproperty);
+ bool visit(QQmlJS::AST::IdentifierPropertyName *idproperty) Q_DECL_OVERRIDE;
- bool visit(QQmlJS::AST::FunctionDeclaration *);
- void endVisit(QQmlJS::AST::FunctionDeclaration *);
+ bool visit(QQmlJS::AST::FunctionDeclaration *) Q_DECL_OVERRIDE;
+ void endVisit(QQmlJS::AST::FunctionDeclaration *) Q_DECL_OVERRIDE;
- bool visit(QQmlJS::AST::UiScriptBinding *);
- void endVisit(QQmlJS::AST::UiScriptBinding *);
+ bool visit(QQmlJS::AST::UiScriptBinding *) Q_DECL_OVERRIDE;
+ void endVisit(QQmlJS::AST::UiScriptBinding *) Q_DECL_OVERRIDE;
- bool visit(QQmlJS::AST::UiQualifiedId *);
- void endVisit(QQmlJS::AST::UiQualifiedId *);
+ bool visit(QQmlJS::AST::UiQualifiedId *) Q_DECL_OVERRIDE;
+ void endVisit(QQmlJS::AST::UiQualifiedId *) Q_DECL_OVERRIDE;
private:
QString getFullyQualifiedId(QQmlJS::AST::UiQualifiedId *id);
diff --git a/src/tools/qdoc/tokenizer.cpp b/src/tools/qdoc/tokenizer.cpp
index 7c9e9f338a..dca1e9bb55 100644
--- a/src/tools/qdoc/tokenizer.cpp
+++ b/src/tools/qdoc/tokenizer.cpp
@@ -511,6 +511,9 @@ void Tokenizer::initialize(const Config &config)
defines = new QRegExp(d.join('|'));
falsehoods = new QRegExp(config.getStringList(CONFIG_FALSEHOODS).join('|'));
+ /*
+ The keyword hash table is always cleared before any words are inserted.
+ */
memset(kwordHashTable, 0, sizeof(kwordHashTable));
for (int i = 0; i < Tok_LastKeyword - Tok_FirstKeyword + 1; i++)
insertKwordIntoHash(kwords[i], i + 1);
@@ -533,6 +536,11 @@ void Tokenizer::initialize(const Config &config)
}
}
+/*!
+ The heap allocated variables are freed here. The keyword
+ hash table is not cleared here, but it is cleared in the
+ initialize() function, before any keywords are inserted.
+ */
void Tokenizer::terminate()
{
delete comment;
diff --git a/src/tools/qdoc/tree.cpp b/src/tools/qdoc/tree.cpp
index 2e327a5ac8..a4b8d8cd8a 100644
--- a/src/tools/qdoc/tree.cpp
+++ b/src/tools/qdoc/tree.cpp
@@ -66,10 +66,19 @@ QT_BEGIN_NAMESPACE
be necessary, and it might be removed later.
*/
Tree::Tree(const QString& module, QDocDatabase* qdb)
- : module_(module), qdb_(qdb), root_(0, QString())
+ : treeHasBeenAnalyzed_(false),
+ docsHaveBeenGenerated_(false),
+ linkCount_(0),
+ module_(module),
+ qdb_(qdb),
+ root_(0, QString()),
+ targetListMap_(0)
{
root_.setModuleName(module_);
root_.setTree(this);
+ if (Generator::writeQaPages()) {
+ targetListMap_ = new TargetListMap;
+ }
}
/*!
@@ -95,6 +104,18 @@ Tree::~Tree()
}
nodesByTargetRef_.clear();
nodesByTargetTitle_.clear();
+ if (Generator::writeQaPages() && targetListMap_) {
+ TargetListMap::iterator i = targetListMap_->begin();
+ while (i != targetListMap_->end()) {
+ TargetList* tlist = i.value();
+ if (tlist) {
+ foreach (TargetLoc* tloc, *tlist)
+ delete tloc;
+ }
+ delete tlist;
+ ++i;
+ }
+ }
}
/* API members */
@@ -1114,7 +1135,7 @@ QString Tree::refForAtom(const Atom* atom)
if (atom) {
if (atom->type() == Atom::SectionLeft)
return Doc::canonicalTitle(Text::sectionHeading(atom).toString());
- if (atom->type() == Atom::Target)
+ if ((atom->type() == Atom::Target) || (atom->type() == Atom::Keyword))
return Doc::canonicalTitle(atom->string());
}
return QString();
@@ -1394,4 +1415,51 @@ const Node* Tree::checkForCollision(const QString& name)
return findNode(QStringList(name), 0, 0, Node::DontCare);
}
+/*!
+ Generate a target of the form link-nnn, where the nnn is
+ the current link count for this tree. This target string
+ is returned. It will be output as an HTML anchor just before
+ an HTML link to the node \a t.
+
+ The node \a t
+ */
+QString Tree::getNewLinkTarget(const Node* locNode,
+ const Node* t,
+ const QString& fileName,
+ QString& text,
+ bool broken)
+{
+ QString moduleName;
+ if (t && !broken) {
+ Tree* tree = t->tree();
+ if (tree != this)
+ tree->incrementLinkCount();
+ moduleName = tree->moduleName();
+ }
+ else
+ moduleName = "broken";
+ incrementLinkCount();
+ QString target = QString("qa-target-%1").arg(-(linkCount()));
+ TargetLoc* tloc = new TargetLoc(locNode, target, fileName, text, broken);
+ TargetList* tList = 0;
+ TargetListMap::iterator i = targetListMap_->find(moduleName);
+ if (i == targetListMap_->end()) {
+ tList = new TargetList;
+ i = targetListMap_->insert(moduleName, tList);
+ }
+ else
+ tList = i.value();
+ tList->append(tloc);
+ return target;
+}
+
+/*!
+ Look up the target list for the specified \a module
+ and return a pointer to it.
+ */
+TargetList* Tree::getTargetList(const QString& module)
+{
+ return targetListMap_->value(module);
+}
+
QT_END_NAMESPACE
diff --git a/src/tools/qdoc/tree.h b/src/tools/qdoc/tree.h
index 6bb13ee327..6ccf85371b 100644
--- a/src/tools/qdoc/tree.h
+++ b/src/tools/qdoc/tree.h
@@ -67,10 +67,24 @@ struct TargetRec
Type type_;
};
+struct TargetLoc
+{
+ public:
+ TargetLoc(const Node* loc, const QString& t, const QString& fileName, const QString& text, bool broken)
+ : loc_(loc), target_(t), fileName_(fileName), text_(text), broken_(broken) { }
+ const Node* loc_;
+ QString target_;
+ QString fileName_;
+ QString text_;
+ bool broken_;
+};
+
typedef QMultiMap<QString, TargetRec*> TargetMap;
typedef QMultiMap<QString, DocNode*> DocNodeMultiMap;
typedef QMap<QString, QmlClassNode*> QmlTypeMap;
typedef QMultiMap<QString, const ExampleNode*> ExampleNodeMap;
+typedef QVector<TargetLoc*> TargetList;
+typedef QMap<QString, TargetList*> TargetListMap;
class Tree
{
@@ -187,12 +201,33 @@ class Tree
void addExampleNode(ExampleNode* n) { exampleNodeMap_.insert(n->title(), n); }
ExampleNodeMap& exampleNodeMap() { return exampleNodeMap_; }
const Node* checkForCollision(const QString& name);
+ void setIndexFileName(const QString& t) { indexFileName_ = t; }
+
+ bool treeHasBeenAnalyzed() const { return treeHasBeenAnalyzed_; }
+ bool docsHaveBeenGenerated() const { return docsHaveBeenGenerated_; }
+ void setTreeHasBeenAnalyzed() { treeHasBeenAnalyzed_ = true; }
+ void setdocsHaveBeenGenerated() { docsHaveBeenGenerated_ = true; }
+ QString getNewLinkTarget(const Node* locNode,
+ const Node* t,
+ const QString& fileName,
+ QString& text,
+ bool broken);
+ TargetList* getTargetList(const QString& module);
+ QStringList getTargetListKeys() { return targetListMap_->keys(); }
public:
const QString& moduleName() const { return module_; }
+ const QString& indexFileName() const { return indexFileName_; }
+ long incrementLinkCount() { return --linkCount_; }
+ void clearLinkCount() { linkCount_ = 0; }
+ long linkCount() const { return linkCount_; }
private:
+ bool treeHasBeenAnalyzed_;
+ bool docsHaveBeenGenerated_;
+ long linkCount_;
QString module_;
+ QString indexFileName_;
QDocDatabase* qdb_;
NamespaceNode root_;
PropertyMap unresolvedPropertyMap;
@@ -204,6 +239,7 @@ private:
CNMap qmlModules_;
QmlTypeMap qmlTypeMap_;
ExampleNodeMap exampleNodeMap_;
+ TargetListMap* targetListMap_;
};
QT_END_NAMESPACE
diff --git a/src/tools/uic/cpp/cppextractimages.h b/src/tools/uic/cpp/cppextractimages.h
index ce5fd75b5d..162359ca13 100644
--- a/src/tools/uic/cpp/cppextractimages.h
+++ b/src/tools/uic/cpp/cppextractimages.h
@@ -52,9 +52,9 @@ class ExtractImages : public TreeWalker
public:
ExtractImages(const Option &opt);
- void acceptUI(DomUI *node);
- void acceptImages(DomImages *images);
- void acceptImage(DomImage *image);
+ void acceptUI(DomUI *node) Q_DECL_OVERRIDE;
+ void acceptImages(DomImages *images) Q_DECL_OVERRIDE;
+ void acceptImage(DomImage *image) Q_DECL_OVERRIDE;
private:
QTextStream *m_output;
diff --git a/src/tools/uic/cpp/cppwritedeclaration.h b/src/tools/uic/cpp/cppwritedeclaration.h
index 7cd8b3581e..7ce7cd083c 100644
--- a/src/tools/uic/cpp/cppwritedeclaration.h
+++ b/src/tools/uic/cpp/cppwritedeclaration.h
@@ -50,13 +50,13 @@ struct WriteDeclaration : public TreeWalker
{
WriteDeclaration(Uic *uic, bool activateScripts);
- void acceptUI(DomUI *node);
- void acceptWidget(DomWidget *node);
- void acceptSpacer(DomSpacer *node);
- void acceptLayout(DomLayout *node);
- void acceptActionGroup(DomActionGroup *node);
- void acceptAction(DomAction *node);
- void acceptButtonGroup(const DomButtonGroup *buttonGroup);
+ void acceptUI(DomUI *node) Q_DECL_OVERRIDE;
+ void acceptWidget(DomWidget *node) Q_DECL_OVERRIDE;
+ void acceptSpacer(DomSpacer *node) Q_DECL_OVERRIDE;
+ void acceptLayout(DomLayout *node) Q_DECL_OVERRIDE;
+ void acceptActionGroup(DomActionGroup *node) Q_DECL_OVERRIDE;
+ void acceptAction(DomAction *node) Q_DECL_OVERRIDE;
+ void acceptButtonGroup(const DomButtonGroup *buttonGroup) Q_DECL_OVERRIDE;
private:
Uic *m_uic;
diff --git a/src/tools/uic/cpp/cppwriteicondata.h b/src/tools/uic/cpp/cppwriteicondata.h
index 0dc2bf0721..613b7d7ca3 100644
--- a/src/tools/uic/cpp/cppwriteicondata.h
+++ b/src/tools/uic/cpp/cppwriteicondata.h
@@ -52,9 +52,9 @@ class WriteIconData : public TreeWalker
public:
WriteIconData(Uic *uic);
- void acceptUI(DomUI *node);
- void acceptImages(DomImages *images);
- void acceptImage(DomImage *image);
+ void acceptUI(DomUI *node) Q_DECL_OVERRIDE;
+ void acceptImages(DomImages *images) Q_DECL_OVERRIDE;
+ void acceptImage(DomImage *image) Q_DECL_OVERRIDE;
static void writeImage(QTextStream &output, const QString &indent,
bool limitXPM_LineLength, const DomImage *image);
diff --git a/src/tools/uic/cpp/cppwriteicondeclaration.h b/src/tools/uic/cpp/cppwriteicondeclaration.h
index c093430bec..f717208b59 100644
--- a/src/tools/uic/cpp/cppwriteicondeclaration.h
+++ b/src/tools/uic/cpp/cppwriteicondeclaration.h
@@ -51,9 +51,9 @@ class WriteIconDeclaration : public TreeWalker
public:
WriteIconDeclaration(Uic *uic);
- void acceptUI(DomUI *node);
- void acceptImages(DomImages *images);
- void acceptImage(DomImage *image);
+ void acceptUI(DomUI *node) Q_DECL_OVERRIDE;
+ void acceptImages(DomImages *images) Q_DECL_OVERRIDE;
+ void acceptImage(DomImage *image) Q_DECL_OVERRIDE;
private:
Driver *driver;
diff --git a/src/tools/uic/cpp/cppwriteiconinitialization.h b/src/tools/uic/cpp/cppwriteiconinitialization.h
index d8a0a6195f..53f7de6597 100644
--- a/src/tools/uic/cpp/cppwriteiconinitialization.h
+++ b/src/tools/uic/cpp/cppwriteiconinitialization.h
@@ -53,9 +53,9 @@ class WriteIconInitialization : public TreeWalker
public:
WriteIconInitialization(Uic *uic);
- void acceptUI(DomUI *node);
- void acceptImages(DomImages *images);
- void acceptImage(DomImage *image);
+ void acceptUI(DomUI *node) Q_DECL_OVERRIDE;
+ void acceptImages(DomImages *images) Q_DECL_OVERRIDE;
+ void acceptImage(DomImage *image) Q_DECL_OVERRIDE;
static QString iconFromDataFunction();
diff --git a/src/tools/uic/cpp/cppwriteincludes.h b/src/tools/uic/cpp/cppwriteincludes.h
index 6f6a0f6105..0d446514f1 100644
--- a/src/tools/uic/cpp/cppwriteincludes.h
+++ b/src/tools/uic/cpp/cppwriteincludes.h
@@ -53,24 +53,24 @@ struct WriteIncludes : public TreeWalker
{
WriteIncludes(Uic *uic);
- void acceptUI(DomUI *node);
- void acceptWidget(DomWidget *node);
- void acceptLayout(DomLayout *node);
- void acceptSpacer(DomSpacer *node);
- void acceptProperty(DomProperty *node);
- void acceptWidgetScripts(const DomScripts &, DomWidget *, const DomWidgets &);
+ void acceptUI(DomUI *node) Q_DECL_OVERRIDE;
+ void acceptWidget(DomWidget *node) Q_DECL_OVERRIDE;
+ void acceptLayout(DomLayout *node) Q_DECL_OVERRIDE;
+ void acceptSpacer(DomSpacer *node) Q_DECL_OVERRIDE;
+ void acceptProperty(DomProperty *node) Q_DECL_OVERRIDE;
+ void acceptWidgetScripts(const DomScripts &, DomWidget *, const DomWidgets &) Q_DECL_OVERRIDE;
//
// custom widgets
//
- void acceptCustomWidgets(DomCustomWidgets *node);
- void acceptCustomWidget(DomCustomWidget *node);
+ void acceptCustomWidgets(DomCustomWidgets *node) Q_DECL_OVERRIDE;
+ void acceptCustomWidget(DomCustomWidget *node) Q_DECL_OVERRIDE;
//
// include hints
//
- void acceptIncludes(DomIncludes *node);
- void acceptInclude(DomInclude *node);
+ void acceptIncludes(DomIncludes *node) Q_DECL_OVERRIDE;
+ void acceptInclude(DomInclude *node) Q_DECL_OVERRIDE;
bool scriptsActivated() const { return m_scriptsActivated; }
diff --git a/src/tools/uic/cpp/cppwriteinitialization.cpp b/src/tools/uic/cpp/cppwriteinitialization.cpp
index 5a1c1850d4..2627c4cf5c 100644
--- a/src/tools/uic/cpp/cppwriteinitialization.cpp
+++ b/src/tools/uic/cpp/cppwriteinitialization.cpp
@@ -913,6 +913,7 @@ void WriteInitialization::acceptLayout(DomLayout *node)
m_layoutMarginType = SubLayoutMargin;
DomPropertyList propList = node->elementProperty();
+ DomPropertyList newPropList;
if (m_layoutWidget) {
bool left, top, right, bottom;
left = top = right = bottom = false;
@@ -932,31 +933,38 @@ void WriteInitialization::acceptLayout(DomLayout *node)
DomProperty *p = new DomProperty();
p->setAttributeName(QLatin1String("leftMargin"));
p->setElementNumber(0);
- propList.append(p);
+ newPropList.append(p);
}
if (!top) {
DomProperty *p = new DomProperty();
p->setAttributeName(QLatin1String("topMargin"));
p->setElementNumber(0);
- propList.append(p);
+ newPropList.append(p);
}
if (!right) {
DomProperty *p = new DomProperty();
p->setAttributeName(QLatin1String("rightMargin"));
p->setElementNumber(0);
- propList.append(p);
+ newPropList.append(p);
}
if (!bottom) {
DomProperty *p = new DomProperty();
p->setAttributeName(QLatin1String("bottomMargin"));
p->setElementNumber(0);
- propList.append(p);
+ newPropList.append(p);
}
m_layoutWidget = false;
}
+ propList.append(newPropList);
+
writeProperties(varName, className, propList, WritePropertyIgnoreMargin|WritePropertyIgnoreSpacing);
+ // Clean up again:
+ propList.clear();
+ qDeleteAll(newPropList);
+ newPropList.clear();
+
m_layoutChain.push(node);
TreeWalker::acceptLayout(node);
m_layoutChain.pop();
diff --git a/src/tools/uic/cpp/cppwriteinitialization.h b/src/tools/uic/cpp/cppwriteinitialization.h
index 1cf3e750b4..53bc57d376 100644
--- a/src/tools/uic/cpp/cppwriteinitialization.h
+++ b/src/tools/uic/cpp/cppwriteinitialization.h
@@ -110,47 +110,47 @@ struct WriteInitialization : public TreeWalker
//
// widgets
//
- void acceptUI(DomUI *node);
- void acceptWidget(DomWidget *node);
- void acceptWidgetScripts(const DomScripts &, DomWidget *node, const DomWidgets &childWidgets);
+ void acceptUI(DomUI *node) Q_DECL_OVERRIDE;
+ void acceptWidget(DomWidget *node) Q_DECL_OVERRIDE;
+ void acceptWidgetScripts(const DomScripts &, DomWidget *node, const DomWidgets &childWidgets) Q_DECL_OVERRIDE;
- void acceptLayout(DomLayout *node);
- void acceptSpacer(DomSpacer *node);
- void acceptLayoutItem(DomLayoutItem *node);
+ void acceptLayout(DomLayout *node) Q_DECL_OVERRIDE;
+ void acceptSpacer(DomSpacer *node) Q_DECL_OVERRIDE;
+ void acceptLayoutItem(DomLayoutItem *node) Q_DECL_OVERRIDE;
//
// actions
//
- void acceptActionGroup(DomActionGroup *node);
- void acceptAction(DomAction *node);
- void acceptActionRef(DomActionRef *node);
+ void acceptActionGroup(DomActionGroup *node) Q_DECL_OVERRIDE;
+ void acceptAction(DomAction *node) Q_DECL_OVERRIDE;
+ void acceptActionRef(DomActionRef *node) Q_DECL_OVERRIDE;
//
// tab stops
//
- void acceptTabStops(DomTabStops *tabStops);
+ void acceptTabStops(DomTabStops *tabStops) Q_DECL_OVERRIDE;
//
// custom widgets
//
- void acceptCustomWidgets(DomCustomWidgets *node);
- void acceptCustomWidget(DomCustomWidget *node);
+ void acceptCustomWidgets(DomCustomWidgets *node) Q_DECL_OVERRIDE;
+ void acceptCustomWidget(DomCustomWidget *node) Q_DECL_OVERRIDE;
//
// layout defaults/functions
//
- void acceptLayoutDefault(DomLayoutDefault *node) { m_LayoutDefaultHandler.acceptLayoutDefault(node); }
- void acceptLayoutFunction(DomLayoutFunction *node) { m_LayoutDefaultHandler.acceptLayoutFunction(node); }
+ void acceptLayoutDefault(DomLayoutDefault *node) Q_DECL_OVERRIDE { m_LayoutDefaultHandler.acceptLayoutDefault(node); }
+ void acceptLayoutFunction(DomLayoutFunction *node) Q_DECL_OVERRIDE { m_LayoutDefaultHandler.acceptLayoutFunction(node); }
//
// signal/slot connections
//
- void acceptConnection(DomConnection *connection);
+ void acceptConnection(DomConnection *connection) Q_DECL_OVERRIDE;
//
// images
//
- void acceptImage(DomImage *image);
+ void acceptImage(DomImage *image) Q_DECL_OVERRIDE;
enum {
Use43UiFile = 0,
diff --git a/src/tools/uic/customwidgetsinfo.h b/src/tools/uic/customwidgetsinfo.h
index 5e58d6c3ce..6b0f7ed81a 100644
--- a/src/tools/uic/customwidgetsinfo.h
+++ b/src/tools/uic/customwidgetsinfo.h
@@ -48,10 +48,10 @@ class CustomWidgetsInfo : public TreeWalker
public:
CustomWidgetsInfo();
- void acceptUI(DomUI *node);
+ void acceptUI(DomUI *node) Q_DECL_OVERRIDE;
- void acceptCustomWidgets(DomCustomWidgets *node);
- void acceptCustomWidget(DomCustomWidget *node);
+ void acceptCustomWidgets(DomCustomWidgets *node) Q_DECL_OVERRIDE;
+ void acceptCustomWidget(DomCustomWidget *node) Q_DECL_OVERRIDE;
inline QStringList customWidgets() const
{ return m_customWidgets.keys(); }
diff --git a/src/tools/uic/databaseinfo.h b/src/tools/uic/databaseinfo.h
index 0c80ad9551..92e0b37fe1 100644
--- a/src/tools/uic/databaseinfo.h
+++ b/src/tools/uic/databaseinfo.h
@@ -47,8 +47,8 @@ class DatabaseInfo : public TreeWalker
public:
DatabaseInfo();
- void acceptUI(DomUI *node);
- void acceptWidget(DomWidget *node);
+ void acceptUI(DomUI *node) Q_DECL_OVERRIDE;
+ void acceptWidget(DomWidget *node) Q_DECL_OVERRIDE;
inline QStringList connections() const
{ return m_connections; }
diff --git a/src/tools/uic/validator.h b/src/tools/uic/validator.h
index 82f6b71b1a..82511776a8 100644
--- a/src/tools/uic/validator.h
+++ b/src/tools/uic/validator.h
@@ -48,14 +48,14 @@ struct Validator : public TreeWalker
{
Validator(Uic *uic);
- void acceptUI(DomUI *node);
- void acceptWidget(DomWidget *node);
+ void acceptUI(DomUI *node) Q_DECL_OVERRIDE;
+ void acceptWidget(DomWidget *node) Q_DECL_OVERRIDE;
- void acceptLayoutItem(DomLayoutItem *node);
- void acceptLayout(DomLayout *node);
+ void acceptLayoutItem(DomLayoutItem *node) Q_DECL_OVERRIDE;
+ void acceptLayout(DomLayout *node) Q_DECL_OVERRIDE;
- void acceptActionGroup(DomActionGroup *node);
- void acceptAction(DomAction *node);
+ void acceptActionGroup(DomActionGroup *node) Q_DECL_OVERRIDE;
+ void acceptAction(DomAction *node) Q_DECL_OVERRIDE;
private:
Driver *m_driver;