aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2017-01-05 16:07:15 +0100
committerChristian Kandeler <christian.kandeler@qt.io>2017-01-05 15:16:17 +0000
commitbde133890a445112ae32367bdfaed489174ef3c8 (patch)
tree9c554894ea475e1e50c92ca82372f73455c68e5c
parent4bd89e16c155610922165b246e14c15a43102e4a (diff)
Check the type of the top-level item
We neglected to do that so far. If a project's top-level item was not Project or Product, an internal error would be thrown. Change-Id: I7f4ca74107a6bcc990d21f998ae6c5b9732bfb28 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
-rw-r--r--src/lib/corelib/language/moduleloader.cpp11
-rw-r--r--src/lib/corelib/language/testdata/erroneous/undeclared_property_wrapper.qbs6
-rw-r--r--src/lib/corelib/language/testdata/erroneous/wrong-toplevel-item.qbs4
-rw-r--r--src/lib/corelib/language/tst_language.cpp3
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 &parameters)
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()