aboutsummaryrefslogtreecommitdiffstats
path: root/src
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 /src
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>
Diffstat (limited to 'src')
-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()