Introduce a new warning in moc, to notify about duplicated properties
At the moment, it's possible to have 2 properties with the same name, which doesn't make much sense. Notify the user about that so she can react on it. Change-Id: I4865b71730921b79ce9dd8abb0cc760b3f1dbfd8 Reviewed-by: Olivier Goffart <ogoffart@woboq.com> Reviewed-by: Frederik Gladhorn <frederik.gladhorn@digia.com>bb10
parent
0af228700e
commit
52eccc6cfa
|
|
@ -1552,10 +1552,17 @@ void Moc::checkProperties(ClassDef *cdef)
|
|||
// specify get function, for compatibiliy we accept functions
|
||||
// returning pointers, or const char * for QByteArray.
|
||||
//
|
||||
QSet<QByteArray> definedProperties;
|
||||
for (int i = 0; i < cdef->propertyList.count(); ++i) {
|
||||
PropertyDef &p = cdef->propertyList[i];
|
||||
if (p.read.isEmpty() && p.member.isEmpty())
|
||||
continue;
|
||||
if (definedProperties.contains(p.name)) {
|
||||
QByteArray msg = "The property '" + p.name + "' is defined multiple times in class " + cdef->classname + ".";
|
||||
warning(msg.constData());
|
||||
}
|
||||
definedProperties.insert(p.name);
|
||||
|
||||
for (int j = 0; j < cdef->publicList.count(); ++j) {
|
||||
const FunctionDef &f = cdef->publicList.at(j);
|
||||
if (f.name != p.read)
|
||||
|
|
|
|||
|
|
@ -1792,6 +1792,14 @@ void tst_Moc::warnings_data()
|
|||
<< QString("IGNORE_ALL_STDOUT")
|
||||
<< QString("standard input:1: Warning: Property declaration x has no READ accessor function or associated MEMBER variable. The property will be invalid.");
|
||||
|
||||
// This should output a warning
|
||||
QTest::newRow("Duplicate property warning")
|
||||
<< QByteArray("class X : public QObject { Q_OBJECT Q_PROPERTY(int x READ x) Q_PROPERTY(int x READ y) };")
|
||||
<< QStringList()
|
||||
<< 0
|
||||
<< QString("IGNORE_ALL_STDOUT")
|
||||
<< QString("standard input:1: Warning: The property 'x' is defined multiple times in class X.");
|
||||
|
||||
// Passing "-nn" should NOT suppress the warning
|
||||
QTest::newRow("Invalid property warning with -nn")
|
||||
<< QByteArray("class X : public QObject { Q_OBJECT Q_PROPERTY(int x) };")
|
||||
|
|
|
|||
Loading…
Reference in New Issue