summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2023-05-07 09:59:36 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2023-05-09 14:22:01 +0000
commitd849e77fd2bc748f04cc3f15faafb8f1c8328670 (patch)
treedd1eda9b53aed904d1db196a3ce0362de424ddd1
parent3de5e375b0e10e16b458ee75b8360d7ca48e4789 (diff)
downloadqbs-d849e77fd2bc748f04cc3f15faafb8f1c8328670.tar.gz
Remove Loader class
It was just an unnecessary indirection in the end. Change-Id: I956ed4858dcc2b528be1e1fce9ab24862b99ff62 Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
-rw-r--r--src/lib/corelib/CMakeLists.txt2
-rw-r--r--src/lib/corelib/api/internaljobs.cpp8
-rw-r--r--src/lib/corelib/buildgraph/buildgraphloader.cpp18
-rw-r--r--src/lib/corelib/corelib.qbs2
-rw-r--r--src/lib/corelib/loader/loader.cpp153
-rw-r--r--src/lib/corelib/loader/loader.h84
-rw-r--r--src/lib/corelib/loader/projectresolver.cpp76
-rw-r--r--src/lib/corelib/loader/projectresolver.h9
-rw-r--r--tests/auto/language/tst_language.cpp148
-rw-r--r--tests/auto/language/tst_language.h6
10 files changed, 154 insertions, 352 deletions
diff --git a/src/lib/corelib/CMakeLists.txt b/src/lib/corelib/CMakeLists.txt
index ee551b2ca..0df30295b 100644
--- a/src/lib/corelib/CMakeLists.txt
+++ b/src/lib/corelib/CMakeLists.txt
@@ -248,8 +248,6 @@ set(LOADER_SOURCES
itemreaderastvisitor.h
itemreadervisitorstate.cpp
itemreadervisitorstate.h
- loader.cpp
- loader.h
localprofiles.cpp
localprofiles.h
moduleinstantiator.cpp
diff --git a/src/lib/corelib/api/internaljobs.cpp b/src/lib/corelib/api/internaljobs.cpp
index 8aef79595..894c7a8b1 100644
--- a/src/lib/corelib/api/internaljobs.cpp
+++ b/src/lib/corelib/api/internaljobs.cpp
@@ -50,7 +50,7 @@
#include <buildgraph/rulesevaluationcontext.h>
#include <language/language.h>
#include <language/scriptengine.h>
-#include <loader/loader.h>
+#include <loader/projectresolver.h>
#include <logging/logger.h>
#include <logging/translator.h>
#include <tools/buildgraphlocker.h>
@@ -324,9 +324,9 @@ void InternalSetupProjectJob::execute()
void InternalSetupProjectJob::resolveProjectFromScratch(ScriptEngine *engine)
{
- Loader loader(engine, logger());
- loader.setProgressObserver(observer());
- m_newProject = loader.loadProject(m_parameters);
+ ProjectResolver resolver(engine, logger());
+ resolver.setProgressObserver(observer());
+ m_newProject = resolver.resolve(m_parameters);
QBS_CHECK(m_newProject);
}
diff --git a/src/lib/corelib/buildgraph/buildgraphloader.cpp b/src/lib/corelib/buildgraph/buildgraphloader.cpp
index f0db5f81f..31cda94ee 100644
--- a/src/lib/corelib/buildgraph/buildgraphloader.cpp
+++ b/src/lib/corelib/buildgraph/buildgraphloader.cpp
@@ -52,7 +52,7 @@
#include <language/propertymapinternal.h>
#include <language/qualifiedid.h>
#include <language/resolvedfilecontext.h>
-#include <loader/loader.h>
+#include <loader/projectresolver.h>
#include <logging/categories.h>
#include <logging/translator.h>
#include <tools/buildgraphlocker.h>
@@ -338,19 +338,19 @@ void BuildGraphLoader::trackProjectChanges()
markTransformersForChangeTracking(allRestoredProducts);
if (!m_parameters.overrideBuildGraphData())
m_parameters.setEnvironment(restoredProject->environment);
- Loader ldr(m_evalContext->engine(), m_logger);
- ldr.setProgressObserver(m_evalContext->observer());
- ldr.setOldProjectProbes(restoredProject->probes);
+ ProjectResolver resolver(m_evalContext->engine(), m_logger);
+ resolver.setProgressObserver(m_evalContext->observer());
+ resolver.setOldProjectProbes(restoredProject->probes);
if (!m_parameters.forceProbeExecution())
- ldr.setStoredModuleProviderInfo(restoredProject->moduleProviderInfo);
- ldr.setLastResolveTime(restoredProject->lastStartResolveTime);
+ resolver.setStoredModuleProviderInfo(restoredProject->moduleProviderInfo);
+ resolver.setLastResolveTime(restoredProject->lastStartResolveTime);
QHash<QString, std::vector<ProbeConstPtr>> restoredProbes;
for (const auto &restoredProduct : qAsConst(allRestoredProducts))
restoredProbes.insert(restoredProduct->uniqueName(), restoredProduct->probes);
- ldr.setOldProductProbes(restoredProbes);
+ resolver.setOldProductProbes(restoredProbes);
if (!m_parameters.overrideBuildGraphData())
- ldr.setStoredProfiles(restoredProject->profileConfigs);
- m_result.newlyResolvedProject = ldr.loadProject(m_parameters);
+ resolver.setStoredProfiles(restoredProject->profileConfigs);
+ m_result.newlyResolvedProject = resolver.resolve(m_parameters);
std::vector<ResolvedProductPtr> allNewlyResolvedProducts
= m_result.newlyResolvedProject->allProducts();
diff --git a/src/lib/corelib/corelib.qbs b/src/lib/corelib/corelib.qbs
index 1056970cf..532148d2c 100644
--- a/src/lib/corelib/corelib.qbs
+++ b/src/lib/corelib/corelib.qbs
@@ -337,8 +337,6 @@ QbsLibrary {
"itemreaderastvisitor.h",
"itemreadervisitorstate.cpp",
"itemreadervisitorstate.h",
- "loader.cpp",
- "loader.h",
"localprofiles.cpp",
"localprofiles.h",
"moduleinstantiator.cpp",
diff --git a/src/lib/corelib/loader/loader.cpp b/src/lib/corelib/loader/loader.cpp
deleted file mode 100644
index e0ef3ca64..000000000
--- a/src/lib/corelib/loader/loader.cpp
+++ /dev/null
@@ -1,153 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qbs.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "loader.h"
-
-#include "projectresolver.h"
-
-#include <language/language.h>
-#include <language/scriptengine.h>
-#include <logging/translator.h>
-#include <tools/fileinfo.h>
-#include <tools/profile.h>
-#include <tools/progressobserver.h>
-#include <tools/qbsassert.h>
-#include <tools/settings.h>
-#include <tools/setupprojectparameters.h>
-#include <tools/stringconstants.h>
-
-#include <QtCore/qdir.h>
-#include <QtCore/qobject.h>
-
-namespace qbs {
-namespace Internal {
-
-Loader::Loader(ScriptEngine *engine, Logger logger)
- : m_logger(std::move(logger))
- , m_progressObserver(nullptr)
- , m_engine(engine)
-{
- m_logger.storeWarnings();
-}
-
-void Loader::setProgressObserver(ProgressObserver *observer)
-{
- m_progressObserver = observer;
-}
-
-void Loader::setOldProjectProbes(const std::vector<ProbeConstPtr> &oldProbes)
-{
- m_oldProjectProbes = oldProbes;
-}
-
-void Loader::setOldProductProbes(const QHash<QString, std::vector<ProbeConstPtr>> &oldProbes)
-{
- m_oldProductProbes = oldProbes;
-}
-
-void Loader::setStoredProfiles(const QVariantMap &profiles)
-{
- m_storedProfiles = profiles;
-}
-
-void Loader::setStoredModuleProviderInfo(const StoredModuleProviderInfo &providerInfo)
-{
- m_storedModuleProviderInfo = providerInfo;
-}
-
-TopLevelProjectPtr Loader::loadProject(const SetupProjectParameters &_parameters)
-{
- SetupProjectParameters parameters = _parameters;
-
- if (parameters.topLevelProfile().isEmpty()) {
- Settings settings(parameters.settingsDirectory());
- QString profileName = settings.defaultProfile();
- if (profileName.isEmpty()) {
- m_logger.qbsDebug() << Tr::tr("No profile specified and no default profile exists. "
- "Using default property values.");
- profileName = Profile::fallbackName();
- }
- parameters.setTopLevelProfile(profileName);
- parameters.expandBuildConfiguration();
- }
-
- parameters.finalizeProjectFilePath();
- QBS_CHECK(QFileInfo(parameters.projectFilePath()).isAbsolute());
- m_logger.qbsDebug() << "Using project file '"
- << QDir::toNativeSeparators(parameters.projectFilePath()) << "'.";
-
- m_engine->setEnvironment(parameters.adjustedEnvironment());
- m_engine->checkAndClearException({});
- m_engine->clearImportsCache();
- m_engine->clearRequestedProperties();
- m_engine->enableProfiling(parameters.logElapsedTime());
- m_logger.clearWarnings();
- EvalContextSwitcher evalContextSwitcher(m_engine, EvalContext::PropertyEvaluation);
-
- // At this point, we cannot set a sensible total effort, because we know nothing about
- // the project yet. That's why we use a placeholder here, so the user at least
- // sees that an operation is starting. The real total effort will be set later when
- // we have enough information.
- if (m_progressObserver) {
- m_progressObserver->initialize(Tr::tr("Resolving project for configuration %1")
- .arg(TopLevelProject::deriveId(parameters.finalBuildConfigurationTree())), 1);
- m_progressObserver->setScriptEngine(m_engine);
- }
-
- const FileTime resolveTime = FileTime::currentTime();
- ProjectResolver resolver(parameters, m_engine, m_logger);
- resolver.setProgressObserver(m_progressObserver);
- resolver.setOldProjectProbes(m_oldProjectProbes);
- resolver.setOldProductProbes(m_oldProductProbes);
- resolver.setLastResolveTime(m_lastResolveTime);
- resolver.setStoredProfiles(m_storedProfiles);
- resolver.setStoredModuleProviderInfo(m_storedModuleProviderInfo);
- TopLevelProjectPtr project = resolver.resolve();
- project->lastStartResolveTime = resolveTime;
- project->lastEndResolveTime = FileTime::currentTime();
-
- // E.g. if the top-level project is disabled.
- if (m_progressObserver)
- m_progressObserver->setFinished();
-
- return project;
-}
-
-} // namespace Internal
-} // namespace qbs
diff --git a/src/lib/corelib/loader/loader.h b/src/lib/corelib/loader/loader.h
deleted file mode 100644
index 227b5cdd9..000000000
--- a/src/lib/corelib/loader/loader.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qbs.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef QBS_LOADER_H
-#define QBS_LOADER_H
-
-#include <language/forward_decls.h>
-#include <language/moduleproviderinfo.h>
-#include <logging/logger.h>
-#include <tools/filetime.h>
-
-#include <QtCore/qstringlist.h>
-
-namespace qbs {
-class Settings;
-class SetupProjectParameters;
-namespace Internal {
-class Logger;
-class ProgressObserver;
-class ScriptEngine;
-
-class QBS_AUTOTEST_EXPORT Loader
-{
-public:
- Loader(ScriptEngine *engine, Logger logger);
-
- void setProgressObserver(ProgressObserver *observer);
- void setOldProjectProbes(const std::vector<ProbeConstPtr> &oldProbes);
- void setOldProductProbes(const QHash<QString, std::vector<ProbeConstPtr>> &oldProbes);
- void setLastResolveTime(const FileTime &time) { m_lastResolveTime = time; }
- void setStoredProfiles(const QVariantMap &profiles);
- void setStoredModuleProviderInfo(const StoredModuleProviderInfo &providerInfo);
- TopLevelProjectPtr loadProject(const SetupProjectParameters &parameters);
-
-private:
- Logger m_logger;
- ProgressObserver *m_progressObserver;
- ScriptEngine * const m_engine;
- std::vector<ProbeConstPtr> m_oldProjectProbes;
- QHash<QString, std::vector<ProbeConstPtr>> m_oldProductProbes;
- StoredModuleProviderInfo m_storedModuleProviderInfo;
- QVariantMap m_storedProfiles;
- FileTime m_lastResolveTime;
-};
-
-} // namespace Internal
-} // namespace qbs
-
-#endif // QBS_LOADER_H
diff --git a/src/lib/corelib/loader/projectresolver.cpp b/src/lib/corelib/loader/projectresolver.cpp
index a7eb562c3..994436b61 100644
--- a/src/lib/corelib/loader/projectresolver.cpp
+++ b/src/lib/corelib/loader/projectresolver.cpp
@@ -56,18 +56,19 @@
#include <language/scriptengine.h>
#include <language/value.h>
#include <logging/categories.h>
-#include <logging/logger.h>
#include <logging/translator.h>
#include <tools/error.h>
#include <tools/fileinfo.h>
#include <tools/joblimits.h>
#include <tools/jsliterals.h>
+#include <tools/profile.h>
#include <tools/profiling.h>
#include <tools/progressobserver.h>
#include <tools/scripttools.h>
#include <tools/qbsassert.h>
#include <tools/qttools.h>
#include <tools/set.h>
+#include <tools/settings.h>
#include <tools/setupprojectparameters.h>
#include <tools/stlutils.h>
#include <tools/stringconstants.h>
@@ -127,11 +128,7 @@ class CancelException { };
class ProjectResolver::Private
{
public:
- Private(const SetupProjectParameters &setupParameters,
- ScriptEngine *engine, Logger &logger)
- : setupParams(setupParameters), engine(engine), evaluator(engine),
- logger(logger)
- {}
+ Private(ScriptEngine *engine, Logger &&logger) : engine(engine), logger(std::move(logger)) {}
static void applyFileTaggers(const SourceArtifactPtr &artifact,
const ResolvedProductConstPtr &product);
@@ -139,6 +136,7 @@ public:
const ResolvedProductPtr &rproduct, const QString &fileName, const GroupPtr &group,
bool wildcard, const CodeLocation &filesLocation = CodeLocation(),
FileLocations *fileLocations = nullptr, ErrorInfo *errorInfo = nullptr);
+ void finalizeProjectParameters();
void checkCancelation() const;
QString verbatimValue(const ValueConstPtr &value, bool *propertyWasSet = nullptr) const;
QString verbatimValue(Item *item, const QString &name, bool *propertyWasSet = nullptr) const;
@@ -222,12 +220,12 @@ public:
using ItemFuncMap = QMap<ItemType, ItemFuncPtr>;
void callItemFunction(const ItemFuncMap &mappings, Item *item, ProjectContext *projectContext);
- const SetupProjectParameters &setupParams;
- ProjectTreeBuilder::Result loadResult;
ScriptEngine * const engine;
- Evaluator evaluator;
- Logger &logger;
+ mutable Logger logger;
+ Evaluator evaluator{engine};
ItemPool itemPool;
+ SetupProjectParameters setupParams;
+ ProjectTreeBuilder::Result loadResult;
ProgressObserver *progressObserver = nullptr;
ProductContext *productContext = nullptr;
ModuleContext *moduleContext = nullptr;
@@ -252,11 +250,10 @@ public:
};
-ProjectResolver::ProjectResolver(const SetupProjectParameters &setupParameters,
- ScriptEngine *engine, Logger &logger)
- : d(new Private(setupParameters, engine, logger))
+ProjectResolver::ProjectResolver(ScriptEngine *engine, Logger logger)
+ : d(new Private(engine, std::move(logger)))
{
- QBS_CHECK(FileInfo::isAbsolute(d->setupParams.buildRoot()));
+ d->logger.storeWarnings();
}
ProjectResolver::~ProjectResolver()
@@ -314,12 +311,36 @@ static void checkForDuplicateProductNames(const TopLevelProjectConstPtr &project
}
}
-TopLevelProjectPtr ProjectResolver::resolve()
+TopLevelProjectPtr ProjectResolver::resolve(const SetupProjectParameters &parameters)
{
+ d->setupParams = parameters;
+ d->finalizeProjectParameters();
+ QBS_CHECK(FileInfo::isAbsolute(d->setupParams.buildRoot()));
+
TimedActivityLogger projectResolverTimer(d->logger, Tr::tr("ProjectResolver"),
d->setupParams.logElapsedTime());
qCDebug(lcProjectResolver) << "resolving" << d->setupParams.projectFilePath();
+ d->engine->setEnvironment(d->setupParams.adjustedEnvironment());
+ d->engine->checkAndClearException({});
+ d->engine->clearImportsCache();
+ d->engine->clearRequestedProperties();
+ d->engine->enableProfiling(d->setupParams.logElapsedTime());
+ d->logger.clearWarnings();
+ EvalContextSwitcher evalContextSwitcher(d->engine, EvalContext::PropertyEvaluation);
+
+ // At this point, we cannot set a sensible total effort, because we know nothing about
+ // the project yet. That's why we use a placeholder here, so the user at least
+ // sees that an operation is starting. The real total effort will be set later when
+ // we have enough information.
+ if (d->progressObserver) {
+ d->progressObserver->initialize(Tr::tr("Resolving project for configuration %1")
+ .arg(TopLevelProject::deriveId(d->setupParams.finalBuildConfigurationTree())), 1);
+ d->progressObserver->setScriptEngine(d->engine);
+ }
+
+ const FileTime resolveTime = FileTime::currentTime();
+ TopLevelProjectPtr tlp;
ProjectTreeBuilder projectTreeBuilder(d->setupParams, d->itemPool, d->evaluator, d->logger);
projectTreeBuilder.setProgressObserver(d->progressObserver);
projectTreeBuilder.setOldProjectProbes(d->oldProjectProbes);
@@ -328,8 +349,6 @@ TopLevelProjectPtr ProjectResolver::resolve()
projectTreeBuilder.setStoredProfiles(d->storedProfiles);
projectTreeBuilder.setStoredModuleProviderInfo(d->storedModuleProviderInfo);
d->loadResult = projectTreeBuilder.load();
-
- TopLevelProjectPtr tlp;
try {
tlp = d->resolveTopLevelProject();
d->printProfilingInfo();
@@ -338,6 +357,12 @@ TopLevelProjectPtr ProjectResolver::resolve()
.arg(TopLevelProject::deriveId(
d->setupParams.finalBuildConfigurationTree())));
}
+ tlp->lastStartResolveTime = resolveTime;
+ tlp->lastEndResolveTime = FileTime::currentTime();
+
+ // E.g. if the top-level project is disabled.
+ if (d->progressObserver)
+ d->progressObserver->setFinished();
return tlp;
}
@@ -807,6 +832,23 @@ SourceArtifactPtr ProjectResolver::Private::createSourceArtifact(
return artifact;
}
+void ProjectResolver::Private::finalizeProjectParameters()
+{
+ if (setupParams.topLevelProfile().isEmpty()) {
+ Settings settings(setupParams.settingsDirectory());
+ QString profileName = settings.defaultProfile();
+ if (profileName.isEmpty()) {
+ logger.qbsDebug() << Tr::tr("No profile specified and no default profile exists. "
+ "Using default property values.");
+ profileName = Profile::fallbackName();
+ }
+ setupParams.setTopLevelProfile(profileName);
+ setupParams.expandBuildConfiguration();
+ }
+ setupParams.finalizeProjectFilePath();
+ QBS_CHECK(QFileInfo(setupParams.projectFilePath()).isAbsolute());
+}
+
static QualifiedIdSet propertiesToEvaluate(std::deque<QualifiedId> initialProps,
const PropertyDependencies &deps)
{
diff --git a/src/lib/corelib/loader/projectresolver.h b/src/lib/corelib/loader/projectresolver.h
index eaa88fd63..94a88c614 100644
--- a/src/lib/corelib/loader/projectresolver.h
+++ b/src/lib/corelib/loader/projectresolver.h
@@ -41,6 +41,8 @@
#define PROJECTRESOLVER_H
#include <language/forward_decls.h>
+#include <logging/logger.h>
+#include <tools/qbs_export.h>
#include <QHash>
#include <QVariant>
@@ -56,11 +58,10 @@ class ProgressObserver;
class ScriptEngine;
class StoredModuleProviderInfo;
-class ProjectResolver
+class QBS_AUTOTEST_EXPORT ProjectResolver
{
public:
- ProjectResolver(const SetupProjectParameters &setupParameters,
- ScriptEngine *engine, Logger &logger);
+ ProjectResolver(ScriptEngine *engine, Logger logger);
~ProjectResolver();
void setProgressObserver(ProgressObserver *observer);
@@ -69,7 +70,7 @@ public:
void setLastResolveTime(const FileTime &time);
void setStoredProfiles(const QVariantMap &profiles);
void setStoredModuleProviderInfo(const StoredModuleProviderInfo &providerInfo);
- TopLevelProjectPtr resolve();
+ TopLevelProjectPtr resolve(const SetupProjectParameters &parameters);
private:
class Private;
diff --git a/tests/auto/language/tst_language.cpp b/tests/auto/language/tst_language.cpp
index c81017f26..eda7bf566 100644
--- a/tests/auto/language/tst_language.cpp
+++ b/tests/auto/language/tst_language.cpp
@@ -143,7 +143,7 @@ void TestLanguage::handleInitCleanupDataTags(const char *projectFileName, bool *
bool exceptionCaught = false;
try {
defaultParameters.setProjectFilePath(testProject(projectFileName));
- project = loader->loadProject(defaultParameters);
+ project = m_resolver->resolve(defaultParameters);
QVERIFY(!!project);
} catch (const ErrorInfo &e) {
exceptionCaught = true;
@@ -160,10 +160,16 @@ void TestLanguage::handleInitCleanupDataTags(const char *projectFileName, bool *
void TestLanguage::init()
{
+ m_resolver = new ProjectResolver(m_engine.get(), m_logger);
m_logSink->setLogLevel(LoggerInfo);
QVERIFY(m_tempDir.isValid());
}
+void TestLanguage::cleanup()
+{
+ delete m_resolver;
+}
+
#define HANDLE_INIT_CLEANUP_DATATAGS(fn) {\
bool handled;\
handleInitCleanupDataTags(fn, &handled);\
@@ -176,7 +182,6 @@ void TestLanguage::initTestCase()
{
m_logger = Logger(m_logSink);
m_engine = ScriptEngine::create(m_logger, EvalContext::PropertyEvaluation);
- loader = new Loader(m_engine.get(), m_logger);
defaultParameters.setTopLevelProfile(profileName());
defaultParameters.setConfigurationName("default");
defaultParameters.expandBuildConfiguration();
@@ -185,17 +190,12 @@ void TestLanguage::initTestCase()
QVERIFY(QFileInfo(m_wildcardsTestDirPath).isAbsolute());
}
-void TestLanguage::cleanupTestCase()
-{
- delete loader;
-}
-
void TestLanguage::additionalProductTypes()
{
bool exceptionCaught = false;
try {
defaultParameters.setProjectFilePath(testProject("additional-product-types.qbs"));
- project = loader->loadProject(defaultParameters);
+ project = m_resolver->resolve(defaultParameters);
QVERIFY(!!project);
const QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
const ResolvedProductConstPtr product = products.value("p");
@@ -217,7 +217,7 @@ void TestLanguage::baseProperty()
bool exceptionCaught = false;
try {
defaultParameters.setProjectFilePath(testProject("baseproperty.qbs"));
- project = loader->loadProject(defaultParameters);
+ project = m_resolver->resolve(defaultParameters);
QVERIFY(!!project);
QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
ResolvedProductPtr product = products.value("product1");
@@ -237,7 +237,7 @@ void TestLanguage::baseValidation()
qbs::SetupProjectParameters params = defaultParameters;
params.setProjectFilePath(testProject("base-validate/base-validate.qbs"));
try {
- project = loader->loadProject(params);
+ project = m_resolver->resolve(params);
QVERIFY2(false, "exception expected");
} catch (const qbs::ErrorInfo &e) {
QVERIFY2(e.toString().contains("Parent succeeded, child failed."),
@@ -251,7 +251,7 @@ void TestLanguage::brokenDependencyCycle()
QFETCH(QString, projectFileName);
params.setProjectFilePath(testProject(qPrintable(projectFileName)));
try {
- project = loader->loadProject(params);
+ project = m_resolver->resolve(params);
} catch (const qbs::ErrorInfo &e) {
QVERIFY2(false, qPrintable(e.toString()));
}
@@ -273,7 +273,7 @@ void TestLanguage::buildConfigStringListSyntax()
overriddenValues.insert("project.someStrings", "foo,bar,baz");
parameters.setOverriddenValues(overriddenValues);
parameters.setProjectFilePath(testProject("buildconfigstringlistsyntax.qbs"));
- project = loader->loadProject(parameters);
+ project = m_resolver->resolve(parameters);
QVERIFY(!!project);
QCOMPARE(project->projectProperties().value("someStrings").toStringList(),
QStringList() << "foo" << "bar" << "baz");
@@ -290,7 +290,7 @@ void TestLanguage::builtinFunctionInSearchPathsProperty()
try {
SetupProjectParameters parameters = defaultParameters;
parameters.setProjectFilePath(testProject("builtinFunctionInSearchPathsProperty.qbs"));
- QVERIFY(!!loader->loadProject(parameters));
+ QVERIFY(!!m_resolver->resolve(parameters));
} catch (const ErrorInfo &e) {
exceptionCaught = true;
qDebug() << e.toString();
@@ -304,7 +304,7 @@ void TestLanguage::chainedProbes()
try {
SetupProjectParameters parameters = defaultParameters;
parameters.setProjectFilePath(testProject("chained-probes/chained-probes.qbs"));
- const TopLevelProjectConstPtr project = loader->loadProject(parameters);
+ const TopLevelProjectConstPtr project = m_resolver->resolve(parameters);
QVERIFY(!!project);
QCOMPARE(project->products.size(), size_t(1));
const QString prop1Val = project->products.front()->moduleProperties
@@ -327,7 +327,7 @@ void TestLanguage::versionCompare()
try {
SetupProjectParameters parameters = defaultParameters;
parameters.setProjectFilePath(testProject("versionCompare.qbs"));
- QVERIFY(!!loader->loadProject(parameters));
+ QVERIFY(!!m_resolver->resolve(parameters));
} catch (const ErrorInfo &e) {
exceptionCaught = true;
qDebug() << e.toString();
@@ -340,7 +340,7 @@ void TestLanguage::canonicalArchitecture()
bool exceptionCaught = false;
try {
defaultParameters.setProjectFilePath(testProject("canonicalArchitecture.qbs"));
- project = loader->loadProject(defaultParameters);
+ project = m_resolver->resolve(defaultParameters);
QVERIFY(!!project);
QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
ResolvedProductPtr product = products.value(QStringLiteral("x86"));
@@ -357,7 +357,7 @@ void TestLanguage::rfc1034Identifier()
bool exceptionCaught = false;
try {
defaultParameters.setProjectFilePath(testProject("rfc1034identifier.qbs"));
- project = loader->loadProject(defaultParameters);
+ project = m_resolver->resolve(defaultParameters);
QVERIFY(!!project);
QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
ResolvedProductPtr product = products.value(QStringLiteral("this-has-special-characters-"
@@ -380,7 +380,7 @@ void TestLanguage::conditionalDepends()
params.setProjectFilePath(testProject("conditionaldepends.qbs"));
params.setOverriddenValues({std::make_pair(QString("products."
"multilevel_module_props_overridden.dummy3.loadDummy"), true)});
- project = loader->loadProject(params);
+ project = m_resolver->resolve(params);
QVERIFY(!!project);
QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
@@ -489,7 +489,7 @@ void TestLanguage::delayedError()
QVariantMap overriddenValues;
overriddenValues.insert("project.enableProduct", productEnabled);
params.setOverriddenValues(overriddenValues);
- project = loader->loadProject(params);
+ project = m_resolver->resolve(params);
QCOMPARE(productEnabled, false);
QVERIFY(!!project);
QCOMPARE(project->products.size(), size_t(1));
@@ -531,7 +531,7 @@ void TestLanguage::dependencyOnAllProfiles()
overriddenValues.insert("project.profile1", "p1");
overriddenValues.insert("project.profile2", "p2");
params.setOverriddenValues(overriddenValues);
- project = loader->loadProject(params);
+ project = m_resolver->resolve(params);
QVERIFY(!!project);
QCOMPARE(project->products.size(), size_t(3));
const ResolvedProductConstPtr mainProduct = productsFromProject(project).value("main");
@@ -554,7 +554,7 @@ void TestLanguage::derivedSubProject()
try {
SetupProjectParameters params = defaultParameters;
params.setProjectFilePath(testProject("derived-sub-project/project.qbs"));
- const TopLevelProjectPtr project = loader->loadProject(params);
+ const TopLevelProjectPtr project = m_resolver->resolve(params);
QVERIFY(!!project);
const QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
QCOMPARE(products.size(), 1);
@@ -571,7 +571,7 @@ void TestLanguage::disabledSubProject()
try {
SetupProjectParameters params = defaultParameters;
params.setProjectFilePath(testProject("disabled-subproject.qbs"));
- const TopLevelProjectPtr project = loader->loadProject(params);
+ const TopLevelProjectPtr project = m_resolver->resolve(params);
QVERIFY(!!project);
const QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
QCOMPARE(products.size(), 0);
@@ -609,7 +609,7 @@ void TestLanguage::dottedNames()
std::make_pair("projects.theProject.includeDottedModule", useModule)
};
params.setOverriddenValues(overridden);
- TopLevelProjectPtr project = loader->loadProject(params);
+ TopLevelProjectPtr project = m_resolver->resolve(params);
QVERIFY(expectSuccess);
QVERIFY(!!project);
QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
@@ -632,7 +632,7 @@ void TestLanguage::emptyJsFile()
try {
SetupProjectParameters params = defaultParameters;
params.setProjectFilePath(testProject("empty-js-file.qbs"));
- const TopLevelProjectPtr project = loader->loadProject(params);
+ const TopLevelProjectPtr project = m_resolver->resolve(params);
QVERIFY(!!project);
const QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
QCOMPARE(products.size(), 1);
@@ -649,7 +649,7 @@ void TestLanguage::enumerateProjectProperties()
try {
SetupProjectParameters params = defaultParameters;
params.setProjectFilePath(testProject("enum-project-props.qbs"));
- auto project = loader->loadProject(params);
+ auto project = m_resolver->resolve(params);
QVERIFY(!!project);
auto products = productsFromProject(project);
QCOMPARE(products.size(), 1);
@@ -686,7 +686,7 @@ void TestLanguage::evalErrorInNonPresentModule()
params.setProjectFilePath(testProject("eval-error-in-non-present-module.qbs"));
QVariantMap overridden{std::make_pair("products.p.moduleRequired", moduleRequired)};
params.setOverriddenValues(overridden);
- TopLevelProjectPtr project = loader->loadProject(params);
+ TopLevelProjectPtr project = m_resolver->resolve(params);
QVERIFY(errorMessage.isEmpty());
QVERIFY(!!project);
QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
@@ -711,7 +711,7 @@ void TestLanguage::defaultValue()
if (!prop1Value.isEmpty())
overridden.insert("modules.lower.prop1", prop1Value);
params.setOverriddenValues(overridden);
- TopLevelProjectPtr project = loader->loadProject(params);
+ TopLevelProjectPtr project = m_resolver->resolve(params);
QVERIFY(!!project);
QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
QCOMPARE(products.size(), 2);
@@ -762,7 +762,7 @@ void TestLanguage::environmentVariable()
defaultParameters.setEnvironment(env);
defaultParameters.setProjectFilePath(testProject("environmentvariable.qbs"));
- project = loader->loadProject(defaultParameters);
+ project = m_resolver->resolve(defaultParameters);
defaultParameters.setEnvironment(origEnv); // reset environment
@@ -783,7 +783,7 @@ void TestLanguage::errorInDisabledProduct()
try {
SetupProjectParameters params = defaultParameters;
params.setProjectFilePath(testProject("error-in-disabled-product.qbs"));
- auto project = loader->loadProject(params);
+ auto project = m_resolver->resolve(params);
QVERIFY(!!project);
auto products = productsFromProject(project);
QCOMPARE(products.size(), 5);
@@ -954,7 +954,7 @@ void TestLanguage::erroneousFiles()
QString fileName = QString::fromLocal8Bit(QTest::currentDataTag()) + QLatin1String(".qbs");
try {
defaultParameters.setProjectFilePath(testProject("/erroneous/") + fileName);
- loader->loadProject(defaultParameters);
+ m_resolver->resolve(defaultParameters);
} catch (const ErrorInfo &e) {
const QRegularExpression reg(errorMessage, QRegularExpression::DotMatchesEverythingOption);
if (!e.toString().contains(reg)) {
@@ -974,7 +974,7 @@ void TestLanguage::exports()
bool exceptionCaught = false;
try {
defaultParameters.setProjectFilePath(testProject("exports.qbs"));
- TopLevelProjectPtr project = loader->loadProject(defaultParameters);
+ TopLevelProjectPtr project = m_resolver->resolve(defaultParameters);
QVERIFY(!!project);
QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
QCOMPARE(products.size(), 22);
@@ -1100,7 +1100,7 @@ void TestLanguage::fileContextProperties()
bool exceptionCaught = false;
try {
defaultParameters.setProjectFilePath(testProject("filecontextproperties.qbs"));
- project = loader->loadProject(defaultParameters);
+ project = m_resolver->resolve(defaultParameters);
QVERIFY(!!project);
QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
ResolvedProductPtr product = products.value("product1");
@@ -1153,7 +1153,7 @@ void TestLanguage::fileInProductAndModule()
std::make_pair("modules.module_with_file.file2IsTarget", file2IsTarget),
std::make_pair("products.p.addFileToProduct", addFileToProduct),
});
- project = loader->loadProject(params);
+ project = m_resolver->resolve(params);
QVERIFY(!!project);
QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
QCOMPARE(products.size(), 1);
@@ -1169,7 +1169,7 @@ void TestLanguage::getNativeSetting()
bool exceptionCaught = false;
try {
defaultParameters.setProjectFilePath(testProject("getNativeSetting.qbs"));
- project = loader->loadProject(defaultParameters);
+ project = m_resolver->resolve(defaultParameters);
QString expectedTargetName;
if (HostOsInfo::isMacosHost()) {
@@ -1245,7 +1245,7 @@ void TestLanguage::groupName()
bool exceptionCaught = false;
try {
defaultParameters.setProjectFilePath(testProject("groupname.qbs"));
- TopLevelProjectPtr project = loader->loadProject(defaultParameters);
+ TopLevelProjectPtr project = m_resolver->resolve(defaultParameters);
QVERIFY(!!project);
QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
QCOMPARE(products.size(), 2);
@@ -1284,7 +1284,7 @@ void TestLanguage::homeDirectory()
{
try {
defaultParameters.setProjectFilePath(testProject("homeDirectory.qbs"));
- ResolvedProjectPtr project = loader->loadProject(defaultParameters);
+ ResolvedProjectPtr project = m_resolver->resolve(defaultParameters);
QVERIFY(!!project);
QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
QCOMPARE(products.size(), 1);
@@ -1390,7 +1390,7 @@ void TestLanguage::idUsage()
bool exceptionCaught = false;
try {
defaultParameters.setProjectFilePath(testProject("idusage.qbs"));
- TopLevelProjectPtr project = loader->loadProject(defaultParameters);
+ TopLevelProjectPtr project = m_resolver->resolve(defaultParameters);
QVERIFY(!!project);
QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
QCOMPARE(products.size(), 5);
@@ -1427,7 +1427,7 @@ void TestLanguage::idUniqueness()
bool exceptionCaught = false;
try {
defaultParameters.setProjectFilePath(testProject("id-uniqueness.qbs"));
- loader->loadProject(defaultParameters);
+ m_resolver->resolve(defaultParameters);
}
catch (const ErrorInfo &e) {
exceptionCaught = true;
@@ -1445,7 +1445,7 @@ void TestLanguage::importCollection()
bool exceptionCaught = false;
try {
defaultParameters.setProjectFilePath(testProject("import-collection/project.qbs"));
- const TopLevelProjectPtr project = loader->loadProject(defaultParameters);
+ const TopLevelProjectPtr project = m_resolver->resolve(defaultParameters);
QVERIFY(!!project);
QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
const ResolvedProductConstPtr product = products.value("da product");
@@ -1477,7 +1477,7 @@ void TestLanguage::inheritedPropertiesItems()
params.setProjectFilePath
(testProject("inherited-properties-items/inherited-properties-items.qbs"));
params.setOverriddenValues(QVariantMap{std::make_pair("qbs.buildVariant", buildVariant)});
- TopLevelProjectPtr project = loader->loadProject(params);
+ TopLevelProjectPtr project = m_resolver->resolve(params);
QVERIFY(!!project);
QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
QCOMPARE(products.size(), 1);
@@ -1495,7 +1495,7 @@ void TestLanguage::invalidBindingInDisabledItem()
bool exceptionCaught = false;
try {
defaultParameters.setProjectFilePath(testProject("invalidBindingInDisabledItem.qbs"));
- TopLevelProjectPtr project = loader->loadProject(defaultParameters);
+ TopLevelProjectPtr project = m_resolver->resolve(defaultParameters);
QVERIFY(!!project);
QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
QCOMPARE(products.size(), 2);
@@ -1517,7 +1517,7 @@ void TestLanguage::invalidOverrides()
qbs::SetupProjectParameters params = defaultParameters;
params.setProjectFilePath(testProject("invalid-overrides.qbs"));
params.setOverriddenValues(QVariantMap{std::make_pair(key, true)});
- const TopLevelProjectPtr project = loader->loadProject(params);
+ const TopLevelProjectPtr project = m_resolver->resolve(params);
QVERIFY(!!project);
}
catch (const ErrorInfo &e) {
@@ -1666,7 +1666,7 @@ void TestLanguage::jsImportUsedInMultipleScopes()
params.setOverriddenValues({std::make_pair(QStringLiteral("qbs.buildVariant"),
buildVariant)});
params.expandBuildConfiguration();
- TopLevelProjectPtr project = loader->loadProject(params);
+ TopLevelProjectPtr project = m_resolver->resolve(params);
QVERIFY(!!project);
QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
QCOMPARE(products.size(), 1);
@@ -1689,7 +1689,7 @@ void TestLanguage::moduleMergingVariantValues()
params.setProjectFilePath
(testProject("module-merging-variant-values/module-merging-variant-values.qbs"));
params.expandBuildConfiguration();
- const TopLevelProjectPtr project = loader->loadProject(params);
+ const TopLevelProjectPtr project = m_resolver->resolve(params);
QVERIFY(!!project);
QCOMPARE(int(project->products.size()), 2);
} catch (const ErrorInfo &e) {
@@ -1719,7 +1719,7 @@ void TestLanguage::modulePrioritizationBySearchPath()
params.setOverriddenValues({std::make_pair(QStringLiteral("project.qbsSearchPaths"),
searchPaths)});
params.expandBuildConfiguration();
- TopLevelProjectPtr project = loader->loadProject(params);
+ TopLevelProjectPtr project = m_resolver->resolve(params);
QVERIFY(!!project);
QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
QCOMPARE(products.size(), 1);
@@ -1795,7 +1795,7 @@ void TestLanguage::modulePropertiesInGroups()
defaultParameters.setProjectFilePath(testProject("modulepropertiesingroups.qbs"));
bool exceptionCaught = false;
try {
- TopLevelProjectPtr project = loader->loadProject(defaultParameters);
+ TopLevelProjectPtr project = m_resolver->resolve(defaultParameters);
QVERIFY(!!project);
const QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
ResolvedProductPtr product = products.value("grouptest");
@@ -2017,7 +2017,7 @@ void TestLanguage::modulePropertyOverridesPerProduct()
});
params.setProjectFilePath(
testProject("module-property-overrides-per-product.qbs"));
- const TopLevelProjectPtr project = loader->loadProject(params);
+ const TopLevelProjectPtr project = m_resolver->resolve(params);
QVERIFY(!!project);
QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
QCOMPARE(products.size(), 3);
@@ -2063,7 +2063,7 @@ void TestLanguage::moduleScope()
bool exceptionCaught = false;
try {
defaultParameters.setProjectFilePath(testProject("modulescope.qbs"));
- TopLevelProjectPtr project = loader->loadProject(defaultParameters);
+ TopLevelProjectPtr project = m_resolver->resolve(defaultParameters);
QVERIFY(!!project);
QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
QCOMPARE(products.size(), 1);
@@ -2096,7 +2096,7 @@ void TestLanguage::moduleWithProductDependency()
bool exceptionCaught = false;
try {
defaultParameters.setProjectFilePath(testProject("module-depends-on-product.qbs"));
- TopLevelProjectPtr project = loader->loadProject(defaultParameters);
+ TopLevelProjectPtr project = m_resolver->resolve(defaultParameters);
QVERIFY(project);
QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
QCOMPARE(products.size(), 2);
@@ -2168,7 +2168,7 @@ void TestLanguage::multiplexedExports()
try {
SetupProjectParameters params = defaultParameters;
params.setProjectFilePath(testProject("multiplexed-exports.qbs"));
- const TopLevelProjectPtr project = loader->loadProject(params);
+ const TopLevelProjectPtr project = m_resolver->resolve(params);
QVERIFY(!!project);
const auto products = project->allProducts();
QCOMPARE(products.size(), size_t(4));
@@ -2206,7 +2206,7 @@ void TestLanguage::multiplexingByProfile()
params.setProjectFilePath(testDataDir() + "/multiplexing-by-profile/" + projectFileName);
try {
params.setDryRun(true);
- const TopLevelProjectPtr project = loader->loadProject(params);
+ const TopLevelProjectPtr project = m_resolver->resolve(params);
QVERIFY(successExpected);
QVERIFY(!!project);
} catch (const ErrorInfo &e) {
@@ -2234,7 +2234,7 @@ void TestLanguage::nonApplicableModulePropertyInProfile()
params.setProjectFilePath(testProject("non-applicable-module-property-in-profile.qbs"));
params.setOverriddenValues(QVariantMap{std::make_pair("project.targetOS", targetOS),
std::make_pair("project.toolchain", toolchain)});
- const TopLevelProjectPtr project = loader->loadProject(params);
+ const TopLevelProjectPtr project = m_resolver->resolve(params);
QVERIFY(!!project);
QVERIFY(successExpected);
} catch (const ErrorInfo &e) {
@@ -2274,7 +2274,7 @@ void TestLanguage::nonRequiredProducts()
else if (!dependeeEnabled)
overriddenValues.insert("products.dependee.condition", false);
params.setOverriddenValues(overriddenValues);
- const TopLevelProjectPtr project = loader->loadProject(params);
+ const TopLevelProjectPtr project = m_resolver->resolve(params);
QVERIFY(!!project);
const auto products = productsFromProject(project);
QCOMPARE(products.size(), 4 + !!subProjectEnabled);
@@ -2315,7 +2315,7 @@ void TestLanguage::outerInGroup()
bool exceptionCaught = false;
try {
defaultParameters.setProjectFilePath(testProject("outerInGroup.qbs"));
- TopLevelProjectPtr project = loader->loadProject(defaultParameters);
+ TopLevelProjectPtr project = m_resolver->resolve(defaultParameters);
QVERIFY(!!project);
QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
QCOMPARE(products.size(), 1);
@@ -2353,7 +2353,7 @@ void TestLanguage::overriddenPropertiesAndPrototypes()
SetupProjectParameters params = defaultParameters;
params.setProjectFilePath(testProject("overridden-properties-and-prototypes.qbs"));
params.setOverriddenValues({std::make_pair("modules.qbs.targetPlatform", osName)});
- TopLevelProjectConstPtr project = loader->loadProject(params);
+ TopLevelProjectConstPtr project = m_resolver->resolve(params);
QVERIFY(!!project);
QCOMPARE(project->products.size(), size_t(1));
QCOMPARE(project->products.front()->moduleProperties->moduleProperty(
@@ -2382,7 +2382,7 @@ void TestLanguage::overriddenVariantProperty()
const QVariantMap objectValue{std::make_pair("x", 1), std::make_pair("y", 2)};
params.setOverriddenValues({std::make_pair("products.p.myObject", objectValue)});
params.setProjectFilePath(testProject("overridden-variant-property.qbs"));
- TopLevelProjectConstPtr project = loader->loadProject(params);
+ TopLevelProjectConstPtr project = m_resolver->resolve(params);
QVERIFY(!!project);
QCOMPARE(project->products.size(), size_t(1));
QCOMPARE(project->products.front()->productProperties.value("myObject").toMap(),
@@ -2399,7 +2399,7 @@ void TestLanguage::parameterTypes()
bool exceptionCaught = false;
try {
defaultParameters.setProjectFilePath(testProject("parameter-types.qbs"));
- loader->loadProject(defaultParameters);
+ m_resolver->resolve(defaultParameters);
}
catch (const ErrorInfo &e) {
exceptionCaught = true;
@@ -2413,7 +2413,7 @@ void TestLanguage::pathProperties()
bool exceptionCaught = false;
try {
defaultParameters.setProjectFilePath(testProject("pathproperties.qbs"));
- project = loader->loadProject(defaultParameters);
+ project = m_resolver->resolve(defaultParameters);
QVERIFY(!!project);
QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
ResolvedProductPtr product = products.value("product1");
@@ -2456,7 +2456,7 @@ void TestLanguage::profileValuesAndOverriddenValues()
parameters.setOverriddenValues(overriddenValues);
parameters.setProjectFilePath(testProject("profilevaluesandoverriddenvalues.qbs"));
parameters.expandBuildConfiguration();
- project = loader->loadProject(parameters);
+ project = m_resolver->resolve(parameters);
QVERIFY(!!project);
QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
ResolvedProductPtr product = products.value("product1");
@@ -2518,7 +2518,7 @@ void TestLanguage::productConditions()
bool exceptionCaught = false;
try {
defaultParameters.setProjectFilePath(testProject("productconditions.qbs"));
- TopLevelProjectPtr project = loader->loadProject(defaultParameters);
+ TopLevelProjectPtr project = m_resolver->resolve(defaultParameters);
QVERIFY(!!project);
QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
QCOMPARE(products.size(), 6);
@@ -2559,7 +2559,7 @@ void TestLanguage::productDirectories()
bool exceptionCaught = false;
try {
defaultParameters.setProjectFilePath(testProject("productdirectories.qbs"));
- ResolvedProjectPtr project = loader->loadProject(defaultParameters);
+ ResolvedProjectPtr project = m_resolver->resolve(defaultParameters);
QVERIFY(!!project);
QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
QCOMPARE(products.size(), 1);
@@ -2718,7 +2718,7 @@ void TestLanguage::propertiesBlockInGroup()
bool exceptionCaught = false;
try {
defaultParameters.setProjectFilePath(testProject("properties-block-in-group.qbs"));
- const TopLevelProjectPtr project = loader->loadProject(defaultParameters);
+ const TopLevelProjectPtr project = m_resolver->resolve(defaultParameters);
QVERIFY(!!project);
QCOMPARE(project->allProducts().size(), size_t(1));
const ResolvedProductConstPtr product = project->allProducts().front();
@@ -2744,7 +2744,7 @@ void TestLanguage::propertiesItemInModule()
try {
defaultParameters.setProjectFilePath(
testProject("properties-item-in-module.qbs"));
- const TopLevelProjectPtr project = loader->loadProject(defaultParameters);
+ const TopLevelProjectPtr project = m_resolver->resolve(defaultParameters);
QVERIFY(!!project);
const QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
QCOMPARE(products.size(), 2);
@@ -2765,7 +2765,7 @@ void TestLanguage::propertyAssignmentInExportedGroup()
try {
defaultParameters.setProjectFilePath(
testProject("property-assignment-in-exported-group.qbs"));
- const TopLevelProjectPtr project = loader->loadProject(defaultParameters);
+ const TopLevelProjectPtr project = m_resolver->resolve(defaultParameters);
QVERIFY(!!project);
const QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
QCOMPARE(products.size(), 2);
@@ -2793,7 +2793,7 @@ void TestLanguage::qbs1275()
bool exceptionCaught = false;
try {
defaultParameters.setProjectFilePath(testProject("qbs1275.qbs"));
- const TopLevelProjectPtr project = loader->loadProject(defaultParameters);
+ const TopLevelProjectPtr project = m_resolver->resolve(defaultParameters);
QVERIFY(!!project);
const QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
QCOMPARE(products.count(), 5);
@@ -2810,7 +2810,7 @@ void TestLanguage::qbsPropertiesInProjectCondition()
try {
defaultParameters.setProjectFilePath(
testProject("qbs-properties-in-project-condition.qbs"));
- const TopLevelProjectPtr project = loader->loadProject(defaultParameters);
+ const TopLevelProjectPtr project = m_resolver->resolve(defaultParameters);
QVERIFY(!!project);
const QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
QCOMPARE(products.size(), 0);
@@ -2828,7 +2828,7 @@ void TestLanguage::qbsPropertyConvenienceOverride()
SetupProjectParameters params = defaultParameters;
params.setProjectFilePath(testProject("qbs-property-convenience-override.qbs"));
params.setOverriddenValues({std::make_pair("qbs.installPrefix", "/opt")});
- TopLevelProjectConstPtr project = loader->loadProject(params);
+ TopLevelProjectConstPtr project = m_resolver->resolve(params);
QVERIFY(!!project);
QCOMPARE(project->products.size(), size_t(1));
QCOMPARE(project->products.front()->moduleProperties->qbsPropertyValue("installPrefix")
@@ -2849,7 +2849,7 @@ void TestLanguage::relaxedErrorMode()
params.setProjectFilePath(testProject("relaxed-error-mode/relaxed-error-mode.qbs"));
params.setProductErrorMode(strictMode ? ErrorHandlingMode::Strict
: ErrorHandlingMode::Relaxed);
- const TopLevelProjectPtr project = loader->loadProject(params);
+ const TopLevelProjectPtr project = m_resolver->resolve(params);
QVERIFY(!strictMode);
const auto productMap = productsFromProject(project);
const ResolvedProductConstPtr brokenProduct = productMap.value("broken");
@@ -2897,7 +2897,7 @@ void TestLanguage::requiredAndNonRequiredDependencies()
SetupProjectParameters params = defaultParameters;
const QString projectFilePath = "required-and-nonrequired-dependencies/" + projectFile;
params.setProjectFilePath(testProject(projectFilePath.toLocal8Bit()));
- const TopLevelProjectConstPtr project = loader->loadProject(params);
+ const TopLevelProjectConstPtr project = m_resolver->resolve(params);
QVERIFY(!!project);
QVERIFY(!exceptionExpected);
} catch (const ErrorInfo &e) {
@@ -2927,7 +2927,7 @@ void TestLanguage::suppressedAndNonSuppressedErrors()
SetupProjectParameters params = defaultParameters;
const QString projectFilePath = "suppressed-and-non-suppressed-errors.qbs";
params.setProjectFilePath(testProject(projectFilePath.toLocal8Bit()));
- const TopLevelProjectConstPtr project = loader->loadProject(params);
+ const TopLevelProjectConstPtr project = m_resolver->resolve(params);
QFAIL("failure expected");
} catch (const ErrorInfo &e) {
QVERIFY2(e.toString().contains("easter bunny"), qPrintable(e.toString()));
@@ -2944,7 +2944,7 @@ void TestLanguage::throwingProbe()
QVariantMap properties;
properties.insert(QStringLiteral("products.theProduct.enableProbe"), enableProbe);
params.setOverriddenValues(properties);
- const TopLevelProjectPtr project = loader->loadProject(params);
+ const TopLevelProjectPtr project = m_resolver->resolve(params);
QVERIFY(!!project);
QVERIFY(!enableProbe);
} catch (const ErrorInfo &e) {
@@ -2988,7 +2988,7 @@ void TestLanguage::recursiveProductDependencies()
try {
defaultParameters.setProjectFilePath(
testProject("recursive-dependencies/recursive-dependencies.qbs"));
- const TopLevelProjectPtr project = loader->loadProject(defaultParameters);
+ const TopLevelProjectPtr project = m_resolver->resolve(defaultParameters);
QVERIFY(!!project);
const QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
QCOMPARE(products.size(), 4);
@@ -3051,7 +3051,7 @@ void TestLanguage::useInternalProfile()
SetupProjectParameters params = defaultParameters;
params.setProjectFilePath(testProject("use-internal-profile.qbs"));
params.setTopLevelProfile(profile);
- TopLevelProjectConstPtr project = loader->loadProject(params);
+ TopLevelProjectConstPtr project = m_resolver->resolve(params);
QVERIFY(!!project);
QCOMPARE(project->profile(), profile);
QCOMPARE(project->products.size(), size_t(1));
@@ -3261,7 +3261,7 @@ void TestLanguage::wildcards()
ResolvedProductPtr product;
try {
defaultParameters.setProjectFilePath(projectFilePath);
- project = loader->loadProject(defaultParameters);
+ project = m_resolver->resolve(defaultParameters);
QVERIFY(!!project);
const QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
product = products.value("MyProduct");
diff --git a/tests/auto/language/tst_language.h b/tests/auto/language/tst_language.h
index f1be40c88..0a59c48b1 100644
--- a/tests/auto/language/tst_language.h
+++ b/tests/auto/language/tst_language.h
@@ -41,7 +41,7 @@
#define TST_LANGUAGE_H
#include <language/forward_decls.h>
-#include <loader/loader.h>
+#include <loader/projectresolver.h>
#include <logging/ilogsink.h>
#include <tools/setupprojectparameters.h>
@@ -61,7 +61,7 @@ private:
qbs::Settings * const m_settings;
qbs::Internal::Logger m_logger;
std::unique_ptr<qbs::Internal::ScriptEngine> m_engine;
- qbs::Internal::Loader *loader;
+ qbs::Internal::ProjectResolver *m_resolver;
qbs::Internal::TopLevelProjectPtr project;
qbs::SetupProjectParameters defaultParameters;
const QString m_wildcardsTestDirPath;
@@ -75,8 +75,8 @@ private:
private slots:
void init();
+ void cleanup();
void initTestCase();
- void cleanupTestCase();
void additionalProductTypes();
void baseProperty();