summaryrefslogtreecommitdiff
path: root/src/lib/corelib/loader/projectresolver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/corelib/loader/projectresolver.cpp')
-rw-r--r--src/lib/corelib/loader/projectresolver.cpp68
1 files changed, 55 insertions, 13 deletions
diff --git a/src/lib/corelib/loader/projectresolver.cpp b/src/lib/corelib/loader/projectresolver.cpp
index f218bc497..a7eb562c3 100644
--- a/src/lib/corelib/loader/projectresolver.cpp
+++ b/src/lib/corelib/loader/projectresolver.cpp
@@ -39,6 +39,8 @@
#include "projectresolver.h"
+#include "projecttreebuilder.h"
+
#include <jsextensions/jsextensions.h>
#include <jsextensions/moduleproperties.h>
#include <language/artifactproperties.h>
@@ -47,6 +49,7 @@
#include <language/filecontext.h>
#include <language/filetags.h>
#include <language/item.h>
+#include <language/itempool.h>
#include <language/language.h>
#include <language/propertymapinternal.h>
#include <language/resolvedfilecontext.h>
@@ -125,10 +128,9 @@ class ProjectResolver::Private
{
public:
Private(const SetupProjectParameters &setupParameters,
- ProjectTreeBuilder::Result &&loadResult,
- Evaluator &evaluator, Logger &logger)
- : setupParams(setupParameters), loadResult(std::move(loadResult)), evaluator(evaluator),
- logger(logger), engine(evaluator.engine())
+ ScriptEngine *engine, Logger &logger)
+ : setupParams(setupParameters), engine(engine), evaluator(engine),
+ logger(logger)
{}
static void applyFileTaggers(const SourceArtifactPtr &artifact,
@@ -215,17 +217,17 @@ public:
void setupExportedProperties(const Item *item, const QString &namePrefix,
std::vector<ExportedProperty> &properties);
-
- typedef void (ProjectResolver::Private::*ItemFuncPtr)(Item *item,
- ProjectContext *projectContext);
+ using ItemFuncPtr = void (ProjectResolver::Private::*)(Item *item,
+ ProjectContext *projectContext);
using ItemFuncMap = QMap<ItemType, ItemFuncPtr>;
void callItemFunction(const ItemFuncMap &mappings, Item *item, ProjectContext *projectContext);
const SetupProjectParameters &setupParams;
ProjectTreeBuilder::Result loadResult;
- Evaluator &evaluator;
- Logger &logger;
ScriptEngine * const engine;
+ Evaluator evaluator;
+ Logger &logger;
+ ItemPool itemPool;
ProgressObserver *progressObserver = nullptr;
ProductContext *productContext = nullptr;
ModuleContext *moduleContext = nullptr;
@@ -239,15 +241,20 @@ public:
Set<CodeLocation> groupLocationWarnings;
std::vector<std::pair<ResolvedProductPtr, Item *>> productExportInfo;
std::vector<ErrorInfo> queuedErrors;
+ std::vector<ProbeConstPtr> oldProjectProbes;
+ QHash<QString, std::vector<ProbeConstPtr>> oldProductProbes;
+ StoredModuleProviderInfo storedModuleProviderInfo;
+ QVariantMap storedProfiles;
+ FileTime lastResolveTime;
qint64 elapsedTimeModPropEval = 0;
qint64 elapsedTimeAllPropEval = 0;
qint64 elapsedTimeGroups = 0;
};
-ProjectResolver::ProjectResolver(const SetupProjectParameters &setupParameters, ProjectTreeBuilder::Result &&loadResult,
- Evaluator &evaluator, Logger &logger)
- : d(new Private(setupParameters, std::move(loadResult), evaluator, logger))
+ProjectResolver::ProjectResolver(const SetupProjectParameters &setupParameters,
+ ScriptEngine *engine, Logger &logger)
+ : d(new Private(setupParameters, engine, logger))
{
QBS_CHECK(FileInfo::isAbsolute(d->setupParams.buildRoot()));
}
@@ -262,6 +269,32 @@ void ProjectResolver::setProgressObserver(ProgressObserver *observer)
d->progressObserver = observer;
}
+void ProjectResolver::setOldProjectProbes(const std::vector<ProbeConstPtr> &oldProbes)
+{
+ d->oldProjectProbes = oldProbes;
+}
+
+void ProjectResolver::setOldProductProbes(
+ const QHash<QString, std::vector<ProbeConstPtr>> &oldProbes)
+{
+ d->oldProductProbes = oldProbes;
+}
+
+void ProjectResolver::setLastResolveTime(const FileTime &time)
+{
+ d->lastResolveTime = time;
+}
+
+void ProjectResolver::setStoredProfiles(const QVariantMap &profiles)
+{
+ d->storedProfiles = profiles;
+}
+
+void ProjectResolver::setStoredModuleProviderInfo(const StoredModuleProviderInfo &providerInfo)
+{
+ d->storedModuleProviderInfo = providerInfo;
+}
+
static void checkForDuplicateProductNames(const TopLevelProjectConstPtr &project)
{
const std::vector<ResolvedProductPtr> allProducts = project->allProducts();
@@ -285,7 +318,16 @@ TopLevelProjectPtr ProjectResolver::resolve()
{
TimedActivityLogger projectResolverTimer(d->logger, Tr::tr("ProjectResolver"),
d->setupParams.logElapsedTime());
- qCDebug(lcProjectResolver) << "resolving" << d->loadResult.root->file()->filePath();
+ qCDebug(lcProjectResolver) << "resolving" << d->setupParams.projectFilePath();
+
+ ProjectTreeBuilder projectTreeBuilder(d->setupParams, d->itemPool, d->evaluator, d->logger);
+ projectTreeBuilder.setProgressObserver(d->progressObserver);
+ projectTreeBuilder.setOldProjectProbes(d->oldProjectProbes);
+ projectTreeBuilder.setOldProductProbes(d->oldProductProbes);
+ projectTreeBuilder.setLastResolveTime(d->lastResolveTime);
+ projectTreeBuilder.setStoredProfiles(d->storedProfiles);
+ projectTreeBuilder.setStoredModuleProviderInfo(d->storedModuleProviderInfo);
+ d->loadResult = projectTreeBuilder.load();
TopLevelProjectPtr tlp;
try {