aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/language
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/corelib/language')
-rw-r--r--src/lib/corelib/language/astpropertiesitemhandler.cpp2
-rw-r--r--src/lib/corelib/language/asttools.cpp4
-rw-r--r--src/lib/corelib/language/asttools.h2
-rw-r--r--src/lib/corelib/language/item.cpp4
-rw-r--r--src/lib/corelib/language/itemreaderastvisitor.cpp2
-rw-r--r--src/lib/corelib/language/itemreadervisitorstate.cpp4
-rw-r--r--src/lib/corelib/language/moduleloader.cpp66
-rw-r--r--src/lib/corelib/language/moduleloader.h5
-rw-r--r--src/lib/corelib/language/projectresolver.cpp10
-rw-r--r--src/lib/corelib/language/projectresolver.h4
-rw-r--r--src/lib/corelib/language/propertydeclaration.h4
-rw-r--r--src/lib/corelib/language/scriptengine.cpp2
-rw-r--r--src/lib/corelib/language/scriptimporter.cpp9
-rw-r--r--src/lib/corelib/language/value.cpp2
-rw-r--r--src/lib/corelib/language/value.h6
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 &parameters, 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 &currentValues)
{
// 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;