diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2018-06-15 09:32:55 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2018-06-15 12:38:55 +0000 |
commit | 62808656466750ce5a0d42c656e45832220fedaa (patch) | |
tree | d05c4948395487fbe3819845bc3ebff080e550f3 /src/lib/corelib/language/moduleloader.cpp | |
parent | d994e54712efb69225d73d93fc57b89a3d39cacb (diff) |
Check for duplicate entries in multiplex properties
This used to lead to an error message about duplicate product names,
which left the user in the dark about the actual problem.
Change-Id: I460dcdf89112124cfd303529d42acd6c13fe9155
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'src/lib/corelib/language/moduleloader.cpp')
-rw-r--r-- | src/lib/corelib/language/moduleloader.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/lib/corelib/language/moduleloader.cpp b/src/lib/corelib/language/moduleloader.cpp index df47e36ea..41781cb7d 100644 --- a/src/lib/corelib/language/moduleloader.cpp +++ b/src/lib/corelib/language/moduleloader.cpp @@ -789,11 +789,18 @@ ModuleLoader::MultiplexInfo ModuleLoader::extractMultiplexInfo(Item *productItem if (!multiplexedType.isEmpty()) multiplexInfo.multiplexedType = VariantValue::create(multiplexedType); + Set<QString> uniqueMultiplexByQbsProperties; for (const QString &key : multiplexByQbsProperties) { const QString mappedKey = multiplexMap.property(key).toString(); if (mappedKey.isEmpty()) throw ErrorInfo(Tr::tr("There is no entry for '%1' in 'qbs.multiplexMap'.").arg(key)); + if (!uniqueMultiplexByQbsProperties.insert(mappedKey).second) { + throw ErrorInfo(Tr::tr("Duplicate entry '%1' in Product.%2.") + .arg(mappedKey, StringConstants::multiplexByQbsPropertiesProperty()), + productItem->location()); + } + const QScriptValue arr = m_evaluator->value(qbsModuleItem, key); if (arr.isUndefined()) continue; @@ -806,8 +813,15 @@ ModuleLoader::MultiplexInfo ModuleLoader::extractMultiplexInfo(Item *productItem MultiplexRow mprow; mprow.resize(arrlen); - for (quint32 i = 0; i < arrlen; ++i) - mprow[i] = VariantValue::create(arr.property(i).toVariant()); + Set<QVariant> entriesForKey; + for (quint32 i = 0; i < arrlen; ++i) { + const QVariant value = arr.property(i).toVariant(); + if (!entriesForKey.insert(value).second) { + throw ErrorInfo(Tr::tr("Duplicate entry '%1' in qbs.%2.") + .arg(value.toString(), key), productItem->location()); + } + mprow[i] = VariantValue::create(value); + } multiplexInfo.table = combine(multiplexInfo.table, mprow); multiplexInfo.properties.push_back(mappedKey); } |