Merge "hidl2aidl: add static asserts for enums in generated translate code" am: a452c829c0
Original change: https://android-review.googlesource.com/c/platform/system/tools/hidl/+/1515133
Change-Id: I29fb831ea6740a4393ad1471f6b5db50eb010003
diff --git a/hidl2aidl/AidlTranslate.cpp b/hidl2aidl/AidlTranslate.cpp
index 63a8aed..e747b76 100644
--- a/hidl2aidl/AidlTranslate.cpp
+++ b/hidl2aidl/AidlTranslate.cpp
@@ -72,6 +72,27 @@
separator + AidlHelper::getAidlType(type, type.fqName());
}
+static void emitEnumStaticAssert(Formatter& out, const NamedType& namedType, AidlBackend backend) {
+ CHECK(namedType.isEnum());
+ const auto& enumType = static_cast<const EnumType&>(namedType);
+ enumType.forEachValueFromRoot([&](const EnumValue* value) {
+ out << "static_assert(" << aidlTypePackage(namedType, backend) << "::" << value->name()
+ << " == static_cast<" << aidlTypePackage(namedType, backend) << ">("
+ << namedType.fullName() << "::" << value->name() << "));\n";
+ });
+ out << "\n";
+}
+
+static void emitStaticAsserts(Formatter& out, const std::set<const NamedType*>& namedTypes,
+ AidlBackend backend) {
+ CHECK(backend != AidlBackend::JAVA);
+ for (const auto& namedType : namedTypes) {
+ if (namedType->isEnum()) {
+ emitEnumStaticAssert(out, *namedType, backend);
+ }
+ }
+}
+
static void namedTypeTranslation(Formatter& out, const std::set<const NamedType*>& namedTypes,
const FieldWithVersion& field, const CompoundType* parent,
AidlBackend backend) {
@@ -356,7 +377,7 @@
out << "#pragma once\n\n";
for (const auto& type : namedTypes) {
const auto& it = processedTypes.find(type);
- if (it == processedTypes.end()) {
+ if (it == processedTypes.end() && !type->isEnum()) {
continue;
}
includes.insert(aidlIncludeFile(type, backend));
@@ -390,6 +411,7 @@
out << "#include \""
<< AidlHelper::translateHeaderFile((*namedTypes.begin())->fqName(), backend) + "\"\n\n";
out << "namespace android::h2a {\n\n";
+ emitStaticAsserts(out, namedTypes, backend);
}
for (const auto& type : namedTypes) {
const auto& it = processedTypes.find(type);