Get rid of duplicated #include code.
This is in preparation to add a new target for IServiceManagerDupe and
is also general cleanup.
Test: hidl_test
Bug: 32313592
Change-Id: I9427a042e1ef0b5432e227522b616a8a948f2acf
diff --git a/generateCpp.cpp b/generateCpp.cpp
index 2e381ec..68c8bc3 100644
--- a/generateCpp.cpp
+++ b/generateCpp.cpp
@@ -78,6 +78,25 @@
return guard;
}
+// static
+void AST::generateCppPackageInclude(
+ Formatter &out,
+ const FQName &package,
+ const std::string &klass) {
+
+ out << "#include <";
+
+ std::vector<std::string> components;
+ package.getPackageAndVersionComponents(&components, false /* cpp_compatible */);
+
+ for (const auto &component : components) {
+ out << component << "/";
+ }
+
+ out << klass
+ << ".h>\n";
+}
+
void AST::enterLeaveNamespace(Formatter &out, bool enter) const {
std::vector<std::string> packageComponents;
getPackageAndVersionComponents(
@@ -130,18 +149,7 @@
out << "#define " << guard << "\n\n";
for (const auto &item : mImportedNames) {
- out << "#include <";
-
- std::vector<std::string> components;
- item.getPackageAndVersionComponents(
- &components, false /* cpp_compatible */);
-
- for (const auto &component : components) {
- out << component << "/";
- }
-
- out << item.name()
- << ".h>\n";
+ generateCppPackageInclude(out, item, item.name());
}
if (!mImportedNames.empty()) {
@@ -341,36 +349,16 @@
out << "#ifndef " << guard << "\n";
out << "#define " << guard << "\n\n";
- std::vector<std::string> packageComponents;
- getPackageAndVersionComponents(
- &packageComponents, false /* cpp_compatible */);
+ generateCppPackageInclude(out, mPackage, ifaceName);
- out << "#include <";
- for (const auto &component : packageComponents) {
- out << component << "/";
- }
- out << ifaceName << ".h>\n\n";
+ out << "\n";
for (const auto &item : mImportedNames) {
if (item.name() == "types") {
continue;
}
- out << "#include <";
-
- std::vector<std::string> components;
- item.getPackageAndVersionComponents(
- &components, false /* cpp_compatible */);
-
- for (const auto &component : components) {
- out << component << "/";
- }
-
- const std::string itemBaseName = item.getInterfaceBaseName();
-
- out << "Bn"
- << itemBaseName
- << ".h>\n";
+ generateCppPackageInclude(out, item, "Bn" + item.getInterfaceBaseName());
}
out << "\n";
@@ -583,15 +571,8 @@
out << "#ifndef " << guard << "\n";
out << "#define " << guard << "\n\n";
- std::vector<std::string> packageComponents;
- getPackageAndVersionComponents(
- &packageComponents, false /* cpp_compatible */);
-
- out << "#include <";
- for (const auto &component : packageComponents) {
- out << component << "/";
- }
- out << "IHw" << baseName << ".h>\n\n";
+ generateCppPackageInclude(out, mPackage, "IHw" + baseName);
+ out << "\n";
enterLeaveNamespace(out, true /* enter */);
out << "\n";
@@ -673,11 +654,8 @@
getPackageAndVersionComponents(
&packageComponents, false /* cpp_compatible */);
- out << "#include <";
- for (const auto &component : packageComponents) {
- out << component << "/";
- }
- out << "IHw" << baseName << ".h>\n\n";
+ generateCppPackageInclude(out, mPackage, "IHw" + baseName);
+ out << "\n";
enterLeaveNamespace(out, true /* enter */);
out << "\n";
@@ -755,33 +733,18 @@
Formatter out(file);
- std::vector<std::string> packageComponents;
- getPackageAndVersionComponents(
- &packageComponents, false /* cpp_compatible */);
-
- std::string prefix;
- for (const auto &component : packageComponents) {
- prefix += component;
- prefix += "/";
- }
-
if (isInterface) {
- out << "#include <" << prefix << "/Bp" << baseName << ".h>\n";
- out << "#include <" << prefix << "/Bn" << baseName << ".h>\n";
- out << "#include <" << prefix << "/Bs" << baseName << ".h>\n";
+ generateCppPackageInclude(out, mPackage, "Bp" + baseName);
+ generateCppPackageInclude(out, mPackage, "Bn" + baseName);
+ generateCppPackageInclude(out, mPackage, "Bs" + baseName);
for (const Interface *superType : iface->superTypeChain()) {
- std::vector<std::string> superPackageComponents;
- superType->fqName().getPackageAndVersionComponents(&superPackageComponents, false /* cpp_compatible */);
- std::string superPrefix;
- for (const auto &component : superPackageComponents) {
- superPrefix += component;
- superPrefix += "/";
- }
- out << "#include <" << superPrefix << "/Bp" << superType->getBaseName() << ".h>\n";
+ generateCppPackageInclude(out,
+ superType->fqName(),
+ "Bp" + superType->getBaseName());
}
} else {
- out << "#include <" << prefix << "types.h>\n";
+ generateCppPackageInclude(out, mPackage, "types");
}
out << "\n";
@@ -1504,11 +1467,9 @@
&packageComponents, false /* cpp_compatible */);
out << "#include <future>\n";
- out << "#include <";
- for (const auto &component : packageComponents) {
- out << component << "/";
- }
- out << ifaceName << ".h>\n\n";
+
+ generateCppPackageInclude(out, mPackage, ifaceName);
+ out << "\n";
if (supportOneway) {
out << "#include <hidl/TaskRunner.h>\n";