From fadb41e330d92c03633c9a596eeb9ff125227426 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Tue, 5 Jun 2018 12:31:00 +0200 Subject: Fix property values that are pure assignments of imports Those were broken, because QScriptValue::toVariant() doesn't take QScriptValue::prototype() into account, which we set for imports. Change-Id: I571f7a4b63df08b1768f61bcc1d622f3730c2a73 Reviewed-by: Christian Kandeler --- src/lib/corelib/language/projectresolver.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'src/lib/corelib') diff --git a/src/lib/corelib/language/projectresolver.cpp b/src/lib/corelib/language/projectresolver.cpp index 8b129c98b..4af79a5ce 100644 --- a/src/lib/corelib/language/projectresolver.cpp +++ b/src/lib/corelib/language/projectresolver.cpp @@ -1670,7 +1670,21 @@ void ProjectResolver::evaluateProperty(const Item *item, const QString &propName // NOTE: Loses type information if scriptValue.isUndefined == true, // as such QScriptValues become invalid QVariants. - QVariant v = scriptValue.isFunction() ? scriptValue.toString() : scriptValue.toVariant(); + QVariant v; + if (scriptValue.isFunction()) { + v = scriptValue.toString(); + } else { + v = scriptValue.toVariant(); + QVariantMap m = v.toMap(); + if (m.contains(StringConstants::importScopeNamePropertyInternal())) { + QVariantMap tmp = m; + m = scriptValue.prototype().toVariant().toMap(); + for (auto it = tmp.begin(); it != tmp.end(); ++it) + m.insert(it.key(), it.value()); + v = m; + } + } + if (pd.type() == PropertyDeclaration::Path && v.isValid()) { v = v.toString(); } else if (pd.type() == PropertyDeclaration::PathList -- cgit v1.2.3