summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2023-04-20 15:42:51 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2023-04-21 13:06:35 +0000
commit43f173106ee30e07c951f2b13e04a9160b2edaad (patch)
tree1f9661fb7f108ff8e8ea057b8f31c08dca12f094
parentaa32afbb934e57a5cc0298ef5ec75af2da86a9d9 (diff)
downloadqbs-43f173106ee30e07c951f2b13e04a9160b2edaad.tar.gz
Clean up ProjectTreeBuilder interface
ProductContext is no longer used elsewhere. Change-Id: I6bf158d61153c9a05c4963bacd64801b3f0309ec Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
-rw-r--r--src/lib/corelib/language/projecttreebuilder.cpp122
-rw-r--r--src/lib/corelib/language/projecttreebuilder.h123
2 files changed, 122 insertions, 123 deletions
diff --git a/src/lib/corelib/language/projecttreebuilder.cpp b/src/lib/corelib/language/projecttreebuilder.cpp
index 66cf34e81..42fc59717 100644
--- a/src/lib/corelib/language/projecttreebuilder.cpp
+++ b/src/lib/corelib/language/projecttreebuilder.cpp
@@ -42,6 +42,7 @@
#include "builtindeclarations.h"
#include "evaluator.h"
#include "filecontext.h"
+#include "filetags.h"
#include "groupshandler.h"
#include "itemreader.h"
#include "language.h"
@@ -66,6 +67,7 @@
#include <tools/settings.h>
#include <tools/setupprojectparameters.h>
#include <tools/stringconstants.h>
+#include <tools/version.h>
#include <QDir>
#include <QDirIterator>
@@ -75,11 +77,129 @@
#include <memory>
#include <optional>
#include <queue>
+#include <stack>
#include <utility>
#include <vector>
namespace qbs::Internal {
+namespace {
+
+class ContextBase
+{
+public:
+ Item *item = nullptr;
+ Item *scope = nullptr;
+ QString name;
+};
+
+class ProjectContext;
+
+class ProductContext : public ContextBase
+{
+public:
+ ProjectContext *project = nullptr;
+ Item *mergedExportItem = nullptr;
+ ProjectTreeBuilder::Result::ProductInfo info;
+ QString profileName;
+ QString multiplexConfigurationId;
+ QVariantMap profileModuleProperties; // Tree-ified module properties from profile.
+ QVariantMap moduleProperties; // Tree-ified module properties from profile + overridden values.
+ QVariantMap defaultParameters; // In Export item.
+ QStringList searchPaths;
+
+ std::optional<QVariantMap> theModuleProviderConfig;
+
+ struct ResolvedDependsItem {
+ Item *item = nullptr;
+ QualifiedId name;
+ QStringList subModules;
+ FileTags productTypes;
+ QStringList multiplexIds;
+ std::optional<QStringList> profiles;
+ VersionRange versionRange;
+ QVariantMap parameters;
+ bool limitToSubProject = false;
+ FallbackMode fallbackMode = FallbackMode::Enabled;
+ bool requiredLocally = true;
+ bool requiredGlobally = true;
+ };
+ struct ResolvedAndMultiplexedDependsItem {
+ ResolvedAndMultiplexedDependsItem(ProductContext *product,
+ const ResolvedDependsItem &dependency)
+ : product(product), item(dependency.item), name(product->name),
+ versionRange(dependency.versionRange), parameters(dependency.parameters),
+ fallbackMode(FallbackMode::Disabled), checkProduct(false) {}
+ ResolvedAndMultiplexedDependsItem(const ResolvedDependsItem &dependency,
+ const QualifiedId &name,
+ const QString &profile, const QString &multiplexId)
+ : item(dependency.item), name(name), profile(profile), multiplexId(multiplexId),
+ versionRange(dependency.versionRange), parameters(dependency.parameters),
+ limitToSubProject(dependency.limitToSubProject), fallbackMode(dependency.fallbackMode),
+ requiredLocally(dependency.requiredLocally),
+ requiredGlobally(dependency.requiredGlobally) {}
+ ResolvedAndMultiplexedDependsItem() = default;
+ static ResolvedAndMultiplexedDependsItem makeBaseDependency() {
+ ResolvedAndMultiplexedDependsItem item;
+ item.fallbackMode = FallbackMode::Disabled;
+ item.name = StringConstants::qbsModule();
+ return item;
+ }
+
+ QString id() const;
+ CodeLocation location() const;
+ QString displayName() const;
+
+ ProductContext *product = nullptr;
+ Item *item = nullptr;
+ QualifiedId name;
+ QString profile;
+ QString multiplexId;
+ VersionRange versionRange;
+ QVariantMap parameters;
+ bool limitToSubProject = false;
+ FallbackMode fallbackMode = FallbackMode::Enabled;
+ bool requiredLocally = true;
+ bool requiredGlobally = true;
+ bool checkProduct = true;
+ };
+ struct DependenciesResolvingState {
+ Item *loadingItem = nullptr;
+ ResolvedAndMultiplexedDependsItem loadingItemOrigin;
+ std::queue<Item *> pendingDependsItems;
+ std::optional<ResolvedDependsItem> currentDependsItem;
+ std::queue<ResolvedAndMultiplexedDependsItem> pendingResolvedDependencies;
+ bool requiredByLoadingItem = true;
+ };
+ std::list<DependenciesResolvingState> resolveDependenciesState;
+
+ QString uniqueName() const;
+};
+
+class TopLevelProjectContext
+{
+public:
+ TopLevelProjectContext() = default;
+ TopLevelProjectContext(const TopLevelProjectContext &) = delete;
+ TopLevelProjectContext &operator=(const TopLevelProjectContext &) = delete;
+ ~TopLevelProjectContext() { qDeleteAll(projects); }
+
+ std::vector<ProjectContext *> projects;
+ std::list<std::pair<ProductContext *, int>> productsToHandle;
+ std::vector<ProbeConstPtr> probes;
+ QString buildDirectory;
+};
+
+class ProjectContext : public ContextBase
+{
+public:
+ TopLevelProjectContext *topLevelProject = nullptr;
+ ProjectTreeBuilder::Result *result = nullptr;
+ std::vector<ProductContext> products;
+ std::vector<QStringList> searchPathsStack;
+};
+
+
using ShadowProductInfo = std::pair<bool, QString>;
enum class Deferral { Allowed, NotAllowed };
enum class HandleDependency { Use, Ignore, Defer };
@@ -108,6 +228,8 @@ public:
qint64 propertyChecking = 0;
};
+} // namespace
+
class ProjectTreeBuilder::Private
{
public:
diff --git a/src/lib/corelib/language/projecttreebuilder.h b/src/lib/corelib/language/projecttreebuilder.h
index 76a4df372..5f7869978 100644
--- a/src/lib/corelib/language/projecttreebuilder.h
+++ b/src/lib/corelib/language/projecttreebuilder.h
@@ -40,22 +40,13 @@
#pragma once
#include "forward_decls.h"
-#include "filetags.h"
#include "moduleproviderinfo.h"
#include "moduleproviderloader.h"
#include "qualifiedid.h"
-#include <tools/filetime.h>
-#include <tools/stringconstants.h>
-#include <tools/version.h>
-
#include <QString>
#include <QVariant>
-#include <optional>
-#include <queue>
-#include <stack>
-
namespace qbs {
class SetupProjectParameters;
namespace Internal {
@@ -65,16 +56,6 @@ class Item;
class ItemPool;
class ProgressObserver;
-class ContextBase
-{
-public:
- Item *item = nullptr;
- Item *scope = nullptr;
- QString name;
-};
-
-class ProjectContext;
-
using ModulePropertiesPerGroup = std::unordered_map<const Item *, QualifiedIdSet>;
// TODO: This class only needs to be known inside the ProjectResolver; no need to
@@ -118,109 +99,5 @@ private:
Private * const d;
};
-class ProductContext : public ContextBase
-{
-public:
- ProjectContext *project = nullptr;
- Item *mergedExportItem = nullptr;
- ProjectTreeBuilder::Result::ProductInfo info;
- QString profileName;
- QString multiplexConfigurationId;
- QVariantMap profileModuleProperties; // Tree-ified module properties from profile.
- QVariantMap moduleProperties; // Tree-ified module properties from profile + overridden values.
- QVariantMap defaultParameters; // In Export item.
- QStringList searchPaths;
-
- std::optional<QVariantMap> theModuleProviderConfig;
-
- struct ResolvedDependsItem {
- Item *item = nullptr;
- QualifiedId name;
- QStringList subModules;
- FileTags productTypes;
- QStringList multiplexIds;
- std::optional<QStringList> profiles;
- VersionRange versionRange;
- QVariantMap parameters;
- bool limitToSubProject = false;
- FallbackMode fallbackMode = FallbackMode::Enabled;
- bool requiredLocally = true;
- bool requiredGlobally = true;
- };
- struct ResolvedAndMultiplexedDependsItem {
- ResolvedAndMultiplexedDependsItem(ProductContext *product,
- const ResolvedDependsItem &dependency)
- : product(product), item(dependency.item), name(product->name),
- versionRange(dependency.versionRange), parameters(dependency.parameters),
- fallbackMode(FallbackMode::Disabled), checkProduct(false) {}
- ResolvedAndMultiplexedDependsItem(const ResolvedDependsItem &dependency,
- const QualifiedId &name,
- const QString &profile, const QString &multiplexId)
- : item(dependency.item), name(name), profile(profile), multiplexId(multiplexId),
- versionRange(dependency.versionRange), parameters(dependency.parameters),
- limitToSubProject(dependency.limitToSubProject), fallbackMode(dependency.fallbackMode),
- requiredLocally(dependency.requiredLocally),
- requiredGlobally(dependency.requiredGlobally) {}
- ResolvedAndMultiplexedDependsItem() = default;
- static ResolvedAndMultiplexedDependsItem makeBaseDependency() {
- ResolvedAndMultiplexedDependsItem item;
- item.fallbackMode = FallbackMode::Disabled;
- item.name = StringConstants::qbsModule();
- return item;
- }
-
- QString id() const;
- CodeLocation location() const;
- QString displayName() const;
-
- ProductContext *product = nullptr;
- Item *item = nullptr;
- QualifiedId name;
- QString profile;
- QString multiplexId;
- VersionRange versionRange;
- QVariantMap parameters;
- bool limitToSubProject = false;
- FallbackMode fallbackMode = FallbackMode::Enabled;
- bool requiredLocally = true;
- bool requiredGlobally = true;
- bool checkProduct = true;
- };
- struct DependenciesResolvingState {
- Item *loadingItem = nullptr;
- ResolvedAndMultiplexedDependsItem loadingItemOrigin;
- std::queue<Item *> pendingDependsItems;
- std::optional<ResolvedDependsItem> currentDependsItem;
- std::queue<ResolvedAndMultiplexedDependsItem> pendingResolvedDependencies;
- bool requiredByLoadingItem = true;
- };
- std::list<DependenciesResolvingState> resolveDependenciesState;
-
- QString uniqueName() const;
-};
-
-class TopLevelProjectContext
-{
-public:
- TopLevelProjectContext() = default;
- TopLevelProjectContext(const TopLevelProjectContext &) = delete;
- TopLevelProjectContext &operator=(const TopLevelProjectContext &) = delete;
- ~TopLevelProjectContext() { qDeleteAll(projects); }
-
- std::vector<ProjectContext *> projects;
- std::list<std::pair<ProductContext *, int>> productsToHandle;
- std::vector<ProbeConstPtr> probes;
- QString buildDirectory;
-};
-
-class ProjectContext : public ContextBase
-{
-public:
- TopLevelProjectContext *topLevelProject = nullptr;
- ProjectTreeBuilder::Result *result = nullptr;
- std::vector<ProductContext> products;
- std::vector<QStringList> searchPathsStack;
-};
-
} // namespace Internal
} // namespace qbs