From 78a1c46a86e205e599d641ffb3eae721705e0d1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C4=99drzej=20Nowacki?= Date: Wed, 18 Dec 2013 23:26:29 +0100 Subject: [PATCH] Mark each QT_MOC_LITERAL usage with a comment The comment shows to which string a QT_MOC_LITERAL is pointing. Change-Id: Ia389d750b1b1c21e2242bad6beceea4f9298ff8e Reviewed-by: Olivier Goffart --- src/tools/moc/generator.cpp | 6 ++++-- tests/auto/tools/moc/tst_moc.cpp | 11 +++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/tools/moc/generator.cpp b/src/tools/moc/generator.cpp index d831edfef01..3345cf4d64c 100644 --- a/src/tools/moc/generator.cpp +++ b/src/tools/moc/generator.cpp @@ -266,10 +266,12 @@ void Generator::generateCode() { int idx = 0; for (int i = 0; i < strings.size(); ++i) { - if (i) - fprintf(out, ",\n"); const QByteArray &str = strings.at(i); fprintf(out, "QT_MOC_LITERAL(%d, %d, %d)", i, idx, str.length()); + if (i != strings.size() - 1) + fputc(',', out); + const QByteArray comment = str.length() > 32 ? str.left(29) + "..." : str; + fprintf(out, " // \"%s\"\n", comment.constData()); idx += str.length() + 1; for (int j = 0; j < str.length(); ++j) { if (str.at(j) == '\\') { diff --git a/tests/auto/tools/moc/tst_moc.cpp b/tests/auto/tools/moc/tst_moc.cpp index 04140fa4a15..c5469bd33a2 100644 --- a/tests/auto/tools/moc/tst_moc.cpp +++ b/tests/auto/tools/moc/tst_moc.cpp @@ -174,6 +174,9 @@ class TestClassinfoWithEscapes: public QObject Q_OBJECT Q_CLASSINFO("escaped", "\"bar\"") Q_CLASSINFO("\"escaped\"", "foo") + Q_CLASSINFO("cpp c*/omment", "f/*oo") + Q_CLASSINFO("endswith\\", "Or?\?/") + Q_CLASSINFO("newline\n inside\n", "Or \r") public slots: void slotWithAReallyLongName(int) { } @@ -800,6 +803,14 @@ void tst_Moc::classinfoWithEscapes() const QMetaObject *mobj = &TestClassinfoWithEscapes::staticMetaObject; QCOMPARE(mobj->methodCount() - mobj->methodOffset(), 1); + QCOMPARE(mobj->classInfoCount(), 5); + QCOMPARE(mobj->classInfo(2).name(), "cpp c*/omment"); + QCOMPARE(mobj->classInfo(2).value(), "f/*oo"); + QCOMPARE(mobj->classInfo(3).name(), "endswith\\"); + QCOMPARE(mobj->classInfo(3).value(), "Or?\?/"); + QCOMPARE(mobj->classInfo(4).name(), "newline\n inside\n"); + QCOMPARE(mobj->classInfo(4).value(), "Or \r"); + QMetaMethod mm = mobj->method(mobj->methodOffset()); QCOMPARE(mm.methodSignature(), QByteArray("slotWithAReallyLongName(int)")); }