diff options
author | Steven Moreland <smoreland@google.com> | 2017-11-03 12:20:43 -0700 |
---|---|---|
committer | Steven Moreland <smoreland@google.com> | 2017-11-07 10:50:46 -0800 |
commit | 9a270b9ca5ca477293d214dacf2435cdaf91e420 (patch) | |
tree | 306f877b78ff6126d33966f1a80f28a409900b76 /generateCppAdapter.cpp | |
parent | b47e69b647916a28702926abaa14ec5d10c3f796 (diff) | |
download | hidl-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.cpp | 110 |
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 |