Java support for passing vec<STRUCT-TYPE> and STRUCT-TYPE[] to and from methods.
Bug: 31380705
Change-Id: I7374538d0bc2b3562c997710bfa4ed1f95950589
diff --git a/VectorType.cpp b/VectorType.cpp
index 910bc39..05d18ed 100644
--- a/VectorType.cpp
+++ b/VectorType.cpp
@@ -57,10 +57,6 @@
return mElementType->getJavaType() + "[]";
}
-std::string VectorType::getJavaSuffix() const {
- return mElementType->getJavaSuffix() + "Vector";
-}
-
void VectorType::emitReaderWriter(
Formatter &out,
const std::string &name,
@@ -182,6 +178,38 @@
out << "}\n\n";
}
+void VectorType::emitJavaReaderWriter(
+ Formatter &out,
+ const std::string &parcelObj,
+ const std::string &argName,
+ bool isReader) const {
+ if (mElementType->isCompoundType()) {
+ if (isReader) {
+ out << mElementType->getJavaType()
+ << ".readVectorFromParcel("
+ << parcelObj
+ << ");\n";
+ } else {
+ out << mElementType->getJavaType()
+ << ".writeVectorToParcel("
+ << parcelObj
+ << ", "
+ << argName
+ << ");\n";
+ }
+
+ return;
+ }
+
+ emitJavaReaderWriterWithSuffix(
+ out,
+ parcelObj,
+ argName,
+ isReader,
+ mElementType->getJavaSuffix() + "Vector",
+ "" /* extra */);
+}
+
void VectorType::emitJavaFieldInitializer(
Formatter &out, const std::string &fieldName) const {
out << "final Vector<"
@@ -197,6 +225,18 @@
const std::string &fieldName,
const std::string &offset,
bool isReader) const {
+ VectorType::EmitJavaFieldReaderWriterForElementType(
+ out, mElementType, blobName, fieldName, offset, isReader);
+}
+
+// static
+void VectorType::EmitJavaFieldReaderWriterForElementType(
+ Formatter &out,
+ const Type *elementType,
+ const std::string &blobName,
+ const std::string &fieldName,
+ const std::string &offset,
+ bool isReader) {
if (isReader) {
out << "{\n";
out.indent();
@@ -225,12 +265,12 @@
out.indent();
- mElementType->emitJavaFieldInitializer(out, "_hidl_vec_element");
+ elementType->emitJavaFieldInitializer(out, "_hidl_vec_element");
size_t elementAlign, elementSize;
- mElementType->getAlignmentAndSize(&elementAlign, &elementSize);
+ elementType->getAlignmentAndSize(&elementAlign, &elementSize);
- mElementType->emitJavaFieldReaderWriter(
+ elementType->emitJavaFieldReaderWriter(
out,
"childBlob",
"_hidl_vec_element",
@@ -268,7 +308,7 @@
<< " + 16 /* offsetof(hidl_vec<T>, mOwnsBuffer) */, false);\n";
size_t elementAlign, elementSize;
- mElementType->getAlignmentAndSize(&elementAlign, &elementSize);
+ elementType->getAlignmentAndSize(&elementAlign, &elementSize);
// XXX make HwBlob constructor take a long instead of an int?
out << "HwBlob childBlob = new HwBlob((int)(_hidl_vec_size * "
@@ -280,7 +320,7 @@
out.indent();
- mElementType->emitJavaFieldReaderWriter(
+ elementType->emitJavaFieldReaderWriter(
out,
"childBlob",
fieldName + ".elementAt(_hidl_index)",