Improve error reporting when parsing JSON files

At least report the error string and the file offset where
the error happened.

Change-Id: Iaa1733593b8af2a7a52b67c0f495731f045d2c11
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
This commit is contained in:
Lars Knoll 2016-05-19 15:40:55 +02:00 committed by Lars Knoll
parent a11ced4981
commit 34c24ceb1f
3 changed files with 10 additions and 4 deletions
qmake/library
tests/auto/tools/qmakelib

View File

@ -389,11 +389,16 @@ static void addJsonValue(const QJsonValue &value, const QString &keyPrefix, ProV
}
}
static QMakeEvaluator::VisitReturn parseJsonInto(const QByteArray &json, const QString &into, ProValueMap *value)
QMakeEvaluator::VisitReturn QMakeEvaluator::parseJsonInto(const QByteArray &json, const QString &into, ProValueMap *value)
{
QJsonDocument document = QJsonDocument::fromJson(json);
if (document.isNull())
QJsonParseError error;
QJsonDocument document = QJsonDocument::fromJson(json, &error);
if (document.isNull()) {
if (error.error != QJsonParseError::NoError)
evalError(fL1S("Error parsing json at offset %1: %2")
.arg(error.offset).arg(error.errorString()));
return QMakeEvaluator::ReturnFalse;
}
QString currentKey = into + QLatin1Char('.');

View File

@ -234,6 +234,7 @@ public:
bool getMemberArgs(const ProKey &name, int srclen, const ProStringList &args,
int *start, int *end);
VisitReturn parseJsonInto(const QByteArray &json, const QString &into, ProValueMap *value);
VisitReturn writeFile(const QString &ctx, const QString &fn, QIODevice::OpenMode mode,
bool exe, const QString &contents);

View File

@ -2162,7 +2162,7 @@ void tst_qmakelib::addTestFunctions(const QString &qindir)
<< "jsontext = not good\n"
"parseJson(jsontext, json): OK = 1"
<< "OK = UNDEF"
<< ""
<< "##:2: Error parsing json at offset 1: illegal value"
<< true;
QTest::newRow("parseJson(): bad number of arguments")