diff options
4 files changed, 21 insertions, 3 deletions
diff --git a/src/lib/corelib/language/moduleloader.cpp b/src/lib/corelib/language/moduleloader.cpp index 233fa7074..6309c24fe 100644 --- a/src/lib/corelib/language/moduleloader.cpp +++ b/src/lib/corelib/language/moduleloader.cpp @@ -250,7 +250,16 @@ ModuleLoaderResult ModuleLoader::load(const SetupProjectParameters ¶meters) return ModuleLoaderResult(); } - root = wrapInProjectIfNecessary(root); + switch (root->type()) { + case ItemType::Product: + root = wrapInProjectIfNecessary(root); + break; + case ItemType::Project: + break; + default: + throw ErrorInfo(Tr::tr("The top-level item must be of type 'Project' or 'Product', but it" + " is of type '%1'.").arg(root->typeName()), root->location()); + } const QString buildDirectory = TopLevelProject::deriveBuildDirectory(parameters.buildRoot(), TopLevelProject::deriveId(parameters.finalBuildConfigurationTree())); diff --git a/src/lib/corelib/language/testdata/erroneous/undeclared_property_wrapper.qbs b/src/lib/corelib/language/testdata/erroneous/undeclared_property_wrapper.qbs index ee263ef7f..a5d9b19b3 100644 --- a/src/lib/corelib/language/testdata/erroneous/undeclared_property_wrapper.qbs +++ b/src/lib/corelib/language/testdata/erroneous/undeclared_property_wrapper.qbs @@ -1,5 +1,7 @@ import qbs -SubProject { - filePath: "undeclared_property.qbs" +Project { + SubProject { + filePath: "undeclared_property.qbs" + } } diff --git a/src/lib/corelib/language/testdata/erroneous/wrong-toplevel-item.qbs b/src/lib/corelib/language/testdata/erroneous/wrong-toplevel-item.qbs new file mode 100644 index 000000000..57e60ba4a --- /dev/null +++ b/src/lib/corelib/language/testdata/erroneous/wrong-toplevel-item.qbs @@ -0,0 +1,4 @@ +import qbs + +Artifact { +} diff --git a/src/lib/corelib/language/tst_language.cpp b/src/lib/corelib/language/tst_language.cpp index 65b0713ea..a72efb36e 100644 --- a/src/lib/corelib/language/tst_language.cpp +++ b/src/lib/corelib/language/tst_language.cpp @@ -566,6 +566,9 @@ void TestLanguage::erroneousFiles_data() << "Export item in inherited item redeclares property 'theProp' with different type."; QTest::newRow("invalid-property-option") << "PropertyOptions item refers to non-existing property 's0meProp'"; + QTest::newRow("wrong-toplevel-item") + << "wrong-toplevel-item.qbs:3:1.*The top-level item must be of type 'Project' or " + "'Product', but it is of type 'Artifact'."; } void TestLanguage::erroneousFiles() |