CPlusPlus: Use member initialization in AST.h

This also means that the implicitly-declared default constructor
does the right thing now, and the generator does not have to
take care of updating it anymore.

Change-Id: Ib4de88c506839398ce77ab4eaf4680a9b7e6091e
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
This commit is contained in:
hjk
2019-07-26 12:20:44 +02:00
parent d16330de6d
commit 1fb41647eb
2 changed files with 601 additions and 1746 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -903,29 +903,6 @@ private:
Overview oo;
};
static QList<QTextCursor> removeConstructors(ClassSpecifierAST *classAST,
TranslationUnit *translationUnit,
QTextDocument *document)
{
Overview oo;
QList<QTextCursor> cursors;
const QString className = oo(classAST->symbol->name());
for (DeclarationListAST *iter = classAST->member_specifier_list; iter; iter = iter->next) {
if (FunctionDefinitionAST *funDef = iter->value->asFunctionDefinition()) {
if (oo(funDef->symbol->name()) == className) {
// found it:
QTextCursor tc = createCursor(translationUnit, funDef, document);
tc.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor);
tc.setPosition(tc.position() + 1, QTextCursor::KeepAnchor);
cursors.append(tc);
}
}
}
return cursors;
}
static QStringList collectFieldNames(ClassSpecifierAST *classAST, bool onlyTokensAndASTNodes)
{
QStringList fields;
@@ -953,32 +930,6 @@ static QStringList collectFieldNames(ClassSpecifierAST *classAST, bool onlyToken
return fields;
}
static QString createConstructor(ClassSpecifierAST *classAST)
{
Overview oo;
Class *clazz = classAST->symbol;
QString result(QLatin1String(" "));
result.append(oo(clazz->name()));
result.append(QLatin1String("()\n"));
QStringList classFields = collectFieldNames(classAST, false);
for (int i = 0; i < classFields.size(); ++i) {
if (i == 0) {
result.append(QLatin1String(" : "));
result.append(classFields.at(i));
result.append(QLatin1String("(0)\n"));
} else {
result.append(QLatin1String(" , "));
result.append(classFields.at(i));
result.append(QLatin1String("(0)\n"));
}
}
result.append(QLatin1String(" {}\n"));
return result;
}
bool checkGenerated(const QTextCursor &cursor, int *doxyStart)
{
BackwardsScanner tokens(cursor, LanguageFeatures::defaultFeatures(), 10, QString(), false);
@@ -1378,8 +1329,6 @@ QStringList generateAST_H(const Snapshot &snapshot, const QDir &cplusplusDir, co
QList<QTextCursor> baseCastMethodCursors = removeCastMethods(astNodes.base);
QMap<ClassSpecifierAST *, QList<QTextCursor> > cursors;
QMap<ClassSpecifierAST *, QString> replacementCastMethods;
QMap<ClassSpecifierAST *, QList<QTextCursor> > constructors;
QMap<ClassSpecifierAST *, QString> replacementConstructors;
Overview oo;
@@ -1395,10 +1344,6 @@ QStringList generateAST_H(const Snapshot &snapshot, const QDir &cplusplusDir, co
QString::fromLatin1(" virtual %1 *%2() { return nullptr; }\n")
.arg(className, methodName));
astDerivedClasses.append(className);
constructors[classAST] = removeConstructors(classAST, AST_h_document->translationUnit(),
&document);
replacementConstructors[classAST] = createConstructor(classAST);
}
if (! baseCastMethodCursors.isEmpty()) {
@@ -1419,16 +1364,8 @@ QStringList generateAST_H(const Snapshot &snapshot, const QDir &cplusplusDir, co
c[i].removeSelectedText();
}
}
{ // remove the constructors.
QList<QTextCursor> c = constructors.value(classAST);
for (int i = 0; i < c.length(); ++i) {
c[i].removeSelectedText();
}
}
astNodes.endOfPublicClassSpecifiers[classIndex].insertText(
replacementConstructors.value(classAST) +
QLatin1String("\n") +
replacementCastMethods.value(classAST));
}