Keeping track of imported names, resolve enum storage types, some finetuning.
diff --git a/generateCpp.cpp b/generateCpp.cpp
index 4d80b06..0ab32b8 100644
--- a/generateCpp.cpp
+++ b/generateCpp.cpp
@@ -84,16 +84,21 @@
return err;
}
-void AST::getPackageComponents(
- std::vector<std::string> *components) const {
- SplitString(mPackage.package(), '.', components);
+// static
+void AST::GetPackageComponents(
+ const FQName &fqName,
+ std::vector<std::string> *components) {
+ SplitString(fqName.package(), '.', components);
}
-void AST::getPackageAndVersionComponents(
- std::vector<std::string> *components, bool cpp_compatible) const {
- getPackageComponents(components);
+// static
+void AST::GetPackageAndVersionComponents(
+ const FQName &fqName,
+ std::vector<std::string> *components,
+ bool cpp_compatible) {
+ GetPackageComponents(fqName, components);
- const std::string packageVersion = mPackage.version();
+ const std::string packageVersion = fqName.version();
CHECK(packageVersion[0] == '@');
if (!cpp_compatible) {
@@ -112,6 +117,16 @@
components->push_back(versionString);
}
+void AST::getPackageComponents(
+ std::vector<std::string> *components) const {
+ GetPackageComponents(mPackage, components);
+}
+
+void AST::getPackageAndVersionComponents(
+ std::vector<std::string> *components, bool cpp_compatible) const {
+ GetPackageAndVersionComponents(mPackage, components, cpp_compatible);
+}
+
std::string AST::makeHeaderGuard(const std::string &baseName) const {
std::vector<std::string> packageComponents;
getPackageAndVersionComponents(
@@ -179,6 +194,25 @@
out << "#ifndef " << guard << "\n";
out << "#define " << guard << "\n\n";
+ for (const auto &item : mImportedNames) {
+ out << "#include <";
+
+ std::vector<std::string> components;
+ GetPackageAndVersionComponents(
+ item, &components, false /* cpp_compatible */);
+
+ for (const auto &component : components) {
+ out << component << "/";
+ }
+
+ out << item.name()
+ << ".h>\n";
+ }
+
+ if (!mImportedNames.empty()) {
+ out << "\n";
+ }
+
out << "#include <hwbinder/HidlSupport.h>\n";
if (isInterface) {
@@ -199,7 +233,10 @@
out.indent();
- out << "DECLARE_HWBINDER_META_INTERFACE(" << ifaceName << ");\n\n";
+ // cut off the leading 'I'.
+ const std::string baseName = ifaceName.substr(1);
+
+ out << "DECLARE_HWBINDER_META_INTERFACE(" << baseName << ");\n\n";
}
status_t err = emitTypeDeclarations(out);