From: Chris Adams Date: Wed, 3 Aug 2011 04:00:57 +0000 (+1000) Subject: Improve error messages from compiler for signals and slots X-Git-Url: http://git.silmor.de/gitweb/?a=commitdiff_plain;h=7964b819aefbee380ca24288c6234f5917211529;p=konrad%2Fqtdeclarative.git Improve error messages from compiler for signals and slots This commit ensures that correct line and column information is provided in some cases (duplicate signal or method name, etc). Task-number: QTBUG-15076 Change-Id: I483bdc92ef4f1d1d2ff565bb957385fd495672da Reviewed-on: http://codereview.qt.nokia.com/1619 Reviewed-by: Qt Sanity Bot Reviewed-by: Aaron Kennedy --- diff --git a/src/declarative/qml/qdeclarativecompiler.cpp b/src/declarative/qml/qdeclarativecompiler.cpp index 02c517c..f39e1ab 100644 --- a/src/declarative/qml/qdeclarativecompiler.cpp +++ b/src/declarative/qml/qdeclarativecompiler.cpp @@ -2381,25 +2381,27 @@ bool QDeclarativeCompiler::checkDynamicMeta(QDeclarativeParser::Object *obj) } for (int ii = 0; ii < obj->dynamicSignals.count(); ++ii) { - QByteArray name = obj->dynamicSignals.at(ii).name; + const QDeclarativeParser::Object::DynamicSignal &currSig = obj->dynamicSignals.at(ii); + QByteArray name = currSig.name; if (methodNames.contains(name)) - COMPILE_EXCEPTION(obj, tr("Duplicate signal name")); + COMPILE_EXCEPTION(&currSig, tr("Duplicate signal name")); QString nameStr = QString::fromUtf8(name); if (nameStr.at(0).isUpper()) - COMPILE_EXCEPTION(obj, tr("Signal names cannot begin with an upper case letter")); + COMPILE_EXCEPTION(&currSig, tr("Signal names cannot begin with an upper case letter")); if (enginePrivate->v8engine()->illegalNames().contains(nameStr)) - COMPILE_EXCEPTION(obj, tr("Illegal signal name")); + COMPILE_EXCEPTION(&currSig, tr("Illegal signal name")); methodNames.insert(name); } for (int ii = 0; ii < obj->dynamicSlots.count(); ++ii) { - QByteArray name = obj->dynamicSlots.at(ii).name; + const QDeclarativeParser::Object::DynamicSlot &currSlot = obj->dynamicSlots.at(ii); + QByteArray name = currSlot.name; if (methodNames.contains(name)) - COMPILE_EXCEPTION(obj, tr("Duplicate method name")); + COMPILE_EXCEPTION(&currSlot, tr("Duplicate method name")); QString nameStr = QString::fromUtf8(name); if (nameStr.at(0).isUpper()) - COMPILE_EXCEPTION(obj, tr("Method names cannot begin with an upper case letter")); + COMPILE_EXCEPTION(&currSlot, tr("Method names cannot begin with an upper case letter")); if (enginePrivate->v8engine()->illegalNames().contains(nameStr)) - COMPILE_EXCEPTION(obj, tr("Illegal method name")); + COMPILE_EXCEPTION(&currSlot, tr("Illegal method name")); methodNames.insert(name); } diff --git a/src/declarative/qml/qdeclarativeparser.cpp b/src/declarative/qml/qdeclarativeparser.cpp index 0447ea3..a405022 100644 --- a/src/declarative/qml/qdeclarativeparser.cpp +++ b/src/declarative/qml/qdeclarativeparser.cpp @@ -191,7 +191,7 @@ QDeclarativeParser::Object::DynamicSignal::DynamicSignal() QDeclarativeParser::Object::DynamicSignal::DynamicSignal(const DynamicSignal &o) : name(o.name), parameterTypes(o.parameterTypes), - parameterNames(o.parameterNames) + parameterNames(o.parameterNames), location(o.location) { } diff --git a/src/declarative/qml/qdeclarativeparser_p.h b/src/declarative/qml/qdeclarativeparser_p.h index 59c41ef..7080a8d 100644 --- a/src/declarative/qml/qdeclarativeparser_p.h +++ b/src/declarative/qml/qdeclarativeparser_p.h @@ -212,6 +212,7 @@ namespace QDeclarativeParser QByteArray name; QList parameterTypes; QList parameterNames; + LocationSpan location; }; struct DynamicSlot { DynamicSlot(); diff --git a/src/declarative/qml/qdeclarativescriptparser.cpp b/src/declarative/qml/qdeclarativescriptparser.cpp index 3f84329..dcd12e2 100644 --- a/src/declarative/qml/qdeclarativescriptparser.cpp +++ b/src/declarative/qml/qdeclarativescriptparser.cpp @@ -528,6 +528,7 @@ bool ProcessAST::visit(AST::UiPublicMember *node) p = p->finish(); } + signal.location = location(node->typeToken, node->semicolonToken); _stateStack.top().object->dynamicSignals << signal; } else { const QString memberType = node->memberType->asString(); diff --git a/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.3.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.3.errors.txt index c5860a2..8226c16 100644 --- a/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.3.errors.txt +++ b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.3.errors.txt @@ -1 +1 @@ -3:1:Duplicate signal name +5:12:Duplicate signal name diff --git a/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.4.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.4.errors.txt index b293c86..18e0745 100644 --- a/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.4.errors.txt +++ b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.4.errors.txt @@ -1 +1 @@ -3:1:Duplicate method name +5:5:Duplicate method name diff --git a/tests/auto/declarative/qdeclarativelanguage/data/method.1.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/method.1.errors.txt index b10984f..0dab632 100644 --- a/tests/auto/declarative/qdeclarativelanguage/data/method.1.errors.txt +++ b/tests/auto/declarative/qdeclarativelanguage/data/method.1.errors.txt @@ -1 +1 @@ -3:1:Method names cannot begin with an upper case letter +4:5:Method names cannot begin with an upper case letter diff --git a/tests/auto/declarative/qdeclarativelanguage/data/signal.4.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/signal.4.errors.txt index d96f9e3..513ff60 100644 --- a/tests/auto/declarative/qdeclarativelanguage/data/signal.4.errors.txt +++ b/tests/auto/declarative/qdeclarativelanguage/data/signal.4.errors.txt @@ -1 +1 @@ -3:1:Signal names cannot begin with an upper case letter +4:12:Signal names cannot begin with an upper case letter