aboutsummaryrefslogtreecommitdiff
path: root/generateCppAdapter.cpp
diff options
context:
space:
mode:
authorSteven Moreland <smoreland@google.com>2017-11-03 12:20:43 -0700
committerSteven Moreland <smoreland@google.com>2017-11-07 10:50:46 -0800
commit9a270b9ca5ca477293d214dacf2435cdaf91e420 (patch)
tree306f877b78ff6126d33966f1a80f28a409900b76 /generateCppAdapter.cpp
parentb47e69b647916a28702926abaa14ec5d10c3f796 (diff)
downloadhidl-9a270b9ca5ca477293d214dacf2435cdaf91e420.tar.gz
For every hal, there exists an adapter-helper.
Currently in main.cpp, adapter-helper dependencies must correspond to filter(deps, !isTypesOnly). However, this doesn't fit a Soong mutator very well. To reduce the complexity, making outputs consistent. Test: with hidl-soong-rules genrules produce required output Bug: 35570956 Change-Id: I6247f6148e1736932689a4b795d3494a283c72fa
Diffstat (limited to 'generateCppAdapter.cpp')
-rw-r--r--generateCppAdapter.cpp110
1 files changed, 55 insertions, 55 deletions
diff --git a/generateCppAdapter.cpp b/generateCppAdapter.cpp
index 5e41edc3..27c70d9d 100644
--- a/generateCppAdapter.cpp
+++ b/generateCppAdapter.cpp
@@ -45,11 +45,7 @@ status_t AST::generateCppAdapter(const std::string& outputPath) const {
}
status_t AST::generateCppAdapterHeader(const std::string& outputPath) const {
- if (!AST::isInterface()) {
- return OK;
- }
-
- const std::string klassName = getInterface()->getAdapterName();
+ const std::string klassName = AST::isInterface() ? getInterface()->getAdapterName() : "Atypes";
Formatter out = mCoordinator->getFormatter(outputPath, mPackage,
Coordinator::Location::GEN_OUTPUT, klassName + ".h");
@@ -63,37 +59,41 @@ status_t AST::generateCppAdapterHeader(const std::string& outputPath) const {
out << "#ifndef " << guard << "\n";
out << "#define " << guard << "\n\n";
- generateCppPackageInclude(out, mPackage, getInterface()->localName());
+ if (AST::isInterface()) {
+ generateCppPackageInclude(out, mPackage, getInterface()->localName());
- enterLeaveNamespace(out, true /* enter */);
- out.endl();
+ enterLeaveNamespace(out, true /* enter */);
+ out.endl();
- const std::string mockName = getInterface()->fqName().cppName();
+ const std::string mockName = getInterface()->fqName().cppName();
- out << "class " << klassName << " : public " << mockName << " ";
- out.block([&] {
- out << "public:\n";
- out << "typedef " << mockName << " Pure;\n";
+ out << "class " << klassName << " : public " << mockName << " ";
+ out.block([&] {
+ out << "public:\n";
+ out << "typedef " << mockName << " Pure;\n";
- out << klassName << "(::android::sp<" << mockName << "> impl);\n";
+ out << klassName << "(::android::sp<" << mockName << "> impl);\n";
- generateMethods(out, [&](const Method* method, const Interface* /* interface */) {
- if (method->isHidlReserved()) {
- return OK;
- }
+ generateMethods(out, [&](const Method* method, const Interface* /* interface */) {
+ if (method->isHidlReserved()) {
+ return OK;
+ }
- out << "virtual ";
- method->generateCppSignature(out);
- out << " override;\n";
+ out << "virtual ";
+ method->generateCppSignature(out);
+ out << " override;\n";
- return OK;
- });
- out << "private:\n";
- out << "::android::sp<" << mockName << "> mImpl;\n";
+ return OK;
+ });
+ out << "private:\n";
+ out << "::android::sp<" << mockName << "> mImpl;\n";
- }) << ";\n\n";
+ }) << ";\n\n";
- enterLeaveNamespace(out, false /* enter */);
+ enterLeaveNamespace(out, false /* enter */);
+ } else {
+ out << "// no adapters for types.hal\n";
+ }
out << "#endif // " << guard << "\n";
@@ -101,11 +101,7 @@ status_t AST::generateCppAdapterHeader(const std::string& outputPath) const {
}
status_t AST::generateCppAdapterSource(const std::string& outputPath) const {
- if (!AST::isInterface()) {
- return OK;
- }
-
- const std::string klassName = getInterface()->getAdapterName();
+ const std::string klassName = AST::isInterface() ? getInterface()->getAdapterName() : "Atypes";
Formatter out = mCoordinator->getFormatter(
outputPath, mPackage, Coordinator::Location::GEN_OUTPUT, klassName + ".cpp");
@@ -114,37 +110,41 @@ status_t AST::generateCppAdapterSource(const std::string& outputPath) const {
return UNKNOWN_ERROR;
}
- out << "#include <hidladapter/HidlBinderAdapter.h>\n";
-
- generateCppPackageInclude(out, mPackage, getInterface()->localName());
generateCppPackageInclude(out, mPackage, klassName);
- std::set<FQName> allImportedNames;
- getAllImportedNames(&allImportedNames);
- for (const auto& item : allImportedNames) {
- if (item.name() == "types") {
- continue;
+ if (AST::isInterface()) {
+ out << "#include <hidladapter/HidlBinderAdapter.h>\n";
+ generateCppPackageInclude(out, mPackage, getInterface()->localName());
+
+ std::set<FQName> allImportedNames;
+ getAllImportedNames(&allImportedNames);
+ for (const auto& item : allImportedNames) {
+ if (item.name() == "types") {
+ continue;
+ }
+ generateCppPackageInclude(out, item, item.getInterfaceAdapterName());
}
- generateCppPackageInclude(out, item, item.getInterfaceAdapterName());
- }
- out.endl();
+ out.endl();
- enterLeaveNamespace(out, true /* enter */);
- out.endl();
+ enterLeaveNamespace(out, true /* enter */);
+ out.endl();
- const std::string mockName = getInterface()->fqName().cppName();
+ const std::string mockName = getInterface()->fqName().cppName();
- out << klassName << "::" << klassName << "(::android::sp<" << mockName
- << "> impl) : mImpl(impl) {}";
+ out << klassName << "::" << klassName << "(::android::sp<" << mockName
+ << "> impl) : mImpl(impl) {}";
- generateMethods(out, [&](const Method* method, const Interface* /* interface */) {
- generateAdapterMethod(out, method);
- return OK;
- });
+ generateMethods(out, [&](const Method* method, const Interface* /* interface */) {
+ generateAdapterMethod(out, method);
+ return OK;
+ });
- enterLeaveNamespace(out, false /* enter */);
- out.endl();
+ enterLeaveNamespace(out, false /* enter */);
+ out.endl();
+ } else {
+ out << "// no adapters for types.hal\n";
+ }
return OK;
}
@@ -222,4 +222,4 @@ void AST::generateAdapterMethod(Formatter& out, const Method* method) const {
}).endl();
}
-} // namespace android \ No newline at end of file
+} // namespace android