aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/api/projectdata.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/corelib/api/projectdata.cpp')
-rw-r--r--src/lib/corelib/api/projectdata.cpp91
1 files changed, 66 insertions, 25 deletions
diff --git a/src/lib/corelib/api/projectdata.cpp b/src/lib/corelib/api/projectdata.cpp
index 750186539..628fe2a5d 100644
--- a/src/lib/corelib/api/projectdata.cpp
+++ b/src/lib/corelib/api/projectdata.cpp
@@ -40,15 +40,16 @@
#include "projectdata_p.h"
#include "propertymap_p.h"
+#include <language/builtindeclarations.h>
#include <language/language.h>
#include <language/propertymapinternal.h>
+#include <loader/loaderutils.h>
#include <tools/fileinfo.h>
#include <tools/jsliterals.h>
#include <tools/qbsassert.h>
#include <tools/qttools.h>
#include <tools/stlutils.h>
#include <tools/stringconstants.h>
-#include <tools/stringconstants.h>
#include <QtCore/qdir.h>
#include <QtCore/qjsonarray.h>
@@ -74,7 +75,7 @@ static QVariant getModuleProperty(const PropertyMap &properties, const QString &
{
const int lastDotIndex = fullPropertyName.lastIndexOf(QLatin1Char('.'));
if (lastDotIndex == -1)
- return QVariant();
+ return {};
return properties.getModuleProperty(fullPropertyName.left(lastDotIndex),
fullPropertyName.mid(lastDotIndex + 1));
}
@@ -558,7 +559,7 @@ const QString &ProductData::name() const
*/
QString ProductData::fullDisplayName() const
{
- return ResolvedProduct::fullDisplayName(name(), multiplexConfigurationId());
+ return fullProductDisplayName(name(), multiplexConfigurationId());
}
/*!
@@ -635,14 +636,14 @@ const QList<ArtifactData> ProductData::targetArtifacts() const
const QList<ArtifactData> ProductData::installableArtifacts() const
{
QList<ArtifactData> artifacts;
- for (const GroupData &g : qAsConst(d->groups)) {
+ for (const GroupData &g : std::as_const(d->groups)) {
const auto sourceArtifacts = g.allSourceArtifacts();
for (const ArtifactData &a : sourceArtifacts) {
if (a.installData().isInstallable())
artifacts << a;
}
}
- for (const ArtifactData &a : qAsConst(d->generatedArtifacts)) {
+ for (const ArtifactData &a : std::as_const(d->generatedArtifacts)) {
if (a.installData().isInstallable())
artifacts << a;
}
@@ -731,21 +732,16 @@ bool operator==(const ProductData &lhs, const ProductData &rhs)
if (!lhs.isValid() && !rhs.isValid())
return true;
- return lhs.isValid() == rhs.isValid()
- && lhs.name() == rhs.name()
- && lhs.targetName() == rhs.targetName()
- && lhs.type() == rhs.type()
- && lhs.version() == rhs.version()
- && lhs.dependencies() == rhs.dependencies()
- && lhs.profile() == rhs.profile()
- && lhs.multiplexConfigurationId() == rhs.multiplexConfigurationId()
- && lhs.location() == rhs.location()
- && lhs.groups() == rhs.groups()
- && lhs.generatedArtifacts() == rhs.generatedArtifacts()
- && lhs.properties() == rhs.properties()
- && lhs.moduleProperties() == rhs.moduleProperties()
- && lhs.isEnabled() == rhs.isEnabled()
- && lhs.isMultiplexed() == rhs.isMultiplexed();
+ return lhs.isValid() == rhs.isValid() && lhs.name() == rhs.name()
+ && lhs.targetName() == rhs.targetName() && lhs.type() == rhs.type()
+ && lhs.version() == rhs.version() && lhs.dependencies() == rhs.dependencies()
+ && lhs.profile() == rhs.profile()
+ && lhs.multiplexConfigurationId() == rhs.multiplexConfigurationId()
+ && lhs.location() == rhs.location() && lhs.groups() == rhs.groups()
+ && lhs.generatedArtifacts() == rhs.generatedArtifacts()
+ && qVariantMapsEqual(lhs.properties(), rhs.properties())
+ && lhs.moduleProperties() == rhs.moduleProperties() && lhs.isEnabled() == rhs.isEnabled()
+ && lhs.isMultiplexed() == rhs.isMultiplexed();
}
bool operator!=(const ProductData &lhs, const ProductData &rhs)
@@ -867,7 +863,7 @@ const QList<ProjectData> &ProjectData::subProjects() const
const QList<ProductData> ProjectData::allProducts() const
{
QList<ProductData> productList = products();
- for (const ProjectData &pd : qAsConst(d->subProjects))
+ for (const ProjectData &pd : std::as_const(d->subProjects))
productList << pd.allProducts();
return productList;
}
@@ -953,6 +949,52 @@ QStringList PropertyMap::allProperties() const
}
/*!
+ * \brief Returns the names of all modules whose properties can be requested.
+ */
+QStringList PropertyMap::allModules() const
+{
+ QStringList modules;
+ for (auto it = d->m_map->value().constBegin(); it != d->m_map->value().constEnd(); ++it) {
+ if (it.value().canConvert<QVariantMap>())
+ modules << it.key();
+ }
+ return modules;
+}
+
+/*!
+ * \brief Returns information about all properties of the given module.
+ */
+QList<PropertyMap::PropertyInfo> PropertyMap::allPropertiesForModule(const QString &module) const
+{
+ const QVariantMap moduleProps = d->m_map->value().value(module).toMap();
+ QList<PropertyInfo> properties;
+ const auto builtinProps = transformed<QStringList>(
+ BuiltinDeclarations::instance().declarationsForType(ItemType::Module).properties(),
+ [](const PropertyDeclaration &decl) { return decl.name(); });
+ for (auto it = moduleProps.begin(); it != moduleProps.end(); ++it) {
+ static const auto getType = [](const QVariant &v) -> QString {
+ switch (qVariantType(v)) {
+ case QMetaType::Bool:
+ return PropertyDeclaration::typeString(PropertyDeclaration::Boolean);
+ case QMetaType::Int:
+ return PropertyDeclaration::typeString(PropertyDeclaration::Integer);
+ case QMetaType::QVariantList:
+ return PropertyDeclaration::typeString(PropertyDeclaration::VariantList);
+ case QMetaType::QString:
+ return PropertyDeclaration::typeString(PropertyDeclaration::String);
+ case QMetaType::QStringList:
+ return PropertyDeclaration::typeString(PropertyDeclaration::StringList);
+ default:
+ return PropertyDeclaration::typeString(PropertyDeclaration::Variant);
+ }
+ };
+ properties << PropertyInfo{
+ it.key(), getType(it.value()), it.value(), builtinProps.contains(it.key())};
+ }
+ return properties;
+}
+
+/*!
* \brief Returns the value of the given property of a product or group.
*/
QVariant PropertyMap::getProperty(const QString &name) const
@@ -987,11 +1029,10 @@ QVariant PropertyMap::getModuleProperty(const QString &moduleName,
static QString mapToString(const QVariantMap &map, const QString &prefix)
{
- QStringList keys(map.keys());
- std::sort(keys.begin(), keys.end());
QString stringRep;
- for (const QString &key : qAsConst(keys)) {
- const QVariant &val = map.value(key);
+ for (auto it = map.cbegin(), end = map.cend(); it != end; ++it) {
+ const QString &key = it.key();
+ const QVariant &val = it.value();
if (val.userType() == QMetaType::QVariantMap) {
stringRep += mapToString(val.value<QVariantMap>(), prefix + key + QLatin1Char('.'));
} else {