Remove toBinder from IHidlInterfaceBase.

Bug: 32001926
Test: hidl_test

Bug: 32559427 (4) added FQName::getTopLevelHwName

Change-Id: Ibde4f76ee51b729722569d420262182ea750b05b
diff --git a/Interface.cpp b/Interface.cpp
index 78dc679..f148386 100644
--- a/Interface.cpp
+++ b/Interface.cpp
@@ -187,6 +187,23 @@
     return fqName().getInterfaceBaseName();
 }
 
+FQName Interface::getHwName() const {
+    return FQName(fqName().package(), fqName().version(), "IHw" + getBaseName());
+}
+
+FQName Interface::getPassthroughName() const {
+    return FQName(fqName().package(), fqName().version(), "Bp" + getBaseName());
+}
+
+FQName Interface::getNativeName() const {
+    return FQName(fqName().package(), fqName().version(), "Bn" + getBaseName());
+}
+
+FQName Interface::getSameprocessName() const {
+    return FQName(fqName().package(), fqName().version(), "Bs" + getBaseName());
+}
+
+
 std::string Interface::getCppType(StorageMode mode,
                                   bool specifyNamespaces) const {
     const std::string base =
@@ -256,11 +273,31 @@
         out.unindent();
         out << "} else {\n";
         out.indent();
-        out << "_hidl_err = "
-            << parcelObjDeref
-            << "writeStrongBinder("
-            << name
-            << "->toBinder());\n";
+        out << "::android::sp<::android::hardware::IBinder> _hidl_binder = "
+            << "::android::hardware::toBinder<\n";
+        out.indentBlock(2, [&] {
+            out << fqName().cppNamespace()
+                << "::I"
+                << getBaseName()
+                << ", "
+                << fqName().cppNamespace()
+                << "::IHw"
+                << getBaseName()
+                << ">("
+                << name
+                << ");\n";
+        });
+        out << "if (_hidl_binder.get() != nullptr) {\n";
+        out.indentBlock([&] {
+            out << "_hidl_err = "
+                << parcelObjDeref
+                << "writeStrongBinder(_hidl_binder);\n";
+        });
+        out << "} else {\n";
+        out.indentBlock([&] {
+            out << "_hidl_err = ::android::UNKNOWN_ERROR;\n";
+        });
+        out << "}\n";
         out.unindent();
         out << "}\n";