Add HalInterface to compatibility matrix
Test: libvintf_test
Test: vintf_object_test
Bug: 38395193
Change-Id: I6dfc21bbfb63b575558405e441f3926ff3813eb8
Merged-In: I6dfc21bbfb63b575558405e441f3926ff3813eb8
diff --git a/parse_xml.cpp b/parse_xml.cpp
index 7287604..8caab4f 100644
--- a/parse_xml.cpp
+++ b/parse_xml.cpp
@@ -470,14 +470,25 @@
appendAttr(root, "optional", hal.optional);
appendTextElement(root, "name", hal.name, d);
appendChildren(root, versionRangeConverter, hal.versionRanges, d);
+ appendChildren(root, halInterfaceConverter, iterateValues(hal.interfaces), d);
}
bool buildObject(MatrixHal *object, NodeType *root) const override {
+ std::vector<HalInterface> interfaces;
if (!parseOptionalAttr(root, "format", HalFormat::HIDL, &object->format) ||
!parseOptionalAttr(root, "optional", false /* defaultValue */, &object->optional) ||
!parseTextElement(root, "name", &object->name) ||
- !parseChildren(root, versionRangeConverter, &object->versionRanges)) {
+ !parseChildren(root, versionRangeConverter, &object->versionRanges) ||
+ !parseChildren(root, halInterfaceConverter, &interfaces)) {
return false;
}
+ for (auto&& interface : interfaces) {
+ std::string name{interface.name};
+ auto res = object->interfaces.emplace(std::move(name), std::move(interface));
+ if (!res.second) {
+ this->mLastError = "Duplicated instance entry " + res.first->first;
+ return false;
+ }
+ }
return true;
}
};