aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@digia.com>2014-05-16 16:48:44 +0200
committerChristian Kandeler <christian.kandeler@digia.com>2014-05-16 18:07:44 +0200
commit1b2af7ac833fc6bc64997dc3410b632bc810de69 (patch)
tree4489c9b2a7241ec8ed0e263a35b4422dc4b3949b
parent97c589b44677733fb2b2aa7ba521faebf3241f3b (diff)
yield error for conflicting Groups
Groups with the same fileTagsFilter that are defined in the same file yield an error now. Preparation to fix QBS-424. Change-Id: Ifa85a0b6c7c9ab19946b6e339d2771164e926378 Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
-rw-r--r--src/lib/corelib/language/projectresolver.cpp13
-rw-r--r--src/lib/corelib/language/projectresolver.h2
-rw-r--r--src/lib/corelib/language/testdata/erroneous/conflicting_fileTagsFilter.qbs13
-rw-r--r--src/lib/corelib/language/tst_language.cpp2
4 files changed, 30 insertions, 0 deletions
diff --git a/src/lib/corelib/language/projectresolver.cpp b/src/lib/corelib/language/projectresolver.cpp
index 346658bf2..8b58912ed 100644
--- a/src/lib/corelib/language/projectresolver.cpp
+++ b/src/lib/corelib/language/projectresolver.cpp
@@ -457,6 +457,17 @@ void ProjectResolver::resolveGroup(Item *item, ProjectContext *projectContext)
if (Q_UNLIKELY(!files.isEmpty()))
throw ErrorInfo(Tr::tr("Group.files and Group.fileTagsFilters are exclusive."),
item->location());
+
+ ProductContext::ArtifactPropertiesInfo apinfo
+ = m_productContext->artifactPropertiesPerFilter.value(fileTagsFilter);
+ if (apinfo.first) {
+ if (apinfo.second.fileName() == item->location().fileName()) {
+ ErrorInfo error(Tr::tr("Conflicting fileTagsFilter in Group items."));
+ error.append(Tr::tr("First item"), apinfo.second);
+ error.append(Tr::tr("Second item"), item->location());
+ throw error;
+ }
+ }
if (!isEnabled)
return;
ArtifactPropertiesPtr aprops = ArtifactProperties::create();
@@ -465,6 +476,8 @@ void ProjectResolver::resolveGroup(Item *item, ProjectContext *projectContext)
cfg->setValue(evaluateModuleValues(item));
aprops->setPropertyMapInternal(cfg);
m_productContext->product->artifactProperties += aprops;
+ m_productContext->artifactPropertiesPerFilter.insert(fileTagsFilter,
+ ProductContext::ArtifactPropertiesInfo(aprops, item->location()));
return;
}
if (Q_UNLIKELY(files.isEmpty() && !item->hasProperty(QLatin1String("files")))) {
diff --git a/src/lib/corelib/language/projectresolver.h b/src/lib/corelib/language/projectresolver.h
index fa6569cd5..630786db7 100644
--- a/src/lib/corelib/language/projectresolver.h
+++ b/src/lib/corelib/language/projectresolver.h
@@ -80,6 +80,8 @@ private:
QString buildDirectory;
FileTags additionalFileTags;
Item *item;
+ typedef QPair<ArtifactPropertiesPtr, CodeLocation> ArtifactPropertiesInfo;
+ QHash<QStringList, ArtifactPropertiesInfo> artifactPropertiesPerFilter;
};
struct ModuleContext
diff --git a/src/lib/corelib/language/testdata/erroneous/conflicting_fileTagsFilter.qbs b/src/lib/corelib/language/testdata/erroneous/conflicting_fileTagsFilter.qbs
new file mode 100644
index 000000000..54b3343e4
--- /dev/null
+++ b/src/lib/corelib/language/testdata/erroneous/conflicting_fileTagsFilter.qbs
@@ -0,0 +1,13 @@
+import qbs 1.0
+
+Application {
+ Group {
+ fileTagsFilter: "application"
+ qbs.install: true
+ }
+ Group {
+ fileTagsFilter: "application"
+ qbs.install: false
+ }
+}
+
diff --git a/src/lib/corelib/language/tst_language.cpp b/src/lib/corelib/language/tst_language.cpp
index 061e5c227..6873391e9 100644
--- a/src/lib/corelib/language/tst_language.cpp
+++ b/src/lib/corelib/language/tst_language.cpp
@@ -370,6 +370,8 @@ void TestLanguage::erroneousFiles_data()
<< "Unexpected item type 'Narf'";
QTest::newRow("invalid_child_item_type")
<< "Items of type 'Project' cannot contain items of type 'Depends'.";
+ QTest::newRow("conflicting_fileTagsFilter")
+ << "Conflicting fileTagsFilter in Group items";
}
void TestLanguage::erroneousFiles()