aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@digia.com>2013-06-17 15:43:32 +0200
committerJoerg Bornemann <joerg.bornemann@digia.com>2013-06-18 10:59:17 +0200
commit183ecb7e6a011c2ea7ac662dadb835eae2b91ec7 (patch)
treed30d0da880d656e07caf86d7ca53af36ac4b9a44
parentb1d926024ddded2a43cc182c2d97839bb528def4 (diff)
Introduce function that gets a single child item of some type.
This is useful for cases where at most one sub-item of a specific type is allowed. Calling code no longer needs to iterate over the child items manually. Change-Id: I6177ab328fed5ad564cf42917f1e6953c717baa3 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
-rw-r--r--src/lib/language/item.cpp9
-rw-r--r--src/lib/language/item.h1
-rw-r--r--src/lib/language/moduleloader.cpp9
-rw-r--r--src/lib/language/projectresolver.cpp17
4 files changed, 16 insertions, 20 deletions
diff --git a/src/lib/language/item.cpp b/src/lib/language/item.cpp
index 2255cb606..a2f1d0b85 100644
--- a/src/lib/language/item.cpp
+++ b/src/lib/language/item.cpp
@@ -126,5 +126,14 @@ void Item::setPropertyObserver(ItemObserver *observer) const
m_propertyObserver = observer;
}
+Item *Item::child(const QString &type) const
+{
+ foreach (Item * const child, children()) {
+ if (child->typeName() == type)
+ return child;
+ }
+ return 0;
+}
+
} // namespace Internal
} // namespace qbs
diff --git a/src/lib/language/item.h b/src/lib/language/item.h
index 2929006be..ae057455a 100644
--- a/src/lib/language/item.h
+++ b/src/lib/language/item.h
@@ -88,6 +88,7 @@ public:
Item *parent() const;
const FileContextPtr file() const;
QList<Item *> children() const;
+ Item *child(const QString &type) const;
const PropertyMap &properties() const;
const PropertyDeclarationMap &propertyDeclarations() const;
const Modules &modules() const;
diff --git a/src/lib/language/moduleloader.cpp b/src/lib/language/moduleloader.cpp
index 52ed8689a..7569e44c8 100644
--- a/src/lib/language/moduleloader.cpp
+++ b/src/lib/language/moduleloader.cpp
@@ -211,14 +211,7 @@ void ModuleLoader::handleSubProject(ModuleLoader::ProjectContext *projectContext
if (m_logger.traceEnabled())
m_logger.qbsTrace() << "[MODLDR] handleSubProject " << item->file()->filePath();
- Item *propertiesItem = 0;
- foreach (Item * const subItem, item->children()) {
- if (subItem->typeName() == QLatin1String("Properties")) {
- propertiesItem = subItem;
- break;
- }
- }
-
+ Item * const propertiesItem = item->child(QLatin1String("Properties"));
bool subProjectEnabled = true;
if (propertiesItem)
subProjectEnabled = checkItemCondition(propertiesItem);
diff --git a/src/lib/language/projectresolver.cpp b/src/lib/language/projectresolver.cpp
index a30260add..e48043ce1 100644
--- a/src/lib/language/projectresolver.cpp
+++ b/src/lib/language/projectresolver.cpp
@@ -217,22 +217,15 @@ void ProjectResolver::resolveSubProject(Item *item, ProjectResolver::ProjectCont
{
ProjectContext subProjectContext = createProjectContext(projectContext);
- foreach (Item * const subItem, item->children()) {
- if (subItem->typeName() == QLatin1String("Project")) {
- resolveProject(subItem, &subProjectContext);
- return;
- }
+ Item * const projectItem = item->child(QLatin1String("Project"));
+ if (projectItem) {
+ resolveProject(projectItem, &subProjectContext);
+ return;
}
// No project item was found, which means the project was disabled.
subProjectContext.project->enabled = false;
- Item *propertiesItem = 0;
- foreach (Item * const subItem, item->children()) {
- if (subItem->typeName() == QLatin1String("Properties")) {
- propertiesItem = subItem;
- break;
- }
- }
+ Item * const propertiesItem = item->child(QLatin1String("Properties"));
if (propertiesItem) {
subProjectContext.project->name
= m_evaluator->stringValue(propertiesItem, QLatin1String("name"));