diff options
Diffstat (limited to 'src/lib/corelib/language')
-rw-r--r-- | src/lib/corelib/language/astpropertiesitemhandler.cpp | 2 | ||||
-rw-r--r-- | src/lib/corelib/language/asttools.cpp | 4 | ||||
-rw-r--r-- | src/lib/corelib/language/asttools.h | 2 | ||||
-rw-r--r-- | src/lib/corelib/language/item.cpp | 4 | ||||
-rw-r--r-- | src/lib/corelib/language/itemreaderastvisitor.cpp | 2 | ||||
-rw-r--r-- | src/lib/corelib/language/itemreadervisitorstate.cpp | 4 | ||||
-rw-r--r-- | src/lib/corelib/language/moduleloader.cpp | 66 | ||||
-rw-r--r-- | src/lib/corelib/language/moduleloader.h | 5 | ||||
-rw-r--r-- | src/lib/corelib/language/projectresolver.cpp | 10 | ||||
-rw-r--r-- | src/lib/corelib/language/projectresolver.h | 4 | ||||
-rw-r--r-- | src/lib/corelib/language/propertydeclaration.h | 4 | ||||
-rw-r--r-- | src/lib/corelib/language/scriptengine.cpp | 2 | ||||
-rw-r--r-- | src/lib/corelib/language/scriptimporter.cpp | 9 | ||||
-rw-r--r-- | src/lib/corelib/language/value.cpp | 2 | ||||
-rw-r--r-- | src/lib/corelib/language/value.h | 6 |
15 files changed, 60 insertions, 66 deletions
diff --git a/src/lib/corelib/language/astpropertiesitemhandler.cpp b/src/lib/corelib/language/astpropertiesitemhandler.cpp index 1ea78bf79..b28fe7d76 100644 --- a/src/lib/corelib/language/astpropertiesitemhandler.cpp +++ b/src/lib/corelib/language/astpropertiesitemhandler.cpp @@ -139,7 +139,7 @@ private: value = JSSourceValue::create(true); value->setFile(conditionalValue->file()); item->setProperty(propertyName, value); - value->setSourceCode(QStringRef(&StringConstants::baseVar())); + value->setSourceCode(StringConstants::baseVar()); value->setSourceUsesBaseFlag(); } m_alternative.value = conditionalValue; diff --git a/src/lib/corelib/language/asttools.cpp b/src/lib/corelib/language/asttools.cpp index 1b6abac7f..0d0c234c4 100644 --- a/src/lib/corelib/language/asttools.cpp +++ b/src/lib/corelib/language/asttools.cpp @@ -64,10 +64,10 @@ QString textOf(const QString &source, QbsQmlJS::AST::Node *node) int(node->lastSourceLocation().end() - node->firstSourceLocation().begin())); } -QStringRef textRefOf(const QString &source, QbsQmlJS::AST::Node *node) +QStringView textViewOf(const QString &source, QbsQmlJS::AST::Node *node) { const quint32 firstBegin = node->firstSourceLocation().begin(); - return source.midRef(firstBegin, int(node->lastSourceLocation().end() - firstBegin)); + return QStringView(source).mid(firstBegin, int(node->lastSourceLocation().end() - firstBegin)); } } // namespace Internal diff --git a/src/lib/corelib/language/asttools.h b/src/lib/corelib/language/asttools.h index b4f5c4d98..086d59290 100644 --- a/src/lib/corelib/language/asttools.h +++ b/src/lib/corelib/language/asttools.h @@ -50,7 +50,7 @@ namespace Internal { QStringList toStringList(QbsQmlJS::AST::UiQualifiedId *qid); CodeLocation toCodeLocation(const QString &filePath, const QbsQmlJS::AST::SourceLocation &location); QString textOf(const QString &source, QbsQmlJS::AST::Node *node); -QStringRef textRefOf(const QString &source, QbsQmlJS::AST::Node *node); +QStringView textViewOf(const QString &source, QbsQmlJS::AST::Node *node); } // namespace Internal } // namespace qbs diff --git a/src/lib/corelib/language/item.cpp b/src/lib/corelib/language/item.cpp index a86cfeac1..fa33a264d 100644 --- a/src/lib/corelib/language/item.cpp +++ b/src/lib/corelib/language/item.cpp @@ -260,8 +260,8 @@ void Item::setupForBuiltinType(Logger &logger) sourceValue->setIsBuiltinDefaultValue(); sourceValue->setFile(file()); sourceValue->setSourceCode(pd.initialValueSource().isEmpty() - ? QStringRef(&StringConstants::undefinedValue()) - : QStringRef(&pd.initialValueSource())); + ? StringConstants::undefinedValue() + : pd.initialValueSource()); m_properties.insert(pd.name(), sourceValue); } else if (pd.isDeprecated()) { const DeprecationInfo &di = pd.deprecationInfo(); diff --git a/src/lib/corelib/language/itemreaderastvisitor.cpp b/src/lib/corelib/language/itemreaderastvisitor.cpp index 901772d16..f22a1c4e8 100644 --- a/src/lib/corelib/language/itemreaderastvisitor.cpp +++ b/src/lib/corelib/language/itemreaderastvisitor.cpp @@ -271,7 +271,7 @@ bool ItemReaderASTVisitor::handleBindingRhs(AST::Statement *statement, value->m_flags |= JSSourceValue::HasFunctionForm; value->setFile(m_file); - value->setSourceCode(textRefOf(m_file->content(), statement)); + value->setSourceCode(textViewOf(m_file->content(), statement)); value->setLocation(statement->firstSourceLocation().startLine, statement->firstSourceLocation().startColumn); diff --git a/src/lib/corelib/language/itemreadervisitorstate.cpp b/src/lib/corelib/language/itemreadervisitorstate.cpp index 1946715b8..a51b7eab4 100644 --- a/src/lib/corelib/language/itemreadervisitorstate.cpp +++ b/src/lib/corelib/language/itemreadervisitorstate.cpp @@ -99,7 +99,7 @@ private: QExplicitlySharedDataPointer<ASTCacheValueData> d; }; -class ItemReaderVisitorState::ASTCache : public QHash<QString, ASTCacheValue> {}; +class ItemReaderVisitorState::ASTCache : public std::unordered_map<QString, ASTCacheValue> {}; ItemReaderVisitorState::ItemReaderVisitorState(Logger &logger) @@ -125,7 +125,7 @@ Item *ItemReaderVisitorState::readFile(const QString &filePath, const QStringLis m_filesRead.insert(filePath); QTextStream stream(&file); - stream.setCodec("UTF-8"); + setupDefaultCodec(stream); const QString &code = stream.readAll(); QbsQmlJS::Lexer lexer(cacheValue.engine()); lexer.setCode(code, 1); diff --git a/src/lib/corelib/language/moduleloader.cpp b/src/lib/corelib/language/moduleloader.cpp index 5c4033c3f..f65421a35 100644 --- a/src/lib/corelib/language/moduleloader.cpp +++ b/src/lib/corelib/language/moduleloader.cpp @@ -644,7 +644,7 @@ void ModuleLoader::handleProject(ModuleLoaderResult *loadResult, TopLevelProjectContext *topLevelProjectContext, Item *projectItem, const Set<QString> &referencedFilePaths) { - QScopedPointer<ProjectContext> p(new ProjectContext); + auto p = std::make_unique<ProjectContext>(); auto &projectContext = *p; projectContext.topLevelProject = topLevelProjectContext; projectContext.result = loadResult; @@ -672,8 +672,7 @@ void ModuleLoader::handleProject(ModuleLoaderResult *loadResult, m_disabledProjects.insert(projectContext.name); return; } - p.take(); - topLevelProjectContext->projects.push_back(&projectContext); + topLevelProjectContext->projects.push_back(p.release()); m_reader->pushExtraSearchPaths(readExtraSearchPaths(projectItem) << projectItem->file()->dirPath()); projectContext.searchPathsStack = m_reader->extraSearchPathsStack(); @@ -1339,7 +1338,7 @@ void ModuleLoader::setupProductDependencies(ProductContext *productContext, || !containsKey(m_productsWithDeferredDependsItems, productContext)) { addProductModuleDependencies(productContext); } - productContext->project->result->productInfos.insert(item, productContext->info); + productContext->project->result->productInfos[item] = productContext->info; } // Leaf modules first. @@ -1515,7 +1514,7 @@ void ModuleLoader::handleProduct(ModuleLoader::ProductContext *productContext) handleGroup(productContext, child, reverseModuleDeps); } } - productContext->project->result->productInfos.insert(item, productContext->info); + productContext->project->result->productInfos[item] = productContext->info; } static Item *rootPrototype(Item *item) @@ -1544,7 +1543,7 @@ private: void check(const QVariantMap ¶meters, const QualifiedId &moduleName) const { for (auto it = parameters.begin(); it != parameters.end(); ++it) { - if (it.value().type() == QVariant::Map) { + if (it.value().userType() == QMetaType::QVariantMap) { check(it.value().toMap(), QualifiedId(moduleName) << it.key()); } else { const auto &deps = m_productItem->modules(); @@ -1942,7 +1941,7 @@ void ModuleLoader::printProfilingInfo() static void mergeParameters(QVariantMap &dst, const QVariantMap &src) { for (auto it = src.begin(); it != src.end(); ++it) { - if (it.value().type() == QVariant::Map) { + if (it.value().userType() == QMetaType::QVariantMap) { QVariant &vdst = dst[it.key()]; QVariantMap mdst = vdst.toMap(); mergeParameters(mdst, it.value().toMap()); @@ -2370,7 +2369,7 @@ void ModuleLoader::adjustDefiningItemsInGroupModuleInstances(const Item::Module // c) The defining item is a different instance of the module, i.e. it was instantiated // in some other module. - QHash<Item *, Item *> definingItemReplacements; + std::unordered_map<Item *, Item *> definingItemReplacements; Item *modulePrototype = rootPrototype(module.item->prototype()); QBS_CHECK(modulePrototype->type() == ItemType::Module @@ -3207,30 +3206,30 @@ QStringList &ModuleLoader::getModuleFileNames(const QString &dirPath) return moduleFileNames; } -// returns QVariant::Invalid for types that do not need conversion -static QVariant::Type variantType(PropertyDeclaration::Type t) +// returns QMetaType::UnknownType for types that do not need conversion +static QMetaType::Type variantType(PropertyDeclaration::Type t) { switch (t) { case PropertyDeclaration::UnknownType: break; case PropertyDeclaration::Boolean: - return QVariant::Bool; + return QMetaType::Bool; case PropertyDeclaration::Integer: - return QVariant::Int; + return QMetaType::Int; case PropertyDeclaration::Path: - return QVariant::String; + return QMetaType::QString; case PropertyDeclaration::PathList: - return QVariant::StringList; + return QMetaType::QStringList; case PropertyDeclaration::String: - return QVariant::String; + return QMetaType::QString; case PropertyDeclaration::StringList: - return QVariant::StringList; + return QMetaType::QStringList; case PropertyDeclaration::VariantList: - return QVariant::List; + return QMetaType::QVariantList; case PropertyDeclaration::Variant: break; } - return QVariant::Invalid; + return QMetaType::UnknownType; } static QVariant convertToPropertyType(const QVariant &v, PropertyDeclaration::Type t, @@ -3238,16 +3237,16 @@ static QVariant convertToPropertyType(const QVariant &v, PropertyDeclaration::Ty { if (v.isNull() || !v.isValid()) return v; - const QVariant::Type vt = variantType(t); - if (vt == QVariant::Invalid) + const auto vt = variantType(t); + if (vt == QMetaType::UnknownType) return v; // Handle the foo,bar,bla stringlist syntax. - if (t == PropertyDeclaration::StringList && v.type() == QVariant::String) + if (t == PropertyDeclaration::StringList && v.userType() == QMetaType::QString) return v.toString().split(QLatin1Char(',')); QVariant c = v; - if (!c.convert(vt)) { + if (!qVariantConvert(c, vt)) { QStringList name = namePrefix; name << key; throw ErrorInfo(Tr::tr("Value '%1' of property '%2' has incompatible type.") @@ -3802,13 +3801,14 @@ QStringList ModuleLoader::findExistingModulePaths( QVariantMap ModuleLoader::moduleProviderConfig(ModuleLoader::ProductContext &product) { - if (product.moduleProviderConfigRetrieved) - return product.theModuleProviderConfig; + if (product.theModuleProviderConfig) + return *product.theModuleProviderConfig; + QVariantMap providerConfig; const ItemValueConstPtr configItemValue = product.item->itemProperty(StringConstants::moduleProviders()); if (configItemValue) { const std::function<void(const Item *, QualifiedId)> collectMap - = [this, &product, &collectMap](const Item *item, const QualifiedId &name) { + = [this, &providerConfig, &collectMap](const Item *item, const QualifiedId &name) { const Item::PropertyMap &props = item->properties(); for (auto it = props.begin(); it != props.end(); ++it) { QVariant value; @@ -3826,9 +3826,9 @@ QVariantMap ModuleLoader::moduleProviderConfig(ModuleLoader::ProductContext &pro value = static_cast<VariantValue *>(it.value().get())->value(); break; } - QVariantMap m = product.theModuleProviderConfig.value(name.toString()).toMap(); + QVariantMap m = providerConfig.value(name.toString()).toMap(); m.insert(it.key(), value); - product.theModuleProviderConfig.insert(name.toString(), m); + providerConfig.insert(name.toString(), m); } }; configItemValue->item()->setScope(product.item); @@ -3841,15 +3841,14 @@ QVariantMap ModuleLoader::moduleProviderConfig(ModuleLoader::ProductContext &pro const QVariantMap providerConfigFromBuildConfig = it.value().toMap(); if (providerConfigFromBuildConfig.empty()) continue; - QVariantMap currentMapForProvider = product.theModuleProviderConfig.value(provider).toMap(); + QVariantMap currentMapForProvider = providerConfig.value(provider).toMap(); for (auto propIt = providerConfigFromBuildConfig.begin(); propIt != providerConfigFromBuildConfig.end(); ++propIt) { currentMapForProvider.insert(propIt.key(), propIt.value()); } - product.theModuleProviderConfig.insert(provider, currentMapForProvider); + providerConfig.insert(provider, currentMapForProvider); } - product.moduleProviderConfigRetrieved = true; - return product.theModuleProviderConfig; + return *(product.theModuleProviderConfig = std::move(providerConfig)); } ModuleLoader::ModuleProviderResult ModuleLoader::findModuleProvider(const QualifiedId &name, @@ -3887,7 +3886,7 @@ ModuleLoader::ModuleProviderResult ModuleLoader::findModuleProvider(const Qualif const QVariant moduleConfig = moduleProviderConfig(product).value(name.toString()); QTextStream stream(&dummyItemFile); using Qt::endl; - stream.setCodec("UTF-8"); + setupDefaultCodec(stream); stream << "import qbs.FileInfo" << endl; stream << "import qbs.Utilities" << endl; stream << "import '" << providerFile << "' as Provider" << endl; @@ -4166,8 +4165,7 @@ void ModuleLoader::handleProductError(const ErrorInfo &error, const auto errorItems = error.items(); for (const ErrorItem &ei : errorItems) productContext->info.delayedError.append(ei.description(), ei.codeLocation()); - productContext->project->result->productInfos.insert(productContext->item, - productContext->info); + productContext->project->result->productInfos[productContext->item] = productContext->info; m_disabledItems << productContext->item; m_erroneousProducts.insert(productContext->name); } diff --git a/src/lib/corelib/language/moduleloader.h b/src/lib/corelib/language/moduleloader.h index df853e77f..3dc091003 100644 --- a/src/lib/corelib/language/moduleloader.h +++ b/src/lib/corelib/language/moduleloader.h @@ -106,7 +106,7 @@ struct ModuleLoaderResult std::shared_ptr<ItemPool> itemPool; Item *root; - QHash<Item *, ProductInfo> productInfos; + std::unordered_map<Item *, ProductInfo> productInfos; std::vector<ProbeConstPtr> projectProbes; ModuleProviderInfoList moduleProviderInfo; Set<QString> qbsFiles; @@ -187,8 +187,7 @@ private: std::vector<QStringList> newlyAddedModuleProviderSearchPaths; Set<QualifiedId> knownModuleProviders; - QVariantMap theModuleProviderConfig; - bool moduleProviderConfigRetrieved = false; + std::optional<QVariantMap> theModuleProviderConfig; // The key corresponds to DeferredDependsContext.exportingProductItem, which is the // only value from that data structure that we still need here. diff --git a/src/lib/corelib/language/projectresolver.cpp b/src/lib/corelib/language/projectresolver.cpp index 570b3513f..4ae5f3ca7 100644 --- a/src/lib/corelib/language/projectresolver.cpp +++ b/src/lib/corelib/language/projectresolver.cpp @@ -655,8 +655,8 @@ QVariantMap ProjectResolver::resolveAdditionalModuleProperties(const Item *group const QVariantMap ¤tValues) { // Step 1: Retrieve the properties directly set in the group - const ModulePropertiesPerGroup &mp = m_loadResult.productInfos.value(m_productContext->item) - .modulePropertiesSetInGroups; + const ModulePropertiesPerGroup &mp = mapValue( + m_loadResult.productInfos, m_productContext->item).modulePropertiesSetInGroups; const auto it = mp.find(group); if (it == mp.end()) return {}; @@ -900,7 +900,7 @@ void ProjectResolver::adaptExportedPropertyValues(const Item *shadowProductItem) const std::function<QVariant(const QVariantMap &, const QVariant &)> mapper = [&stringListMapper, &mapper]( const QVariantMap &mappings, const QVariant &value) -> QVariant { - switch (static_cast<QMetaType::Type>(value.type())) { + switch (static_cast<QMetaType::Type>(value.userType())) { case QMetaType::QString: return stringMapper(mappings, value.toString()); case QMetaType::QStringList: @@ -945,7 +945,7 @@ void ProjectResolver::collectExportedProductDependencies() } } const ModuleLoaderResult::ProductInfo &importingProductInfo - = m_loadResult.productInfos.value(importingProductItem); + = mapValue(m_loadResult.productInfos, importingProductItem); const ProductDependencyInfos &depInfos = getProductDependencies(dummyProduct, importingProductInfo); for (const auto &dep : depInfos.dependencies) { @@ -1610,7 +1610,7 @@ void ProjectResolver::resolveProductDependencies(const ProjectContext &projectCo continue; Item *productItem = m_productItemMap.value(rproduct); const ModuleLoaderResult::ProductInfo &productInfo - = m_loadResult.productInfos.value(productItem); + = mapValue(m_loadResult.productInfos, productItem); const ProductDependencyInfos &depInfos = getProductDependencies(rproduct, productInfo); if (depInfos.hasDisabledDependency) disabledDependency = true; diff --git a/src/lib/corelib/language/projectresolver.h b/src/lib/corelib/language/projectresolver.h index 73f3442ac..52d835535 100644 --- a/src/lib/corelib/language/projectresolver.h +++ b/src/lib/corelib/language/projectresolver.h @@ -186,8 +186,8 @@ private: QHash<ResolvedProductPtr, Item *> m_productItemMap; mutable QHash<FileContextConstPtr, ResolvedFileContextPtr> m_fileContextMap; mutable QHash<CodeLocation, ScriptFunctionPtr> m_scriptFunctionMap; - mutable QHash<std::pair<QStringRef, QStringList>, QString> m_scriptFunctions; - mutable QHash<QStringRef, QString> m_sourceCode; + mutable QHash<std::pair<QStringView, QStringList>, QString> m_scriptFunctions; + mutable QHash<QStringView, QString> m_sourceCode; const SetupProjectParameters m_setupParams; ModuleLoaderResult m_loadResult; Set<CodeLocation> m_groupLocationWarnings; diff --git a/src/lib/corelib/language/propertydeclaration.h b/src/lib/corelib/language/propertydeclaration.h index 5ced7eccb..77b6837f5 100644 --- a/src/lib/corelib/language/propertydeclaration.h +++ b/src/lib/corelib/language/propertydeclaration.h @@ -43,10 +43,6 @@ #include <QtCore/qshareddata.h> #include <QtCore/qstring.h> -QT_BEGIN_NAMESPACE -class QStringList; -QT_END_NAMESPACE - namespace qbs { namespace Internal { class DeprecationInfo; diff --git a/src/lib/corelib/language/scriptengine.cpp b/src/lib/corelib/language/scriptengine.cpp index e79ec54d7..8b3d6fa76 100644 --- a/src/lib/corelib/language/scriptengine.cpp +++ b/src/lib/corelib/language/scriptengine.cpp @@ -381,7 +381,7 @@ void ScriptEngine::importFile(const QString &filePath, QScriptValue &targetObjec if (Q_UNLIKELY(!file.open(QFile::ReadOnly))) throw ErrorInfo(tr("Cannot open '%1'.").arg(filePath)); QTextStream stream(&file); - stream.setCodec("UTF-8"); + setupDefaultCodec(stream); const QString sourceCode = stream.readAll(); file.close(); m_currentDirPathStack.push(FileInfo::path(filePath)); diff --git a/src/lib/corelib/language/scriptimporter.cpp b/src/lib/corelib/language/scriptimporter.cpp index 9c6d4d38e..40162eb12 100644 --- a/src/lib/corelib/language/scriptimporter.cpp +++ b/src/lib/corelib/language/scriptimporter.cpp @@ -95,7 +95,7 @@ private: return false; } - void add(const QStringRef &name) + void add(QStringView name) { if (m_first) { m_first = false; @@ -104,9 +104,10 @@ private: m_suffix.reserve(m_suffix.length() + name.length() * 2 + 2); m_suffix += QLatin1Char(','); } - m_suffix += name; - m_suffix += QLatin1Char(':'); - m_suffix += name; + // ugly, but qt5 does not have append overload for QStringView + m_suffix.append(name.data(), name.size()); + m_suffix.append(QLatin1Char(':')); + m_suffix.append(name.data(), name.size()); } bool m_first = false; diff --git a/src/lib/corelib/language/value.cpp b/src/lib/corelib/language/value.cpp index b3e782519..16326f521 100644 --- a/src/lib/corelib/language/value.cpp +++ b/src/lib/corelib/language/value.cpp @@ -189,7 +189,7 @@ VariantValuePtr VariantValue::create(const QVariant &v) { if (!v.isValid()) return invalidValue(); - if (static_cast<QMetaType::Type>(v.type()) == QMetaType::Bool) + if (static_cast<QMetaType::Type>(v.userType()) == QMetaType::Bool) return v.toBool() ? VariantValue::trueValue() : VariantValue::falseValue(); return std::make_shared<VariantValue>(v); } diff --git a/src/lib/corelib/language/value.h b/src/lib/corelib/language/value.h index 287060809..5f6b5ca16 100644 --- a/src/lib/corelib/language/value.h +++ b/src/lib/corelib/language/value.h @@ -121,8 +121,8 @@ public: void apply(ValueHandler *handler) override { handler->handle(this); } ValuePtr clone() const override; - void setSourceCode(const QStringRef &sourceCode) { m_sourceCode = sourceCode; } - const QStringRef &sourceCode() const { return m_sourceCode; } + void setSourceCode(QStringView sourceCode) { m_sourceCode = sourceCode; } + QStringView sourceCode() const { return m_sourceCode; } QString sourceCodeForEvaluation() const; void setLocation(int line, int column); @@ -179,7 +179,7 @@ public: void setDefiningItem(Item *item) override; private: - QStringRef m_sourceCode; + QStringView m_sourceCode; int m_line; int m_column; FileContextPtr m_file; |