diff options
author | Christian Kandeler <christian.kandeler@digia.com> | 2013-06-17 15:43:32 +0200 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@digia.com> | 2013-06-18 10:59:17 +0200 |
commit | 183ecb7e6a011c2ea7ac662dadb835eae2b91ec7 (patch) | |
tree | d30d0da880d656e07caf86d7ca53af36ac4b9a44 | |
parent | b1d926024ddded2a43cc182c2d97839bb528def4 (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.cpp | 9 | ||||
-rw-r--r-- | src/lib/language/item.h | 1 | ||||
-rw-r--r-- | src/lib/language/moduleloader.cpp | 9 | ||||
-rw-r--r-- | src/lib/language/projectresolver.cpp | 17 |
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")); |