summaryrefslogtreecommitdiff
path: root/cpp/src/Slice/JavaUtil.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Slice/JavaUtil.cpp')
-rw-r--r--cpp/src/Slice/JavaUtil.cpp21
1 files changed, 18 insertions, 3 deletions
diff --git a/cpp/src/Slice/JavaUtil.cpp b/cpp/src/Slice/JavaUtil.cpp
index 8986ff98b3c..a5b55146e1f 100644
--- a/cpp/src/Slice/JavaUtil.cpp
+++ b/cpp/src/Slice/JavaUtil.cpp
@@ -990,10 +990,25 @@ Slice::JavaGenerator::writeSequenceMarshalUnmarshalCode(Output& out,
out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < __len" << iter << "; __i" << iter
<< "++)";
out << sb;
- out << nl << origContentS << " __elem;";
+ BuiltinPtr builtin = BuiltinPtr::dynamicCast(origContent);
+ if((builtin && builtin->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast(origContent))
+ {
+ out << nl << v << ".add(null);";
+ ostringstream patchParams;
+ patchParams << v << ", __i" << iter;
+ writeMarshalUnmarshalCode(out, scope, seq->type(), "__elem", false, iter, false,
+ list<string>(), patchParams.str());
+ }
+ else
+ {
+ out << nl << origContentS << " __elem;";
+ writeMarshalUnmarshalCode(out, scope, seq->type(), "__elem", false, iter, false);
+ }
iter++;
- writeMarshalUnmarshalCode(out, scope, seq->type(), "__elem", false, iter, false);
- out << nl << v << ".add(__elem);";
+ if((builtin && builtin->kind() != Builtin::KindObject) && !ClassDeclPtr::dynamicCast(origContent))
+ {
+ out << nl << v << ".add(__elem);";
+ }
out << eb;
}
}