hidl-gen: Fix warnings for unused parameters.

Test: `mma` does not have warnings on unused paramters
      on GraphAll.cpp.

Change-Id: Ib4ddd38c34f1de5aef1cdefdfa0539840fb44a8e
diff --git a/CompoundType.cpp b/CompoundType.cpp
index 11dd68a..2e2db7e 100644
--- a/CompoundType.cpp
+++ b/CompoundType.cpp
@@ -654,17 +654,31 @@
               << (prefix.empty() ? "" : (prefix + "::"))
               << localName();
 
+
+    bool useParent = false;
+    for (const auto &field : *mFields) {
+        if (field->type().useParentInEmitResolveReferencesEmbedded()) {
+            useParent = true;
+            break;
+        }
+    }
+
+    std::string parentHandleName = useParent ? "parentHandle" : "/* parentHandle */";
+    std::string parentOffsetName = useParent ? "parentOffset" : "/* parentOffset */";
+
     if (isReader) {
         out << "::readEmbeddedReferenceFromParcel(\n";
         out.indent(); out.indent();
         out << "const ::android::hardware::Parcel &parcel,\n"
-            << "size_t parentHandle, size_t parentOffset)\n";
+            << "size_t " << parentHandleName << ", "
+            << "size_t " << parentOffsetName << ")\n";
         out.unindent(); out.unindent();
     } else {
         out << "::writeEmbeddedReferenceToParcel(\n";
         out.indent(); out.indent();
         out << "::android::hardware::Parcel *parcel,\n"
-            << "size_t parentHandle, size_t parentOffset) const\n";
+            << "size_t " << parentHandleName << ", "
+            << "size_t " << parentOffsetName << ") const\n";
         out.unindent(); out.unindent();
     }
 
@@ -674,6 +688,10 @@
 
     out << "::android::status_t _hidl_err = ::android::OK;\n\n";
 
+    // if not useParent, then parentName and offsetText
+    // should not be used at all, then the #error should not be emitted.
+    std::string error = useParent ? "" : "\n#error\n";
+
     for (const auto &field : *mFields) {
         if (!field->type().needsResolveReferences()) {
             continue;
@@ -689,12 +707,14 @@
             !isReader, // bool parcelObjIsPointer,
             isReader, // bool isReader,
             ErrorMode_Return,
-            "parentHandle",
-            "parentOffset + offsetof("
+            parentHandleName + error,
+            parentOffsetName
+                + " + offsetof("
                 + fullName()
                 + ", "
                 + field->name()
-                + ")"); // ErrorMode mode
+                + ")"
+                + error);
     }
 
     out.unindent();
diff --git a/Type.cpp b/Type.cpp
index 0b2b715..54f5956 100644
--- a/Type.cpp
+++ b/Type.cpp
@@ -146,6 +146,10 @@
     CHECK(!"Should not be here");
 }
 
+bool Type::useParentInEmitResolveReferencesEmbedded() const {
+    return true;
+}
+
 void Type::emitReaderWriterEmbedded(
         Formatter &,
         size_t,
diff --git a/Type.h b/Type.h
index ce0d78f..b693b5f 100644
--- a/Type.h
+++ b/Type.h
@@ -140,6 +140,8 @@
             const std::string &parentName,
             const std::string &offsetText) const;
 
+    virtual bool useParentInEmitResolveReferencesEmbedded() const;
+
     virtual void emitJavaReaderWriter(
             Formatter &out,
             const std::string &parcelObj,
diff --git a/VectorType.cpp b/VectorType.cpp
index 8bf3ede..b7bebe4 100644
--- a/VectorType.cpp
+++ b/VectorType.cpp
@@ -248,6 +248,11 @@
         parcelObjIsPointer, isReader, mode, "", "");
 }
 
+bool VectorType::useParentInEmitResolveReferencesEmbedded() const {
+    // parentName and offsetText is not used in emitResolveReferencesEmbedded
+    return false;
+}
+
 void VectorType::emitResolveReferencesEmbeddedHelper(
             Formatter &out,
             size_t depth,
diff --git a/VectorType.h b/VectorType.h
index 3f3e7d3..7627509 100644
--- a/VectorType.h
+++ b/VectorType.h
@@ -77,6 +77,8 @@
             const std::string &parentName,
             const std::string &offsetText) const override;
 
+    bool useParentInEmitResolveReferencesEmbedded() const override;
+
     void emitJavaReaderWriter(
             Formatter &out,
             const std::string &parcelObj,